我刚刚尝试制作C#控制台程序。这个想法是制作一个小的自我包含的应用程序,该应用程序将对数据库进行检查,并通过电子邮件将列表发送给一堆用户,例如,每天早晨都会自动运行。
我还没有走得那么远,只是试图首先将基础知识降低。通过在线查看教程,我能够连接到数据库并在控制台中显示列表。发送邮件不太成功。
如果我包含用于在While循环中发送邮件的代码,它将生成一堆单个邮件,因此出于某种原因有效。但这不是我想要的。我希望列表运行并编译将成为消息主体的列表。在该程序的那一部分运行之后,我想发送邮件。问题是它不起作用,当我查看服务器日志时,打开了SMTP会话,但终止并说套接字错误将响应发送到数据下一行说 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);
}
}
}
}
现在解决了问题。解决方案令人尴尬地。
仅需要添加 smtp.dispose(); 在行 smtp.send(message);