Подключение к SMTP-серверу

При работе с почтовыми клиентами определенные операции могут занимать значительное время для выполнения. Чтобы предотвратить бесконечное выполнение этих операций, пользователи могут использовать свойство EmailClient.Timeout. Важно отметить, что значения, назначенные этому свойству, должны иметь достаточные интервалы, чтобы учесть длительные операции.

Тем не менее, полагаться исключительно на свойство Timeout может привести к тому, что установление соединения займёт больше времени, чем ожидалось. Это может произойти, когда почтовый клиент использует автоматический режим для установки соединения. В этом режиме клиент перебирает различные параметры соединения, пока не будет установлено соединение.

При подключении к SMTP, IMAP и POP3 серверам строка приветствия отправляется клиенту после успешного установления соединения. Серверы могут использовать неявную или явную (START TLS) инициацию соединения SSL/TLS. В случаях, когда режим соединения не соответствует (например, сервер ожидает неявное SSL-соединение, в то время как клиент пытается установить незащищённое или явное SSL-соединение), сервер не отправит строку приветствия.

В результате пользователь может ожидать длительное время, пока не истечёт время ожидания, и клиент перейдёт к следующему варианту подключения.

Чтобы решить эту проблему, было введено свойство GreetingTimeout. Это свойство позволяет пользователям установить тайм-аут для строки приветствия, сокращая время, необходимое для установления автоматического соединения. Реализуя свойство GreetingTimeout, пользователи могут оптимизировать производительность своего почтового клиента и избежать длительных ожиданий во время установления соединения.

Следующий пример кода показывает, как установить свойство EmailClient.GreetingTimeout:

using (SmtpClient client = new SmtpClient("localhost", 25, "username", "password"))
{
    client.GreetingTimeout = 4000;
}

Подключение к серверу через Socks-прокси

Иногда мы используем прокси-серверы для связи с внешним миром. В таких случаях почтовые клиенты не могут общаться по Интернету, не указав адрес прокси. Aspose.Email поддерживает версии 4, 4a и 5 протокола прокси SOCKS. В этой статье представлен рабочий пример отправки электронного письма с использованием почтового прокси-сервера. Чтобы отправить электронное письмо через прокси-сервер:

  1. Инициализируйте прокси с необходимой информацией, то есть адресом прокси, портом и версией SOCKS.
  2. Инициализируйте SmtpClient с адресом хоста, именем пользователя и паролем, а также любыми другими настройками.
  3. Установите свойство Proxy клиента в объект Proxy, созданный ранее.

Следующий фрагмент кода показывает, как подключиться к серверу через прокси-сервер.

Подключение к серверу через HTTP-прокси

Подключение к серверу с использованием поддерживаемого метода аутентификации

Aspose.Email для .NET предлагает свойства, позволяющие проверить, какие методы аутентификации могут быть использованы для установления безопасного соединения с SMTP-сервером перед отправкой электронной почты:

  • свойство SmtpClient.SupportedAuthentication возвращает список методов аутентификации, поддерживаемых SMTP-сервером.
  • свойство SmtpClient.AllowedAuthentication возвращает список методов аутентификации, определенных пользователем.
smtpClient.AllowedAuthentication = SmtpKnownAuthenticationType.Login;

Загрузка информации для аутентификации SMTP из файла CONFIG

Класс SmtpClient позволяет приложениям считывать информацию для аутентификации, такую как имя пользователя и пароль, а также адрес хоста и номер порта непосредственно из файла конфигурации. Использование родного тега конфигурации .NET, как показано ниже, позволяет классу SmtpClient считывать эту информацию через Диспетчер конфигурации, также доступный в .NET Framework. Чтобы Aspose.Email мог считывать файл конфигурации, он должен быть в правильном формате. Ниже приведен пример XML-файла конфигурации, за которым следует код, который его считывает. Следующий фрагмент кода показывает, как загрузить информацию для аутентификации SMTP из файла CONFIG.

После определения конфигурационных настроек загрузите эти настройки непосредственно в экземпляр класса SmtpClient с использованием одного из его перегруженных конструкторов. Следующий фрагмент кода демонстрирует считывание конфигурационных настроек из файла конфигурации и загрузку их непосредственно в экземпляр класса SmtpClient.

Привязка SMTP-клиента к конкретному IP-адресу на хосте

Не исключается возможность, что у хоста есть несколько доступных портов для отправки электронных писем. В таких случаях может возникнуть необходимость привязать клиент для отправки электронной почты к конкретному порту на хосте. Это можно сделать с помощью API Aspose.Email, используя свойство SmtpClient BindIPEndPoint. API SmtpClient может быть настроен для использования конкретного IP-адреса на хосте, указав конкретный IP-эндпоинт. Следующий фрагмент кода показывает, как привязать SMTP-клиент к конкретному IP-адресу на хосте.

Как установить тайм-аут для почтовых операций

Каждая почтовая операция занимает некоторое время в зависимости от множества факторов (задержки сети, размер данных, производительность сервера и т. д.). Вы можете установить тайм-аут для всех почтовых операций. Пример кода ниже показывает, как это сделать, используя свойство Timeout. Примечание: вы не должны устанавливать большие значения, чтобы избежать длительных ожиданий в вашем приложении.

using (SmtpClient smtpClient = new SmtpClient("host", 587, "username", "password", SecurityOptions.SSLExplicit))
{
    smtpClient.Timeout = 60000; // 60 секунд

    // какой-то код...
}

Использование криптографических протоколов с SMTP-клиентом

Aspose.Email поддерживает SSL (устаревший) и TLS криптографические протоколы для обеспечения безопасности связи. Вы можете включить криптографическое шифрование, чтобы защитить обмен данными между вашим приложением и почтовыми серверами.

ПРИМЕЧАНИЕ: Вы должны устанавливать только те версии протокола, которые поддерживаются .NET Framework. Если какие-то версии криптографического протокола не поддерживаются вашей текущей версией .NET Framework, они будут проигнорированы и пропущены. В этом случае исключения не будут генерироваться. Пожалуйста, используйте метод SetSupportedEncryptionUnsafe, если вы хотите установить протоколы без проверок совместимости.

Пример кода ниже показывает, как установить TLS 1.3 для экземпляра класса SmtpClient.

using (SmtpClient smtpClient = new SmtpClient("host", 587, "username", "password", SecurityOptions.SSLExplicit))
{
    smtpClient.SupportedEncryption = EncryptionProtocols.Tls13;

    // какой-то код...
}

В случае, если указанный протокол шифрования не поддерживается в текущей версии .NET Framework, различие в поведении между методом SetSupportedEncryptionUnsafe и свойством SupportedEncryption следующее:

  • Если используется свойство SupportedEncryption, почтовый клиент понижает протокол шифрования до поддерживаемого уровня.
  • Если используется метод SetSupportedEncryptionUnsafe, почтовый клиент выбрасывает исключения.

Использование механизма CRAM-MD5 для аутентификации

Механизм аутентификации CRAM-MD5 в Aspose.Email для .NET предоставляет дополнительный уровень безопасности при доступе к серверу. Следующий фрагмент кода показывает, как реализовать эту функцию в вашем проекте:

smtpClient.AllowedAuthentication = SmtpKnownAuthenticationType.CramMD5;