Подключение к SMTP‑серверу
Следующие свойства необходимо задать при подключении к SMTP‑серверу с поддержкой SSL.
- SecurityOptions
- Порт
В приведённых ниже примерах показано, как:
- Установите имя пользователя.
- Установите пароль.
- Установите порт.
- Установите параметр безопасности.
Следующий фрагмент кода показывает, как подключиться к SMTP‑серверу с поддержкой SSL.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
SmtpClient client = new SmtpClient("smtp.gmail.com");
// Set username, password, port, and security options
client.setUsername("your.email@gmail.com");
client.setPassword("your.password");
client.setPort(587);
client.setSecurityOptions(SecurityOptions.SSLExplicit);
Подключение к серверу через Socks‑прокси сервер
Иногда мы используем прокси‑серверы для связи с внешним миром. В таких случаях почтовые клиенты не могут работать в Интернете без указания адреса прокси. Aspose.Email поддерживает версии 4, 4a и 5 протокола SOCKS‑прокси. В этой статье представлен рабочий пример отправки письма через прокси‑почтовый сервер. Чтобы отправить письмо через прокси‑сервер:
- Инициализировать прокси с необходимой информацией: адрес прокси, порт и версию SOCKS.
- Инициализировать SmtpClient с указанием адреса хоста, имени пользователя, пароля и любых других настроек.
- Установите свойство Proxy клиента в Прокси объект, созданный ранее.
Следующий фрагмент кода показывает, как подключиться к серверу через прокси‑сервер.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
SmtpClient client = new SmtpClient("smtp.domain.com", "username", "password");
client.setSecurityOptions(SecurityOptions.SSLImplicit);
String proxyAddress = "192.168.203.142"; // proxy address
int proxyPort = 1080; // proxy port
SocksProxy proxy = new SocksProxy(proxyAddress, proxyPort, SocksVersion.SocksV5);
client.setProxy(proxy);
client.send(new MailMessage("sender@domain.com", "receiver@domain.com", "Sending Email via proxy",
"Implement socks proxy protocol for versions 4, 4a, 5 (only Username/Password authentication)"));
Подключение к серверу через HTTP‑прокси сервер
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
HttpProxy proxy = new HttpProxy("18.222.124.59", 8080);
try (SmtpClient client = new SmtpClient("host", 587, "username", "password")) {
client.setProxy(proxy);
client.send(new MailMessage("sender@domain.com", "receiver@domain.com", "Sending Email via proxy",
"Implement socks proxy protocol for versions 4, 4a, 5 (only Username/Password authentication)"));
}
Настроить механизм аутентификации
Получить список механизмов аутентификации, поддерживаемых SMTP‑сервером, с помощью getSupportedAuthentication метод SmtpClient класс. Этот метод позволяет клиенту определить, какие методы аутентификации доступны для установления защищённого соединения с сервером. Затем, используя setAllowedAuthentication метод, который получает (или задаёт) перечисление типов аутентификации, разрешённых пользователем, выбирайте наиболее подходящий механизм аутентификации для клиент‑серверного взаимодействия. Это позволяет явно установить метод аутентификации для почтового клиента.
Следующий пример кода показывает, как настроить аутентификацию почтового клиента:
smtpClient.setAllowedAuthentication(SmtpKnownAuthenticationType.Login);
Использование аутентификации CRAM-MD5 для подключения к серверу
Чтобы обеспечить безопасную аутентификацию и связь с SMTP‑сервером, можно указать и принудительно использовать CRAM-MD5 в качестве разрешённого метода аутентификации для SMTP‑клиента. Следующий фрагмент кода показывает, как настроить разрешённый тип аутентификации для SmtpClient:
smtpClient.setAllowedAuthentication(SmtpKnownAuthenticationType.CramMD5);
Привязать SMTP‑клиент к конкретному IP‑адресу на хосте
Возможность того, что у хоста доступно несколько портов для отправки писем, нельзя исключать. В таких случаях может возникнуть необходимость привязать клиент отправки почты к конкретному порту на хосте для отправки писем. Это также можно выполнить с помощью Aspose.Email API, используя SmtpClient bindIPEndPoint свойство. API SmtpClient может быть установлен для использования конкретного IP-адреса на хосте, указав конкретную IP‑конечную точку. Следующий фрагмент кода показывает, как привязать SMTP‑клиент к конкретному IP‑адресу на хосте.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
SmtpClient client = new SmtpClient("smtp.domain.com", // host
587, // port
"username", // username
"password", // password
SecurityOptions.Auto // Security Options
);
try {
client.bindIPEndPoint(new BindIPEndPointHandler() {
public InetSocketAddress invoke(InetSocketAddress remoteEndPoint) {
return new InetSocketAddress(0);
}
});
client.noop();
} finally {
client.dispose();
}
Проверка учетных данных почтового сервера без отправки письма
Иногда необходимо проверить учетные данные без отправки письма. Aspose.Email предоставляет validateCredentials() метод для выполнения этой операции. Если проверка проходит успешно, код внутри оператора if выполняется, обычно используется для дальнейших действий или получения данных с IMAP‑сервера. Следующий фрагмент кода демонстрирует проверку учетных данных без отправки письма:
try (SmtpClient smtpClient = new SmtpClient(
server.SmtpUrl, server.SmtpPort, "username", "password", SecurityOptions.Auto)) {
smtpClient.setTimeout(4000);
if (smtpClient.validateCredentials()) {
// to do something
}
}
Как установить тайм‑аут для почтовых операций
Каждая почтовая операция занимает время, зависящее от множества факторов (сетевые задержки, размер данных, производительность сервера и т.д.). Вы можете установить тайм‑аут для всех почтовых операций. Пример кода ниже показывает, как это сделать с помощью Тайм‑аут свойство. Примечание: не следует задавать большие значения, чтобы избежать длительного ожидания в приложении.
try (SmtpClient smtpClient = new SmtpClient("host", 587, "username", "password", SecurityOptions.SSLExplicit))
{
smtpClient.setTimeout(60000); // 60 seconds
// some code...
}