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);
}
}
}
}