Проверьте, была ли почта успешно отправлена ​​в VB.NET с SMTPClient - PullRequest
0 голосов
/ 13 июля 2011

Я пытаюсь создать приложение, которое отправляет электронную почту на smtp-сервер.

Сервер не установлен фиксированным, но будет проверен в соответствии с частью домена адреса электронной почты, на который должно быть отправлено письмо.

Пример:

Электронная почта: test@stackoverflow.com

Доменная часть: stackoverflow.com

Результат поиска записи MX (командная строка "nslookup -type = mx stackoverflow.com":

stackoverflow.com Предпочтение MX = 30, почтовый обменник = stackoverflow.com.s9b1.psmtp.com stackoverflow.com Предпочтение MX = 40, почтовый обменник = stackoverflow.com.s9b2.psmtp.com stackoverflow.com Предпочтение MX = 10, почтовый обменник = stackoverflow.com.s9a1.psmtp.com stackoverflow.com Предпочтение MX = 20, почтовый обменник = stackoverflow.com.s9a2.psmtp.com

Было бы весьма полезно узнать, было ли сообщение принято почтовым сервером и сообщение было успешно отправлено.

На данный момент я могу получить код ошибки SMTP-сервера (если произошла ошибка (StatusCode 5xx)) с помощью объекта System.Net.Mail.SMTPClient и его функции SendAsync. произошла ошибка, я получаю объект-исключение в событии обратного вызова SMTPClient

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

Конечной целью будет: Попробуйте отправить электронное письмо получателю, используя почтовый сервер его доменов, и в случае сбоя выполните действия в соответствии с кодом ошибки (пользователь не существует -> abort / mailserver не ответил -> используйте другой почтовый сервер, если имеется).

Заранее спасибо (и извините за опечатки:))

1 Ответ

2 голосов
/ 13 июля 2011

К сожалению, то, что вы ищете, не существует. Электронная почта прыгает через так много прыжков, что не существует определения того, что на самом деле означает «отправлено». Например, ваш пример stackoverflow фактически указывает на почтовые серверы Postini. Postini, вероятно, передает электронную почту от шлюзов к AV и маршрутизаторам. Оттуда они либо объединяют электронную почту, либо передают ее на другой почтовый сервер.

Для электронной почты самое близкое определение «отправлено»: «по крайней мере, я не получил ошибку».

Кроме того, незначительная вещь, но при использовании nslookup не забудьте добавить конечный период в домен, в противном случае используется список поиска домена. Как правило, не имеет большого значения, но время от времени это может сбить вас с толку.

nslookup -type=mx stackoverflow.com.
...