Как я могу получить подтверждение для доставленной электронной почты с JavaMail API? - PullRequest
11 голосов
/ 09 сентября 2010

Я пишу программу, которая отправляет сообщения электронной почты и хочет узнать, когда получатель получит сообщение электронной почты, которое я ему отправил.Как я могу сделать это с помощью JavaMail API?

Если я использую SMTPMessage, как именно можно обработать результат после того, как я установил параметры уведомления?

SMTPMessage smtpMsg = new SMTPMessage(msg);
smtpMsg.setNotifyOptions(SMTPMessage.NOTIFY_SUCCESS);

Ответы [ 6 ]

20 голосов
/ 09 сентября 2010

Не существует стандартного способа сделать это, который был бы принят и соблюден во всех областях. Я вижу, что у вас есть несколько вариантов:

  • Добавьте заголовок «Return-Receipt-To» с вашим адресом электронной почты в значении. Если получатель электронной почты имеет клиента, который соблюдает этот заголовок, то при открытии электронной почты вам будет отправлено уведомление о возврате. Заметьте, это ненадежно, поскольку пользователь всегда может решить не отправлять квитанцию, даже если у него есть клиент, который его поддерживает.

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

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

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

3 голосов
/ 20 января 2016

Хорошо, это старая дискуссия, но:

Я нашел простое и работающее решение здесь (ссылка на испанском).

Вам просто нужно добавить еще одно поле в заголовок сообщения. Для этого необходимо использовать метод addHeader класса Part, реализованный классом Message. Этот метод получает 2 параметра, type и value заголовка.

Чтобы получить подтверждение, необходимо добавить этот заголовок:

Disposition-Notification-To

А value - это почта, на которую мы хотим отправить ответ с подтверждением:

message.addHeader("Disposition-Notification-To","mail@example.com");

ВНИМАНИЕ: имейте в виду, что в настоящее время многие почтовые серверы, такие как gmail, игнорируют эти запросы, так что это не будет иметь эффекта, но, если вы уверены (как и я), сервер-получатель позволяет , будет работать как шарм.

1 голос
/ 19 января 2017

Просто добавьте в ваше сообщение фиктивное изображение, для которого установлено значение none. И установите для атрибута src этого изображения URL-адрес, который вы хотите вызвать

1 голос
/ 04 февраля 2014

Существует другой подход к выяснению, было ли получено электронное письмо или нет, это получение недоставленных электронных писем.Я видел довольно хорошую реализацию Java здесь .

Они использовали javax.mail (для обработки почты) и guava (для обработки строк и коллекций).

1 голос
/ 09 сентября 2010

пожалуйста, смотрите мой ответ здесь (когда этот вопрос задавали о рубине на рельсах).Это в основном тот же ответ.

Уведомление об открытии электронной почты - ruby ​​on rails

0 голосов
/ 09 сентября 2010

Вы можете использовать SMTP-сообщение и запросить статус доставки (я не знаю, приходит ли он, когда провайдер получает почту, или это когда пользователь открывает почту). JavaMail напрямую не поддерживает эту функцию, и вам нужно прочитать RFC 3464. Я также нашел эту ветку с примерами, но не пробовал javamail

Вы также можете посмотреть на Вебсина

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