0

ac#コンソールプログラムを作ってみました。アイデアは、データベースと照合し、リストを電子メールで多数のユーザーに送信する小さな自己完結型のアプリケーションを作成することです。たとえば、毎朝自動的に実行されます。

私はまだこれまでのところ理解していません。最初に基本を理解しようとしているだけです。オンラインでチュートリアルを見ると、データベースに接続してコンソールにリストを表示することができました。ただし、メールの送信はあまり成功しません。

whileループ内にメールを送信するためのコードを含めると、多数の個別のメールが生成されるため、何らかの理由で機能します。しかし、それは私が望んでいることではありません。リストを実行して、メッセージ本文になるリストをコンパイルしたいと思います。プログラムのその部分が実行された後、私はメールを送りたいです。問題は、それが機能しないことです。サーバーログを見ると、SMTPセッションは開かれていますが、終了し、DATAに応答を送信するソケットエラーが次の行にWinsockエラー10045と表示され、セッションが終了します。

なぜこれが起こるのか考えていますか?私には本当に意味がないのは、whileループ内で実行すると機能するということです...

現在のプログラム全体は次のとおりです。

namespace SendMails
{
class ConnectToMySQL
{
    [STAThread]
    static void Main(string[] args)
    {
        string connStr = createConnstr("192.168.111.1","database","login","passwd");

        MySqlConnection conn = null;
        MySqlDataReader reader = null;

        try
        {
            conn = new MySqlConnection(connStr);
            conn.Open();

            string stm = "SELECT id, name, surname FROM Kat WHERE Contact = 'Yes' AND Contactwhen <= '"+ DateTime.Today + "'";
            MySqlCommand cmd = new MySqlCommand(stm, conn);
            reader = cmd.ExecuteReader();

            //The actual output on the screen.
            while (reader.Read())
            {
               Console.WriteLine(reader.GetInt32(0) + ": " + reader.GetString(1) + " " + reader.GetString(2));                    
            }

        }
        catch (MySqlException ex)
        {
            Console.WriteLine("Error: {0}", ex.ToString());

        }
        finally
        {
            if (conn != null)
            {
                conn.Close();
            }
        }

        createMail("me@company.com", "info@company.com", "Test message", "Here is your test message.");

    }

    //This builds a mysql connection string
    public static string createConnstr(string server, string databaseName, string user, string passw)
    {
        //build connection string
        string connStr = "server=" + server + ";database=" + databaseName + ";uid=" + user + ";password=" + passw + ";";

        //return connection string
        return connStr;
    }

    //This sends an email
    static void createMail(string recipient, string from, string subject, string msg)
    {
        System.Net.Mail.MailMessage message = new System.Net.Mail.MailMessage();
        message.To.Add(recipient);
        message.Subject = subject;
        message.From = new System.Net.Mail.MailAddress(from);
        message.Body = msg;
        System.Net.Mail.SmtpClient smtp = new System.Net.Mail.SmtpClient("192.168.111.1");
        try
        {
            Console.WriteLine("Sending mail...");
            smtp.Send(message);
            Console.WriteLine("Mail was sent successfully!");
        }
        catch (Exception ep)
        {
            Console.WriteLine("failed to send mail:");
            Console.WriteLine(ep.Message);
        }
    }

}

}

4

1 に答える 1

0

これで問題は解決しました。解決策は恥ずかしいほど些細なものでした。

smtp.Dispose();を追加するだけです。行の後にsmtp.Send(message);

于 2012-11-06T11:40:36.207 に答える