Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/261.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从c控制台应用程序发送邮件会在服务器中生成winsock错误10054_C#_Email_.net 4.0_Console Application - Fatal编程技术网

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

C# 从c控制台应用程序发送邮件会在服务器中生成winsock错误10054,c#,email,.net-4.0,console-application,C#,Email,.net 4.0,Console Application,我只是试着制作一个c控制台程序。其想法是制作一个小型的自包含应用程序,该应用程序将对照数据库进行检查,并通过电子邮件向一群用户发送列表,例如,它将在每天早上自动运行 到目前为止,我还没有做到这一点,只是想先把基本知识记下来。通过在线阅读教程,我已经能够连接到数据库并在控制台中显示列表。然而,发送邮件不太成功 如果我在while循环中包含发送邮件的代码,它将生成一堆单独的邮件,因此出于某种原因,这是可行的。但那不是我想要的。我希望列表运行并编译一个列表,该列表将成为消息体。在程序的这一部分运行之后

我只是试着制作一个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.Sendmessage行之后

是否在此192.168.111.1上配置了邮件服务器。此错误表示:不支持操作。引用的对象类型不支持尝试的操作。通常,当文件描述符引用不支持此操作的文件或套接字时会发生这种情况,例如,尝试接受数据报套接字上的连接。是否在IIS中配置SMTP虚拟服务器?如果是,您需要在下面添加:client.Credentials=CredentialCache.DefaultNetworkCredentials;如果没有,请参阅下面的链接:邮件服务器可以在另一个IP上访问,我只是把它放在那里,而不是它的真实地址。我从邮件服务器本身收到了10045错误消息,所以它到达了它。邮件服务器是一个功能齐全的日常服务器。服务器软件是Mdaemon。您的邮件服务器是否启用SSL?。如果是,您还需要添加以下代码行:-smtp.Credentials=new NetworkCredentialusername,password;smtp.EnableSsl=true;我在这篇文章中寻找与使用.NET2的旧应用程序相同的错误消息;此解决方案仅适用于.NET 4以后的版本,因为在早期版本中不可用。有关更多信息,请参阅microsoft connect上有关此框架行为的文章。