Delphi - объектно-ориентированный язык программирования, разработанный компанией Borland в 1995 году. Он основан на языке программирования Pascal, но имеет более расширенные возможности и добавлены новые функции.
Delphi является интегрированной средой разработки (IDE), которая позволяет разрабатывать программное обеспечение для различных платформ, включая Windows, macOS, Android и iOS. Delphi достигает многоплатформенности с помощью...
{
smtp - ip адрес smtp сервера
port - порт smtp сервера, по умолчанию 25
from - адрес отправителя
dest - адрес получателя
}
subject - тема письма
body - текст писма
Возвращает True если письмо было успешно отправленно...
function
mail(smtp: string
; port: integer; from, dest, subject, body: string
): bool; const
cl = #13#10;
var
WSAData: TWSAData;
Host: TSockAddrIn;
Sock: TSocket;
res: Integer;
buff: array
[1..255] of
Char;
{ отправляем данные через сокет }
procedure
senddata(str: string
); var
i: integer;
begin
for
i := 1 to
Length(str) do
if
send(Sock, str[i], 1, 0) = SOCKET_ERROR then
exit;
end
;
{ получаем ответ от команды }
function
recvdata(accept: string
): bool; var
buff: array
[1..255] of
Char; begin
res := recv(Sock, buff, SizeOf(buff), 0);
Result := (Res = SOCKET_ERROR) or
(Copy(buff, 1, 3) =
accept);
end
;
begin
try
result := false;
{ инициализация сокета }
WSAStartUp(257, WSAData);
Sock := socket(AF_INET, SOCK_STREAM, IPPROTO_IP);
if
Sock = INVALID_SOCKET then
Exit;
{ устанавливаем хост и порт сервера
}
res := inet_addr(PChar(smtp));
if
res <= 0 then
exit;
Host.sin_family := AF_INET;
Host.sin_port := htons(port);
Host.sin_addr.S_addr := res;
{ подключаемся к серверу }
if
connect(Sock, Host, SizeOf(Host)) > 0 then
Exit;
{ приветствие сервера }
if
not
recvdata('220') then
Exit;
{ EHLO }
senddata('EHLO' + cl);
if
not
recvdata('250') then
Exit;
{ MAIL FROM: }
senddata('MAIL FROM:' + from + cl);
if
not
recvdata('250') then
Exit;
{ RCPT TO: }
senddata('RCPT TO:' + dest + cl);
if
not
recvdata('250') then
Exit;
{ DATA }
senddata('DATA' + cl);
if
not
recvdata('354') then
Exit;
{ отправляем текст сообщения }
senddata('Subject:' + subject + cl + cl + body + cl + '.');
if
not
recvdata('250') then
Exit;
{ отключаемся от сервера }
senddata('QUIT' + cl);
result := true;
finally
{ убиваем сокет }
closesocket(sock);
WSACleanup;
end
;
end
;
Функция делалась на основе статьи "Простой протокол передачи почты (SMTP)"
{
mail('127.0.0.1',25,'bboy-ne@yandex.ru' ,'admin@company.mail', 'subj', 'body
text');
p.s.: Тестировалась на e-mail сервере Alt-N Daemond Pro for Windows v6.5.1...