Отправка писем через различные SMTP-серверы

Для работы с SMTP-клиентами в языке Fore предназначен интерфейс INetSmtpClient. Для отправки почты с использованием SMTP-клиента в коде необходимо реализовать следующее:

  1. Создать адреса электронной почты отправителя и получателя.

  2. Создать сообщение электронной почты, заполнить его параметры (указать отправителя, получателя, заголовок, текст сообщения и другие необходимые параметры).

  3. Инициализировать SMTP-клиент, настроить его параметры (указать SMTP-сервер и порт, через которые осуществляется отправка, при необходимости указать другие параметры).

  4. Отправить сообщение.

В общем виде реализация данного алгоритма выглядит следующим образом:

Sub SendMessage;
Var
    From_, To_: INetMailAddress;
    Message: INetMailMessage;
    Client: INetSmtpClient;
    Credential: INetNetworkCredential;
Begin
    From_ := New CurlMailAddress.Create("ivanov@server.ru");
    To_ := New CurlMailAddress.Create("petrov@server.ru");
    Message := New CurlMailMessage.CreateWithFromAndTo(From_, To_);
    Message.Subject := "Тестовое письмо";
    Message.Body := "Текст письма";
    Client := New CurlSmtpClient.CreateWithHost("example.server.ru");
    Client.Send(Message);
End Sub SendMessage;

Если требуется авторизация на SMTP-сервере, то дополните код следующими образом:

    //...
    Client := New 
CurlSmtpClient.CreateWithHost("example.server.ru");
    Credential := New 
CurlNetworkCredential.Create("ivanov""password""work");
    Client.ThisHostCredentials("") := Credential;
    //...

По умолчанию работа с SMTP-серверами осуществляется через порт «25». Это базовый порт для SMTP и в целях безопасности может быть закрыт на SMTP-сервере. Для работы через другой порт укажите его номер в свойстве INetSmtpClient.Port или используйте для инициализации SMTP-клиента метод CurlSmtpClient.CreateWithHostAndPort. При работе через порт «465» также требуется включить поддержку SSL-шифрования, для этого в свойстве INetSmtpClient.EnableSsl установите значение True.

    //...
    Client := New 
CurlSmtpClient.CreateWithHost("example.server.ru");
    Credential := New 
CurlNetworkCredential.Create("ivanov""password""work");
    Client.Port := 465;
    Client.EnableSsl := True;
    Client.ThisHostCredentials("") := Credential;
    //...

Если SMTP-сервер использует протокол аутентификации пользователя, то укажите его наименование при задании учётных данных:

    //...
    Client.ThisHostCredentials("Kerberos") := Credential;
    //...

Ниже приведен список настроек SMTP-серверов, которые будет необходимо указать в коде для отправки сообщений:

SMTP-сервер Порт SSL Описание
smtp.gmail.com 587(TLS), 465(SSL) + SMTP-сервер компании Google.
smtp.mail.com 465 + SMTP-сервер компании Mail.ru.
smtp.yandex.ru 465 + SMTP-сервер компании Яндекс.
smtp.mail.yahoo.com
plus.smtp.mail.yahoo.com
465 + SMTP-сервер компании Yahoo.

См. также:

Примеры | INetSmtpClient