C# 从c控制台应用程序发送邮件会在服务器中生成winsock错误10054
我只是试着制作一个c控制台程序。其想法是制作一个小型的自包含应用程序,该应用程序将对照数据库进行检查,并通过电子邮件向一群用户发送列表,例如,它将在每天早上自动运行 到目前为止,我还没有做到这一点,只是想先把基本知识记下来。通过在线阅读教程,我已经能够连接到数据库并在控制台中显示列表。然而,发送邮件不太成功 如果我在while循环中包含发送邮件的代码,它将生成一堆单独的邮件,因此出于某种原因,这是可行的。但那不是我想要的。我希望列表运行并编译一个列表,该列表将成为消息体。在程序的这一部分运行之后,我想发送邮件。问题是它不工作,当我查看服务器日志时,一个SMTP会话被打开,但它终止,并说套接字错误发送数据响应下一行说Winsock错误10045,会话终止 知道为什么会这样吗?对我来说真正没有意义的事情是,如果在while循环中运行,它就会工作 以下是目前的整个计划:C# 从c控制台应用程序发送邮件会在服务器中生成winsock错误10054,c#,email,.net-4.0,console-application,C#,Email,.net 4.0,Console Application,我只是试着制作一个c控制台程序。其想法是制作一个小型的自包含应用程序,该应用程序将对照数据库进行检查,并通过电子邮件向一群用户发送列表,例如,它将在每天早上自动运行 到目前为止,我还没有做到这一点,只是想先把基本知识记下来。通过在线阅读教程,我已经能够连接到数据库并在控制台中显示列表。然而,发送邮件不太成功 如果我在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上有关此框架行为的文章。