Как я могу получить подтверждение для отправленного письма с помощью API JavaMail?

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

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

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

Ответ 1

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

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

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

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

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

Ответ 2

Хорошо, это старое обсуждение, но:

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

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

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

Disposition-Notification-To

И value - это почта, куда мы хотим отправить подтверждающий ответ:

message.addHeader("Disposition-Notification-To","[email protected]");

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

Ответ 4

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

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

Ответ 5

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

Ответ 6

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

Вы также можете посмотреть websina