Отправка письма с вложением — Delphi XE

Облазив множество сайтов и форумов в поисках новой процедуры для отправки письма с вложением с помощью Delphi XE 5 (ведь старый способ реализованный в Delphi 7 оказался неработоспособным в Delphi XE 5) я наткнулся наконец-то на нужную мне модернизированную процедуру. И вот здесь решил я её выложить, вдруг кому-нибудь понадобится.

Кидаем на форму три компонента: IdHTTP, IdMessage, IdSSLIOHandlerSocketOpenSSL

В Uses прописываем: idAttachment,IdAttachmentFile

uses idAttachment,IdAttachmentFile;
procedure TForm1.Button2Click(Sender: TObject);
var
attach:TidAttachment;
attach2:TidAttachment;
msg:TIdMessage;
FileDir:string;
att:TIdAttachmentFile;
IdSSLIOHandlerSocketOpenSSL: TIdSSLIOHandlerSocketOpenSSL;
begin
IdMessage1 := TIdMessage.Create;
IdMessage1.From.Address:=’mail1@yandex.ru’; // адрес первого ящика
IdMessage1.Recipients.EMailAddresses:=’mail2@yandex.ru’; // адрес второго ящика на который прейдет письмо
IdMessage1.Subject:= UTF8Encode(‘234’);
idmessage1.Subject:=AnsiString(‘Привет!’);// тема письма
IdMessage1.Date:= now;

{настройка компонентов перед отправкой}
IdSMTP1:= TIdSMTP.Create(nil);

IdSMTP1.Host:=’smtp.yandex.ru’;
IdSMTP1.Port:=465; // обычно при использование ssl 495, 587 или стандартный 25
IdSMTP1.Username:=’mail1@yandex.ru’;// адрес первого ящика
IdSMTP1.Password:=’111111′; //пароль от первого ящика с которого шлём письмо
IdSMTP1.AuthType:=satDefault;

{это необходимо использовать для SSL}
IdSSLIOHandlerSocketOpenSSL:= TIdSSLIOHandlerSocketOpenSSL.Create(nil);
IdSSLIOHandlerSocketOpenSSL.Destination := IdSMTP1.Host+’:’+IntToStr(IdSMTP1.Port);
IdSSLIOHandlerSocketOpenSSL.Host := IdSMTP1.Host;
IdSSLIOHandlerSocketOpenSSL.Port := IdSMTP1.Port;
IdSSLIOHandlerSocketOpenSSL.DefaultPort := 0;
IdSSLIOHandlerSocketOpenSSL.SSLOptions.Method := sslvTLSv1;
//IdSSLIOHandlerSocketOpenSSL.SSLOptions.Method := sslvSSLv2;

IdSSLIOHandlerSocketOpenSSL.SSLOptions.Mode := sslmUnassigned;

IdSMTP1.IOHandler := IdSSLIOHandlerSocketOpenSSL;
IdSMTP1.UseTLS := utUseImplicitTLS;

FileDir:=ExtractFilePath(Application.ExeName)+’file.txt’;
if FileExists(FileDir) then begin
try
IdMessage1.IsEncoded:=true;
att:=TIdAttachmentfile.Create(IdMessage1.MessageParts,FileDir);

{отправляем письмо}
IdSMTP1.Connect();
if idsmtp1.Connected then
showmessage(‘Письмо успешно отправлено!’);
IdSMTP1.Send(IdMessage1);
Application.ProcessMessages;
IdSMTP1.Disconnect;
idMessage1.Free;
IdSSLIOHandlerSocketOpenSSL.Free;
idSMTP1.Free;
except

end;
end;
end;

Да для работы компонента IdSSLIOHandlerSocketOpenSSL вам возможно понадобятся две динамические библиотеки, которые можно скачать перейдя по этой ссылке.





Отправка письма с вложением — Delphi XE: 3 комментария

  1. МОЛОДЦОМ (IdSSLIOHandlerSocketOpenSSL…)
    «проблема» SSL (ДЛЯ XE 2016 года) —
    решилась «вашими» трудами — уже хотел бросить это дело..
    .
    2. Выскакивала Ошибка (Syntactically invalid EHLO argument(s)).
    но другие «молодцы» (MQL4 форум.htm) «нашли решение».
    …Имя Компьютера ОБЯЗАТЕЛЬНО должно быть На Английском Языке.
    (Мой Компьютер/ПраваяКнопка/ИзменитьИмяПК).
    3.

  2. Привет !!! Ваш код не работает если отправляешь с windous 8.
    Если отправляешь с ХР то работает, а так выходит ошибка

    1. Мадияр, у меня нет под рукой Windows 8, но я думаю, что вы где-то допустили ошибку. Вот рабочий исходник отправки письма с файлом http://wisekaa.org/loaded/mail.rar протестирован в Windows 7 и Windows 10.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Enter the text from the image below