Учебники

JavaMail API — SMTP-серверы

SMTP — это сокращение от Simple Mail Transfer Protocol . Это Интернет-стандарт для передачи электронной почты (электронной почты) по сетям Интернет-протокола (IP). SMTP использует TCP-порт 25. SMTP-соединения, защищенные с помощью SSL, известны по сокращенному протоколу SMTPS, хотя SMTPS сам по себе не является протоколом.

JavaMail API имеет пакет com.sun.mail.smtp, который действует как поставщик протокола SMTP для доступа к SMTP-серверу. В следующей таблице перечислены классы, включенные в этот пакет:

Учебный класс Описание
SMTPMessage Этот класс является специализацией класса MimeMessage, который позволяет указывать различные параметры и параметры SMTP, которые будут использоваться при отправке этого сообщения через SMTP.
SMTPSSLTransport Этот класс реализует абстрактный класс транспорта, используя 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 может быть установлено для предоставления имени пользователя по умолчанию для обратного вызова, но пароль все равно необходимо будет указать явно. Этот подход позволяет использовать статический метод отправки транспорта для отправки сообщений. Например:

Укажите объект 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");

    Здесь столбец Тип описывает, как строка интерпретируется.

    название Тип Описание
    mail.smtp.user строка Имя пользователя по умолчанию для SMTP.
    mail.smtp.host строка SMTP-сервер для подключения.
    mail.smtp.port ИНТ Порт SMTP-сервера для подключения, если метод connect () явно не указывает его. По умолчанию 25.
    mail.smtp.connectiontimeout ИНТ Значение времени ожидания для сокета в миллисекундах. По умолчанию это бесконечный тайм-аут.
    mail.smtp.timeout ИНТ Тайм-аут сокета ввода-вывода в миллисекундах. По умолчанию это бесконечный тайм-аут.
    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 ИНТ Номер локального порта для привязки при создании сокета 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 логический Если это правда, запрещает использование команды AUTH DIGEST-MD5. По умолчанию установлено значение false.
    mail.smtp.auth.ntlm.disable логический Если true, запрещает использование команды AUTH NTLM. По умолчанию установлено значение false.
    mail.smtp.auth.ntlm.domain строка Домен аутентификации NTLM.
    mail.smtp.auth.ntlm.flags ИНТ Флаги, специфичные для протокола 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 строка Идентификатор авторизации для использования в аутентификации 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 ИНТ Определяет порт для подключения при использовании указанной фабрики сокетов. Если не установлен, будет использоваться порт по умолчанию.
    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 Socket Factory Если установлен класс, который расширяет класс javax.net.ssl.SSLSocketFactory, этот класс будет использоваться для создания сокетов SSL SMTP.
    mail.smtp.ssl.socketFactory.class строка Если установлено, указывает имя класса, который расширяет класс javax.net.ssl.SSLSocketFactory. Этот класс будет использоваться для создания SMTP-сокетов SSL.
    mail.smtp.ssl.socketFactory.port ИНТ Определяет порт для подключения при использовании указанной фабрики сокетов. Если не установлен, будет использоваться порт по умолчанию.
    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 напрямую. Вместо этого им следует использовать метод Session getTransport для получения соответствующего транспортного объекта.

    Примеры использования SMPT-сервера приведены в главе « Отправка электронных писем» .