2013-09-25 2 views
0

у меня есть полностью функциональное решение VB.NET, работающее с простым стандартным кодом я нашел в большом количестве сайтов вокруг сети, что-то вроде этого:.NET SMTP.send не работает, но без ошибок

Dim oMessage As New MailMessage 
    oMessage.From = New MailAddress("[email protected]") 
    oMessage.To.Add("[email protected]") 
    oMessage.Subject = "test mail" 
    oMessage.Body = "test mail body" 
    oMessage.IsBodyHtml = False 
    Dim oSMTP As New SmtpClient("192.168.1.253") 
    oSMTP.Port = 25 
    oSMTP.EnableSsl = False 
    oSMTP.Credentials = New System.Net.NetworkCredential("[email protected]", "password") 
    oSMTP.Send(oMessage) 

Рабочее решение зависит от сервера gmail smtp с обычной конфигурацией. Я попытался воспроизвести одно и то же решение в другой среде, где SMTP-сервер находится в локальной сети (192.168.1.253) и использует порт 25, не требуется SSL. Факты: 1) сервер, на котором я пытаюсь развернуть мое решение, запускает стороннее программное обеспечение, отправляющее электронное письмо с выделенного адреса (мне нужно использовать тот же адрес электронной почты). Эта функциональность активна и работает; 2) Я попытался подключиться к SMPT-серверу через telnet, и мне удалось отправить электронное письмо на мой личный адрес электронной почты через протокол SMPT. Это ожидалось, потому что другое программное обеспечение не сталкивается с проблемой при выполнении той же работы; 3) Я протестировал свое решение с блоком try-catch, чтобы получить какую-либо ошибку, но не доходит до адресата, даже если мой код заканчивается без ошибок.

Я пробовал множество различных параметров для smtp и сообщений (а также с альтернативными адресами адресатов), но результат всегда был один и тот же: сообщение не отправлено. Последний шанс, который у меня есть, - искать любой конфликт с конфигурацией сервера или антивирусным программным обеспечением. Но я не могу понять, почему «простой» диалог с сервером через протокол SMPT является успешным, а мой простой код - нет.

Последнее примечание: почтовый сервер, о котором я упоминал, должен быть Microsoft Exchange Server.

Где может быть проблема? Любая помощь будет оценена.

+0

Возможно, решение было единственной комбинацией, которую я забыл в своих ста тестах ... Как только я добавил строку oSMTP.dispose, решение стало работать. Это предложение встречается в нескольких других потоках, возможно, я пропустил его или, возможно, попробовал его с неправильной конфигурацией, поэтому сообщалось об ошибке до того, как был достигнут конец кода. –

+0

Просто для того, чтобы подчеркнуть фактическое решение: ВСЕГДА ИСПОЛЬЗУЙТЕ УТИЛИЗАЦИЮ МЕТОДА ПОСЛЕ ИСПОЛЬЗОВАНИЯ объекта SMTPClient, чтобы убедиться, что соединение с сервером закрыто правильно. –

ответ

0

Я рекомендую вам использовать wirehark для мониторинга связи между вашим приложением и вашим почтовым сервером; Я знаю, что у меня когда-то была аналогичная проблема, и я смог увидеть сообщение об ошибке, на которое сервер ответил после получения сообщения (по какой-то причине сообщение об ошибке не доходило до приложения)

Также сделайте это:

   oMessage.DeliveryNotificationOptions = DeliveryNotificationOptions.OnFailure; 

Так что если сервер не сможет отправить ваше сообщение, вы получите уведомление.

Кроме того, если вы используете метод SendAsync для отправки своей почты, и вы привязываетесь к событию SendCompleted (вашего объекта smtp), вы должны иметь возможность видеть любые ошибки в объекте AsyncCompletedEventArgs, которое событие предоставит вам.

+0

Спасибо. Это был один из моих вариантов, но я не знал, какое приложение использовать для мониторинга связи с сервером. Вероятно, это помогло бы мне найти решение. –

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