Как проверить, что MailMessage был доставлен в .NET? - PullRequest
1 голос
/ 11 февраля 2011

Есть ли способ проверить, успешно ли SmtpClient доставил электронное письмо? SmtpClient.Send () не возвращает ничего, кроме исключения. Итак, если метод завершится, можно ли предположить, что электронное письмо будет успешно отправлено на соответствующий почтовый ящик? Мой код ниже:

MailMessage emailMessage = new MailMessage();
emailMessage.Subject = SubjectText;
emailMessage.IsBodyHtml = IsBodyHtml;
emailMessage.Body = BodyText;
emailMessage.From = new MailAddress(Settings.Default.FromEmail,Settings.Default.FromDisplayName);

//add recipients
foreach (string recipientAddress in RecipientAddresses.Split(new char[{','},StringSplitOptions.RemoveEmptyEntries))

emailMessage.To.Add(recipientAddress);

using (SmtpClient smtpClient = new SmtpClient())
{
smtpClient.Send(emailMessage);
}

Ответы [ 4 ]

4 голосов
/ 11 февраля 2011

Нет, нет надежного способа выяснить, действительно ли сообщение было доставлено.

Для этого потребуется доступ к конечному SMTP-серверу для каждого человека, которому вы посылаете электронное письмо.вы не получите исключение, вы можете предположить, что SMTP-сервер сделал все возможное для доставки электронной почты.

0 голосов
/ 15 апреля 2014

Если адрес электронной почты получателя действителен, вы не получите немедленное возвращаемое значение об успешной доставке сообщения;см. подпись:

public void Send(MailMessage message)

SMTP-сервер почти сразу же уведомит отправителя (или того, кого вы укажете для уведомления) с уведомлением о невозможности доставки, если адрес электронной почты получателя является недействительным / поддельным.

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

RFC 2821 содержит более подробную информацию.

Из раздела 2.1 Базовая структура

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

См. Разделы 4.5.4 и 4.5.5

Из раздела 6.1 Надежная доставка и ответы по электронной почте

Если естьсбой доставки после принятия сообщения, получатель SMTP ДОЛЖЕН сформулировать и отправить уведомление по почте.Это уведомление ДОЛЖНО быть отправлено с использованием нулевого (<> ") обратного пути в конверте.Получателем этого уведомления ДОЛЖЕН быть адрес из пути возврата конверта (или строки Return-Path:).

0 голосов
/ 11 февраля 2011

Одним из решений, которое вы можете использовать, является создание httphandler для изображений вашего сайта.Если вы отправите HTML-сообщение, содержащее хотя бы одно изображение, вы можете вставить данные строки запроса в конец этого изображения.Это может быть что-то вроде прозрачного изображения 1x1.Когда пользователь читает электронную почту, он отправляет запрос на сервер для получения данных изображения, и, в свою очередь, вы можете захватить этот запрос и указать, что сообщение было прочитано.большинство почтовых клиентов блокируют изображения по умолчанию, если пользователь не укажет, что они хотели бы просматривать изображения в электронном письме.

0 голосов
/ 11 февраля 2011

Невозможно быть 100% уверенным, что почтовое сообщение было получено при отправке через SmtpClient из-за способа работы электронной почты.Тот факт, что SmtpClient не генерирует исключение, по существу означает, что вы все сделали правильно, но в дальнейшем может произойти сбой, например:

  • Принимающий почтовый сервер может отклонитьпочта
  • Промежуточный почтовый сервер может отклонить почту
  • Сервер, через который SmtpClient передает почту, может принять решение об отказе в передаче почты
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...