Определите, может ли электронное письмо быть успешно отправлено - PullRequest
3 голосов
/ 29 июня 2009

Я работаю в почтовом приложении на C #, и, в принципе, мне нужно иметь возможность определить, какие получатели успешно получили сообщение, а какие нет, независимо от причины сбоя.

В целом, мне нужно, чтобы исключение было выдано, например, если адрес электронной почты не существует. Однако SmtpClient.Send не выдает исключение в этом случае, поэтому мне нужно будет отслеживать ответы об ошибках доставки и анализировать их, возможно.

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

Заранее спасибо !!

Ответы [ 3 ]

5 голосов
/ 29 июня 2009

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

Представьте себе, могут ли спаммеры достоверно определить, какие из их электронных писем были получены?

Вы можете попробовать пропинговать сервер ... то есть gmail.com, но я не знаю, насколько это будет надежно.

4 голосов
/ 29 июня 2009

Нет способа, которым вы могли бы обнаружить это надежно. Это природа протокола SMTP. Сервер SMTP получателя должен полностью решить, доставлено письмо или нет.

0 голосов
/ 29 июня 2009

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

В зависимости от того, что вы хотите сделать, вы можете выполнить свое требование, выполняя это асинхронно. Например, я работал с клиентом, у которого было приложение со списком рассылки, и ему не нужно было обрабатывать его немедленно, если электронная почта отскочила. Им даже не нужно было знать это достоверно (то есть, если электронное письмо не получено, но оно не подпрыгивает, им было все равно). Им просто нужно было знать, что электронная почта недействительна, и отписаться от нее.

Это приложение используется LISTSERV. Отправленные электронные письма имеют собственный, уникальный заголовок Return-Path. После получения N отскоков от конкретного получателя электронная почта автоматически отписывается, а также удаляются все записи базы данных, связанные с получателем.

Я не уверен, есть ли простой способ реализовать это без LISTSERV, но вы можете посмотреть smtp2web .

...