Я пытаюсь отправить почтовое сообщение, используя System.Net.Mail.SmtpClient
с включенным SSL. Без изменения внешних факторов (т.е. нажмите F5, затем снова нажмите F5 - или даже в цикле) это работает несколько раз, но в большинстве случаев не работает.
Пример кода:
public void SendMail()
{
using (var client = new SmtpClient())
{
MailMessage mailMessage = new MailMessage();
client.EnableSsl = true;
client.Host = "smtp.example.com";
client.Timeout = 10000;
client.DeliveryMethod = SmtpDeliveryMethod.Network;
mailMessage.From = new MailAddress("[email protected]");
mailMessage.To.Add(new MailAddress("[email protected]"));
mailMessage.Subject = "Test";
mailMessage.Body = "Message " + DateTime.Now.ToString();
try
{
client.Send(mailMessage);
}
catch (Exception ex)
{
// This being a Pokemon block is besides the point
}
}
}
В моем блоке catch я просто получаю тайм-аут, но если я настрою трассировку для System.Net
и System.Net.Sockets
, я увижу ряд различных исключений:
- Не удалось прочитать данные из транспортного соединения: операция блокировки была прервана вызовом WSACancelBlockingCall.
- Невозможно прочитать данные из транспортного соединения: установленное соединение было прервано программным обеспечением на вашем хост-компьютере.
- Не удается получить доступ к удаленному объекту
- Чтение не поддерживается в этом потоке
- Запись не поддерживается в этом потоке
Все это происходит после EHLO, STARTTLS и аутентификации. Клиент и сервер общаются друг с другом своими криптографическими способами, когда выбрасываются исключения.
System.Net.Mail.SmtpClient.Send()
— это единственный кадр, общий для всех стеков вызовов.
Конечно, я пытался изменить код разными способами, например, установить client.UseDefaultCredentials
, использовать client.SendAsync()
и так далее. Но я подозреваю, что это что-то совершенно другое, прерывающее соединение в разное время - возможно, ошибка конфигурации на одной из задействованных машин?
Итак, я проверил журналы событий на наличие признаков того, что что-то мешает соединению, но ничего не нашел.
Любые предложения относительно того, что я должен искать здесь?
SendMail()
? Вы установили точки останова, чтобы увидеть, где именно возникает исключение и где оно перехватывается? Кроме того, может ли кто-нибудь объяснить отрицательный голос? - person user1666620   schedule 10.02.2016