Почта не отправляется - C#
Формулировка задачи:
В программе есть канонический код:
Который прекрасно работает с разными почтовыми серверами (gmail, mail и т.п.). Но с почтовым сервером одного хостера он работать не хочет, висит пытаясь try, и потом отваливается в catch по таймауту.
При этом через Windows Live Mail с теми же данными (hostname, portnumber, SenderEmail, SenderPassword) все отправляется без проблем.
И поэтому вопрос возник - чего в этом каноническом коде может не хватать?
SmtpClient Smtp = new SmtpClient();
Smtp.Host = hostname;
Smtp.Port = portnumber;
Smtp.EnableSsl = true;
Smtp.DeliveryMethod = SmtpDeliveryMethod.Network;
Smtp.Credentials = new NetworkCredential(SenderEmail, SenderPassword);
MailMessage Message = new MailMessage();
Message.From = new MailAddress(SenderEmail);
Message.To.Add(new MailAddress(RecpientEmail));
Message.Subject = "Subject";
Message.Body = "Body text";
try
{
Smtp.Send(Message);
}
catch (SmtpException)
{
}Решение задачи: «Почта не отправляется»
textual
Листинг программы
catch (SmtpFailedRecipientsException ex)
{
for (int i = 0; i < ex.InnerExceptions.Length; i++)
{
SmtpStatusCode status = ex.InnerExceptions[i].StatusCode;
if (status == SmtpStatusCode.MailboxBusy ||
status == SmtpStatusCode.MailboxUnavailable)
{
Console.WriteLine("Delivery failed - retrying in 5 seconds.");
System.Threading.Thread.Sleep(5000);
Smtp.Send(Message);
}
else
{
Console.WriteLine("Failed to deliver message to {0}",
ex.InnerExceptions[i].FailedRecipient);
}
}
}
catch (Exception ex)
{
Console.WriteLine("Exception caught in RetryIfBusy(): {0}",
ex.ToString());
}