System.setProperty("mail.smtp.ssl.enable","true");
Все остальные настройки как в обычном smtp (только порт обычно 465 вместо 25). Работает с gmail -- проверено
Подробное описание:
Вариант с
System.setProperty("mail.transport.protocol", "smtps")
не работает. Точнее, не совсем работает -- не так, как ожидается. Раскопки в исходниках JavaMail (благо, они доступны) показывают, что свойство
mail.transport.protocol
используется только методом Session.getTransport()
(который без аргументов). Но самой библиотекой этот метод не используется -- предполагается, что его вызывает клиентский код явно. Если вы отправляете почту через явно создаваемый транспорт, и получаете его через session.getTransport()
-- свойство mail.transport.protocol
будем иметь эффект. Если же вы, как я, отправляете почту через статический метод Transport.send()
, то внутри него библиотека ищет подходящий транспорт через вызовом getTransport(Address), что отсылает нас к свойству mail.transport.protocol.rfc822
(rfc822 -- такой "тип адреса" у адреса электронной почты). Если хочется переопределить транспорт для такого типа адресов на smpts -- надо писать System.setProperty("mail.transport.protocol.rfc822", "smtps");, либо использовать
session.setProtocolForAddress("rfc822", "smpts")
. Если просто написать mail.transport.protocol = smtps, то Transport.send() это указание проигнорирует. В числе прочего это означает, что если вы вместе с mail.transport.protocol = smtps укажете, как описано в документации, свойства типа mail.smpts.host -- они будут проигнорированы (использоваться будут свойства типа mail.smtp.host) и JavaMail будет ломиться на localhost (который используется в качестве адреса smtp сервера по-умолчанию).
Комментариев нет:
Отправить комментарий