Підключення до SMTP-сервера
Наступні властивості потрібно встановити під час підключення до SMTP‑сервера з підтримкою SSL.
- SecurityOptions
- Порт
У наведених нижче прикладах ми показуємо, як:
- Вкажіть ім’я користувача.
- Вкажіть пароль.
- Встановіть порт.
- Встановіть параметр безпеки.
Нижче наведено код, який показує, як підключитися до SSL‑включеного SMTP‑сервера.
// 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 Proxy Server
Іноді ми використовуємо проксі‑сервери для зв’язку зі зовнішнім світом. У таких випадках поштові клієнти не можуть спілкуватися через Інтернет без зазначення адреси проксі. 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-Endpoint. Нижче наведено код, який показує, як прив’язати 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...
}