从C#控制台应用程序发送邮件将在服务器中生成Winsock错误10054



我刚刚尝试制作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);

之后。

最新更新