2008-09-29 7 views
16

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

  • Hard дребезга: Нет почтовый сервер не найден
  • Soft-отскока: Почтовый сервер найден, но аккаунт не найден
  • Успех

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

EDIT: Респондент предложил найти библиотеку Java, которая обеспечивает ту же функциональность, что и ListNanny. Я искал вокруг, но ничего не нашел. Любая идея, существует ли такая библиотека?

Cheers, Дон

ответ

5

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

1

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

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

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

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

1

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

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

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

3

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

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

+0

ListNanny звучит как раз то, что мне нужно. Тем не менее, я еще не нашел эквивалентную библиотеку Java. – 2008-09-29 20:11:45

+0

Это не слишком сложно сделать это самостоятельно, по крайней мере, на базовом уровне. Если вы можете найти NDR для просмотра, вы найдете несколько полустандартных фрагментов данных, которые легко разобрать. Просто знать, что у вас есть NDR, достаточно часто. – 2008-09-29 21:32:16

+0

Я быстро просмотрел его, и, похоже, какой-то формат NDR не стандартизирован, или если это так, существует множество несовместимых реализаций. – 2008-09-29 23:09:28

1

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

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

4

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

1

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

1

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

Таким образом, если запись MX не найдена, вы получаете «Жесткий отскок», если он найден, но метод отправки генерирует исключение, вы получаете «Мягкий отскок», и если он пройдет - вы получить «Успех».

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

0

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