JavaMail API - SMTP-серверы
SMTP - это аббревиатура от Simple Mail Transfer Protocol. Это Интернет-стандарт для передачи электронной почты (e-mail) через сети Интернет-протокола (IP). SMTP использует порт TCP 25. Подключения SMTP, защищенные SSL, известны под сокращением SMTPS, хотя SMTPS не является протоколом сам по себе.
JavaMail API имеет пакет com.sun.mail.smtpкоторые действуют как поставщик протокола SMTP для доступа к серверу SMTP. В следующей таблице перечислены классы, включенные в этот пакет:
Класс | Описание |
---|---|
SMTPMessage | Этот класс является специализацией класса MimeMessage, который позволяет вам указывать различные параметры и параметры SMTP, которые будут использоваться при отправке этого сообщения по SMTP. |
SMTPSSLТранспорт | Этот класс реализует абстрактный класс транспорта, использующий SMTP через SSL для отправки и транспортировки сообщений. |
SMTPTransport | Этот класс реализует абстрактный класс транспорта, использующий SMTP для отправки и транспортировки сообщений. |
В следующей таблице перечислены возникшие исключения:
Исключение | Описание |
---|---|
SMTPAddressFailedException | Это исключение возникает, когда сообщение не может быть отправлено. |
SMTPAddressSucceededException | Это исключение связано с SendFailedException, если свойство mail.smtp.reportsuccess имеет значение true. |
SMTPSenderFailedException | Это исключение возникает, когда сообщение не может быть отправлено. |
SMTPSendFailedException | Это исключение генерируется, когда сообщение не может быть отправлено. Исключение включает адрес отправителя, который почтовый сервер отклонил. |
В com.sun.mail.smtpпровайдер дополнительно использует аутентификацию SMTP. Чтобы использовать SMTP-аутентификацию, вам необходимо установить свойство mail.smtp.auth или предоставить SMTP-транспорту имя пользователя и пароль при подключении к SMTP-серверу. Вы можете сделать это одним из следующих способов:
Предоставьте объект Authenticator при создании почтового сеанса и укажите имя пользователя и пароль во время обратного вызова Authenticator. Свойство mail.smtp.user может быть настроено для предоставления имени пользователя по умолчанию для обратного вызова, но пароль все равно необходимо будет указать явно. Этот подход позволяет использовать статический метод отправки транспорта для отправки сообщений. Например:
Transport.send(message);
Вызовите метод транспортного соединения явно с аргументами имени пользователя и пароля. Например:
Transport tr = session.getTransport("smtp");
tr.connect(smtphost, username, password);
msg.saveChanges();
tr.sendMessage(msg, msg.getAllRecipients());
tr.close();
Провайдер протокола SMTP поддерживает следующие свойства, которые могут быть установлены в объекте сеанса JavaMail. Свойства всегда задаются как строки. Например:
props.put("mail.smtp.port", "587");
Здесь Type столбец описывает, как интерпретируется строка.
имя | Тип | Описание |
---|---|---|
mail.smtp.user | Строка | Имя пользователя по умолчанию для SMTP. |
mail.smtp.host | Строка | SMTP-сервер для подключения. |
mail.smtp.port | int | Порт SMTP-сервера для подключения, если метод connect () не указывает его явно. По умолчанию 25. |
mail.smtp.connectiontimeout | int | Значение тайм-аута подключения к сокету в миллисекундах. По умолчанию - бесконечный тайм-аут. |
mail.smtp.timeout | int | Значение тайм-аута ввода-вывода сокета в миллисекундах. По умолчанию - бесконечный тайм-аут. |
mail.smtp.from | Строка | Адрес электронной почты, который будет использоваться для команды SMTP MAIL. Это устанавливает обратный адрес конверта. По умолчанию - msg.getFrom () или InternetAddress.getLocalAddress (). |
mail.smtp.localhost | Строка | Имя локального хоста, используемое в командах SMTP HELO или EHLO. По умолчанию InetAddress.getLocalHost (). GetHostName (). Обычно не требуется устанавливать, если ваш JDK и ваша служба имен настроены правильно. |
mail.smtp.localaddress | Строка | Локальный адрес (имя хоста) для привязки при создании сокета SMTP. По умолчанию используется адрес, выбранный классом Socket. Обычно не требует настройки. |
mail.smtp.localport | int | Номер локального порта для привязки при создании сокета SMTP. По умолчанию используется номер порта, выбранный классом Socket. |
mail.smtp.ehlo | логический | Если false, не пытайтесь войти в систему с помощью команды EHLO. По умолчанию true. |
mail.smtp.auth | логический | Если true, попробуйте аутентифицировать пользователя с помощью команды AUTH. По умолчанию - false. |
mail.smtp.auth.mechanisms | Строка | Если установлено, перечисляет механизмы аутентификации, которые следует учитывать. Будут использоваться только механизмы, поддерживаемые сервером и поддерживаемые текущей реализацией. По умолчанию используется «LOGIN PLAIN DIGEST-MD5 NTLM», который включает все механизмы аутентификации, поддерживаемые текущей реализацией. |
mail.smtp.auth.login.disable | логический | Если true, запрещает использование команды AUTH LOGIN. По умолчанию - false. |
mail.smtp.auth.plain.disable | логический | Если true, запрещает использование команды AUTH PLAIN. По умолчанию - false. |
mail.smtp.auth.digest-md5.disable | логический | Если true, запрещает использование команды AUTH DIGEST-MD5. По умолчанию - false. |
mail.smtp.auth.ntlm.disable | логический | Если true, запрещает использование команды AUTH NTLM. По умолчанию - false. |
mail.smtp.auth.ntlm.domain | Строка | Домен аутентификации NTLM. |
mail.smtp.auth.ntlm.flags | int | Флаги протокола NTLM. |
mail.smtp.submitter | Строка | Отправитель для использования в теге AUTH в команде MAIL FROM. Обычно используется почтовым ретранслятором для передачи информации об исходном отправителе сообщения. |
mail.smtp.dsn.notify | Строка | Параметр NOTIFY для команды RCPT. Либо НИКОГДА, либо комбинация УСПЕХ, НЕИСПРАВНОСТЬ и ЗАДЕРЖКА (разделенные запятыми). |
mail.smtp.dsn.ret | Строка | Параметр RET для команды MAIL. Либо ПОЛНЫЙ, либо HDRS. |
mail.smtp.sendpartial | логический | Если установлено значение true и в сообщении есть допустимые и некоторые недопустимые адреса, все равно отправьте сообщение, сообщив о частичном сбое с помощью SendFailedException. Если установлено значение false (по умолчанию), сообщение не отправляется ни одному из получателей, если имеется недопустимый адрес получателя. |
mail.smtp.sasl.enable | логический | Если установлено значение true, попробуйте использовать пакет javax.security.sasl, чтобы выбрать механизм аутентификации для входа в систему. По умолчанию - false. |
mail.smtp.sasl.mechanisms | Строка | Список имен механизмов SASL, разделенных пробелами или запятыми, которые можно попробовать использовать. |
mail.smtp.sasl.authorizationid | Строка | ID авторизации для использования при аутентификации SASL. Если не установлен, используется идентификатор аутентификации (имя пользователя). |
mail.smtp.sasl.realm | Строка | Область для использования с аутентификацией DIGEST-MD5. |
mail.smtp.quitwait | логический | Если установлено значение false, отправляется команда QUIT и соединение немедленно закрывается. Если установлено значение true (по умолчанию), транспорт будет ждать ответа на команду QUIT. |
mail.smtp.reportsuccess | логический | Если установлено значение true, транспорт будет включать исключение SMTPAddressSucceededException для каждого успешного адреса. |
mail.smtp.socketFactory | Завод розеток | Если установлен класс, реализующий интерфейс javax.net.SocketFactory, этот класс будет использоваться для создания сокетов SMTP. |
mail.smtp.socketFactory.class | Строка | Если установлено, указывает имя класса, реализующего интерфейс javax.net.SocketFactory. Этот класс будет использоваться для создания сокетов SMTP. |
mail.smtp.socketFactory.fallback | логический | Если установлено значение true, неудача при создании сокета с использованием указанного класса фабрики сокетов приведет к тому, что сокет будет создан с использованием класса java.net.Socket. По умолчанию true. |
mail.smtp.socketFactory.port | int | Задает порт для подключения при использовании указанной фабрики сокетов. Если не установлен, будет использоваться порт по умолчанию. |
mail.smtp.ssl.enable | логический | Если установлено значение true, использовать SSL для подключения и использовать порт SSL по умолчанию. По умолчанию false для протокола smtp и true для протокола smtps. |
mail.smtp.ssl.checkserveridentity | логический | Если установлено значение true, проверяет идентичность сервера в соответствии с RFC 2595. По умолчанию - false. |
mail.smtp.ssl.trust | Строка | Если установлено, и фабрика сокетов не указана, разрешает использование MailSSLSocketFactory. Если установлено "*", все хосты являются доверенными. Если задан список хостов, разделенных пробелами, эти хосты являются доверенными. В противном случае доверие зависит от сертификата, представленного сервером. |
mail.smtp.ssl.socketFactory | Фабрика сокетов SSL | Если установлено значение класса, расширяющего класс javax.net.ssl.SSLSocketFactory, этот класс будет использоваться для создания сокетов SMTP SSL. |
mail.smtp.ssl.socketFactory.class | Строка | Если установлено, указывает имя класса, расширяющего класс javax.net.ssl.SSLSocketFactory. Этот класс будет использоваться для создания сокетов SMTP SSL. |
mail.smtp.ssl.socketFactory.port | int | Задает порт для подключения при использовании указанной фабрики сокетов. Если не установлен, будет использоваться порт по умолчанию. |
mail.smtp.ssl.protocols | строка | Задает протоколы SSL, которые будут включены для SSL-соединений. Значение свойства - это список токенов, разделенных пробелами, приемлемых для метода javax.net.ssl.SSLSocket.setEnabledProtocols. |
mail.smtp.starttls.enable | логический | Если true, разрешает использование команды STARTTLS (если она поддерживается сервером) для переключения соединения на соединение, защищенное TLS, перед выдачей каких-либо команд входа в систему. По умолчанию - false. |
mail.smtp.starttls.required | логический | Если истина, требует использования команды STARTTLS. Если сервер не поддерживает команду STARTTLS или команда не работает, метод подключения завершится ошибкой. По умолчанию - false. |
mail.smtp.socks.host | строка | Задает имя хоста прокси-сервера SOCKS5, который будет использоваться для подключений к почтовому серверу. |
mail.smtp.socks.port | строка | Задает номер порта для прокси-сервера SOCKS5. Это следует использовать только в том случае, если прокси-сервер не использует стандартный номер порта 1080. |
mail.smtp.mailextension | Строка | Строка расширения, добавляемая к команде MAIL. |
mail.smtp.userset | логический | Если установлено значение true, используйте команду RSET вместо команды NOOP в методе isConnected. В некоторых случаях sendmail будет медленно отвечать после многих команд NOOP; использование RSET позволяет избежать этой проблемы с sendmail. По умолчанию - false. |
Как правило, приложениям не нужно напрямую использовать классы из этого пакета. Вместо этого они должны использовать API, определенные пакетом javax.mail (и подпакетами). Скажем, например, приложения никогда не должны создавать экземпляры SMTPTransport напрямую. Вместо этого они должны использовать метод сеанса getTransport для получения соответствующего транспортного объекта.
Примеры использования SMPT-сервера показаны в главе « Отправка писем» .