2013-05-10 2 views
1

Я пытаюсь отправить почту из консольного приложения, но он бросает ошибку:Ошибка при отправке электронной почты из приложения консоли

Failure Sending Mail

Я не могу понять, что вызывает ошибку. Я попробовал тот же код на другом компьютере, и он работает нормально. Вот StackTrace:

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); 
} 
+0

Как выглядит ваш код? –

+0

@ SonerGönül Я добавил свой код –

+0

Ошибка ясно, что соединение с адресом установить невозможно. Вы уверены, что информация верна? –

ответ

0

осуществлять ли удаленный компьютер Secure SMTP? Если да, то вам необходимо установить свойство порта 465.

http://msdn.microsoft.com/en-us/library/system.net.mail.smtpclient.port.aspx

+0

попробовал ошибку, показывается, но все еще не отправляет почту –

+0

тот же код работает на другой машине –

+0

Хм ... Я заберу мозг еще немного. Помимо этого, это может быть проблема с брандмауэром. –

0

Я тестировал код с моим собственным почтовым сервером, и он работал нормально там.

Проблема может быть в вашей конфигурации. Вы используете аутентификацию в своем коде, и для этого обычно требуется активировать SSL для соединения (см. SmtpClient.EnableSsl) и установить порт на 465. Порт 25 обычно не требует аутентификации.

+0

Я использую порт 25, и он отлично работает на другом компьютере и веб-приложении. –

+0

Возможно, вы можете попробовать подключиться вручную с telnet к SMTP-серверу с компьютера, на котором у вас есть проблемы, просто чтобы узнать, что происходит в фазе соединения лучше. Основываясь на сообщении об исключении, это похоже на проблему с сетью. – zsgalusz

Смежные вопросы