繁体   English   中英

从控制台应用程序发送电子邮件时出错

[英]Error while sending email from Console application

我正在尝试从控制台应用程序发送邮件,但抛出错误:

邮件发送失败

我不明白是什么原因引起的错误。 我在另一台机器上尝试了相同的代码,并且工作正常。 这是堆栈跟踪:

System.Net.Mail.SmtpException: Failure sending mail. ---> System.Net.WebExceptio
n: Unable to connect to the remote server ---> System.Net.Sockets.SocketExceptio
n: The requested address is not valid in its context 66.96.147.108:25
   at System.Net.Sockets.Socket.DoConnect(EndPoint endPointSnapshot, SocketAddre
ss socketAddress)
   at System.Net.ServicePoint.ConnectSocketInternal(Boolean connectFailure, Sock
et s4, Socket s6, Socket& socket, IPAddress& address, ConnectSocketState state,
IAsyncResult asyncResult, Int32 timeout, Exception& exception)
   --- End of inner exception stack trace ---
   at System.Net.ServicePoint.GetConnection(PooledStream PooledStream, Object ow
ner, Boolean async, IPAddress& address, Socket& abortSocket, Socket& abortSocket
6, Int32 timeout)
   at System.Net.PooledStream.Activate(Object owningObject, Boolean async, Int32
 timeout, GeneralAsyncDelegate asyncCallback)
   at System.Net.PooledStream.Activate(Object owningObject, GeneralAsyncDelegate
 asyncCallback)
   at System.Net.ConnectionPool.GetConnection(Object owningObject, GeneralAsyncD
elegate asyncCallback, Int32 creationTimeout)
   at System.Net.Mail.SmtpConnection.GetConnection(ServicePoint servicePoint)
   at System.Net.Mail.SmtpTransport.GetConnection(ServicePoint servicePoint)
   at System.Net.Mail.SmtpClient.GetConnection()
   at System.Net.Mail.SmtpClient.Send(MailMessage message)
   --- End of inner exception stack trace ---
   at System.Net.Mail.SmtpClient.Send(MailMessage message)
   at PaymentReminder.Program.SendMail(List`1 SourceList) in C:\Documents and Se
ttings\amols\my documents\visual studio 2010\Projects\PaymentReminder\PaymentRem
inder\Program.cs:line 110
InnerException is: System.Net.WebException: Unable to connect to the remote serv
er ---> System.Net.Sockets.SocketException: The requested address is not valid i
n its context 66.96.147.108:25
   at System.Net.Sockets.Socket.DoConnect(EndPoint endPointSnapshot, SocketAddre
ss socketAddress)
   at System.Net.ServicePoint.ConnectSocketInternal(Boolean connectFailure, Sock
et s4, Socket s6, Socket& socket, IPAddress& address, ConnectSocketState state,
IAsyncResult asyncResult, Int32 timeout, Exception& exception)
   --- End of inner exception stack trace ---
   at System.Net.ServicePoint.GetConnection(PooledStream PooledStream, Object ow
ner, Boolean async, IPAddress& address, Socket& abortSocket, Socket& abortSocket
6, Int32 timeout)
   at System.Net.PooledStream.Activate(Object owningObject, Boolean async, Int32
 timeout, GeneralAsyncDelegate asyncCallback)
   at System.Net.PooledStream.Activate(Object owningObject, GeneralAsyncDelegate
 asyncCallback)
   at System.Net.ConnectionPool.GetConnection(Object owningObject, GeneralAsyncD
elegate asyncCallback, Int32 creationTimeout)
   at System.Net.Mail.SmtpConnection.GetConnection(ServicePoint servicePoint)
   at System.Net.Mail.SmtpTransport.GetConnection(ServicePoint servicePoint)
   at System.Net.Mail.SmtpClient.GetConnection()
   at System.Net.Mail.SmtpClient.Send(MailMessage message)

这是我的代码:

List<PaymentReminderList> prList = SourceList;            
MailAddress fromMail = new MailAddress(ConfigurationManager.AppSettings.Get("FromEmail"));
string NetworkUser = ConfigurationManager.AppSettings.Get("Network_UserName");
string Password = ConfigurationManager.AppSettings.Get("Password");
string Host = ConfigurationManager.AppSettings.Get("Host");
int Port = int.Parse(ConfigurationManager.AppSettings.Get("Port"));
string FromMail = ConfigurationManager.AppSettings.Get("FromEmail");
string ToMail = ConfigurationManager.AppSettings.Get("ToMail");
string mailBody = "Respected xxx, <br>This is Test Mail.<br> [[List]]  <br><br> Sincerely, <br> ABC<br>";

string mailContent = "";

foreach (var item in prList)
{
    mailContent += "" + item.abc + " | " + item.pqr + " | " + item.xyz+"<br>";
}

mailBody.Replace("[[List]]", mailContent);

//Console.WriteLine("Mail To");
MailAddress to = new MailAddress(ToMail);

//Console.WriteLine("Mail From");
MailAddress from = new MailAddress(FromMail);

MailMessage mail = new MailMessage(from, to);

Console.WriteLine("Subject");
mail.Subject = "This is a Reminder Mail";

Console.WriteLine("Your Message");
//mail.Body = Console.ReadLine();
mail.Body = mailBody;

mail.From = from;
mail.To.Add(to);

mail.IsBodyHtml = true;
mail.Priority = MailPriority.High;

System.Net.NetworkCredential NetworkCred = new System.Net.NetworkCredential();
NetworkCred.UserName = NetworkUser;
NetworkCred.Password = Password;

SmtpClient smtp = new SmtpClient(Host, Port);
smtp.Credentials = NetworkCred;

Console.WriteLine("Sending email...");

try
{
    smtp.Send(mail);
}
catch (Exception ex)
{
    Console.WriteLine(ex);   //Should print stacktrace + details of inner exception

    if (ex.InnerException != null)
        Console.WriteLine("InnerException is: {0}", ex.InnerException);
}

远程计算机是否实施安全SMTP? 如果是这样,则需要将端口属性设置为465。

http://msdn.microsoft.com/zh-CN/library/system.net.mail.smtpclient.port.aspx

我使用自己的邮件服务器测试了您的代码,并且在该服务器上运行良好。

问题可能出在您的配置中。 您在代码中使用身份验证,并且通常要求连接启用SSL(请参阅SmtpClient.EnableSsl ),并将端口设置为465。端口25通常不需要身份验证。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM