Подтвердить что ты не робот

Как подтвердить, что почта была доставлена ​​или нет?

Ниже мое кодирование, просто взгляните на него

System.Net.Mail.MailMessage oMail = new System.Net.Mail.MailMessage();
System.Net.Mail.SmtpClient smtp = new System.Net.Mail.SmtpClient();
oMail.From = new System.Net.Mail.MailAddress("[email protected]");
oMail.To.Add(TextBox1.Text.Trim());
oMail.Subject = "Subject*";
oMail.Body = "Body*";
oMail.IsBodyHtml = true;
smtp.Host = "smtp.sendgrid.net";
System.Net.NetworkCredential cred = new System.Net.NetworkCredential("myusername", "mypassword");
smtp.UseDefaultCredentials = false;
smtp.Credentials = cred;
smtp.Send(oMail);

Здесь мне нужно проверить, доставлено ли это письмо или нет.

4b9b3361

Ответ 1

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

  • Нет гарантий, что ваше сообщение отправляется, как только вы вызываете smtp.Send().
  • Поскольку SMTP маршрутизирован, вы не можете быть уверены, что некоторые node на маршруте не сбой с доставкой по восходящей линии.

Ответ 2

Вы можете установить свойство DeliveryNotificationOptions в MailMessage на OnSuccess.

Там больше информации об этом здесь: http://msdn.microsoft.com/en-us/library/system.net.mail.deliverynotificationoptions.aspx

и здесь: http://msdn.microsoft.com/en-us/library/system.net.mail.mailmessage.deliverynotificationoptions.aspx

Как уже отмечалось в комментариях, этот метод не на 100% надежный. Это всего лишь один вариант.

Ответ 3

Ниже приведены некоторые рекомендации по обеспечению доставки электронной почты:

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

http://www.kellermansoftware.com/p-37-net-email-validation.aspx

Ответ 4

Если кто-то споткнутся. Вот мой опыт работы на старом сервере Win 2003 с Exchange. Мое приложение .Net использует SMTP для отправки писем и использует групповой адрес как "От", поэтому любые ответы будут переданы всей группе. Это операция диспетчеризации, и мы хотели, чтобы кто-либо из группы помогал с любыми ответами. Мы ожидали, что любые уведомления об отсутствии доставки будут отправлены в группу. Этого не происходит. Я даже вошел в Message Tracking и увидел, что Exchange сказал, что он отправил уведомление группе, но они так и не получили. Затем я перешел в свойства виртуального сервера SMTP и ввел адрес электронной почты группы в "Отправить копию отчета о недоставке:". Тот же результат, Message Tracking говорит, что он отправил его группе, но он так и не был доставлен. По-видимому, уведомления об отсутствии доставки будут доставлены только на адрес электронной почты человека, а не группы. Я изменил его на отдельный адрес, и он работает.

Ответ 5

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

Ответ 6

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

Например, если вы используете SmarterMail, вы можете написать простой синтаксический анализатор, чтобы прочитать журнал smtp и сообщить о своем приложении. Не то, чтобы это не было блокирующей операцией, как если бы ваша электронная почта была greylisted, это может занять много минут до ее доставки.

Другой вариант - создать уловить все "норовые" адреса электронной почты и отправить свои электронные письма с идентификатором электронной почты, включенным в отправитель, т.е. [email protected] и использовать считыватель pop3 для проверки inbox для возвращенных писем. Используя идентификатор электронной почты в "отправителе", вы можете решить, какой адрес электронной почты не был отправлен. Вы также можете сделать некоторую фильтрацию, чтобы определить, может ли ее ответ "неспособен доставить" или просто "вне офиса".

Множество доступных вариантов, просто зависит от того, сколько пота вы хотите вставить в него.