отправить письмо и проверить статус - PullRequest
16 голосов
/ 29 сентября 2008

Используя почту Java, я хотел бы отправить электронное письмо и проверить статус. Возможные статусы включают в себя:

  • Жесткий отскок: почтовый сервер не найден
  • Soft-bounce: почтовый сервер найден, но учетная запись не найдена
  • Успех

Можно ли даже отправить электронное письмо и получить отзыв о попытке доставки способом, описанным выше?

РЕДАКТИРОВАТЬ: Респондент предложил искать библиотеку Java, которая обеспечивает те же функции, что и ListNanny . Я искал вокруг, но ничего не нашел. Есть идеи, если такая библиотека существует?

Ура, Дон

Ответы [ 9 ]

5 голосов
/ 29 сентября 2008

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

4 голосов
/ 30 сентября 2008

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

3 голосов
/ 29 сентября 2008

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

Конверт «от» отличается от адреса «от». Это часть SMTP-диалога, который происходит между вашим кодом и вашим MTA. Все отчеты о недоставке будут отправлены на этот адрес.

1 голос
/ 25 мая 2010

Что вы должны сделать, это на самом деле проверить запись MX электронной почты получателя (DNS-запрос MX для доменной части адреса электронной почты) и отправить сообщение через разрешенный SMTP-сервер.

таким образом, если MX-запись не найдена, вы получаете «Hard Bounce», если он найден, но метод send выдает исключение, вы получаете «Soft Bounce», а если он проходит - вы получаете «Успех».

вы можете использовать проект dnsjava для разрешения записи MX. http://www.dnsjava.org/

1 голос
/ 23 января 2009

Вы можете использовать бесплатную услугу http://www.mailcounter.info, чтобы проверить, прочитано ли ваше письмо, а также сколько раз оно было прочитано пользователем. Это бесплатный сервис.

1 голос
/ 29 сентября 2008

Не полагайтесь на то, что вы получаете (если вернетесь) информацию с сервера.

Многие почтовые серверы теперь настроены на , а не указывают, существует ли получатель или нет, из-за дыры в безопасности, которую он создает. (например, если данный домен сообщает («да» / «нет») о существовании адреса электронной почты, хакер просто запускает атаку по словарю на сервер, чтобы определить всех действительных пользователей, и таким образом они получают мгновенный спам список.

1 голос
/ 29 сентября 2008

Я специально не знаком с Javamail, но я бы сказал так: даже «успех» не может быть успехом.

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

Обеспечение доставки практически невозможно без какого-либо "щелчка здесь", встроенного в сообщение.

1 голос
/ 29 сентября 2008

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

Самое сложное - это то, что вы называете «успехом»:

Краткий ответ: Нет.

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

0 голосов
/ 12 ноября 2013

Эта ссылка может вам помочь. Это в экспериментальном jar-файле, который использует RFC 3642 и RFC 3464. В нем есть несколько базовых классов, которые позволяют вам получить статус доставки почты. А также вам понадобится Javamail файл jar.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...