Delphi: Versenden von EMails via Indy (SSL, TSL)

Folgender Code hilft beim Versenden von EMails aus Delphi / Indy mit Anbindung und Unterstützung von SSL und TSL. Inspiriert wurde das Ganze von „Envio de e-mail com componentes Indy„.

procedure TForm1.Button3Click(Sender: TObject);
IdSSLIOHandlerSocket: TIdSSLIOHandlerSocketOpenSSL;
IdSMTP: TIdSMTP;
IdMessage: TIdMessage;
IdText: TIdText;
sAnexo: string;
begin
IdSSLIOHandlerSocket := TIdSSLIOHandlerSocketOpenSSL.Create(Self);
IdSMTP := TIdSMTP.Create(Self);
IdMessage := TIdMessage.Create(Self);
try
IdSSLIOHandlerSocket.SSLOptions.Method := sslvSSLv23;
IdSSLIOHandlerSocket.SSLOptions.Mode := sslmClient;
IdSMTP.IOHandler := IdSSLIOHandlerSocket;
IdSMTP.UseTLS := utUseImplicitTLS;
IdSMTP.AuthType := satDefault;
IdSMTP.Port := xxx;
IdSMTP.Host := '';
IdSMTP.Username := '';
IdSMTP.Password := '';
IdMessage.From.Address := '';
IdMessage.From.Name := '';
IdMessage.ReplyTo.EMailAddresses := IdMessage.From.Address;
IdMessage.Recipients.Add.Text := edit5.text;
IdMessage.Subject := '';
IdMessage.Encoding := meMIME;
IdText := TIdText.Create(IdMessage.MessageParts);
IdText.Body.Add('The body of the e-mail goes here');
IdText.ContentType := 'text/plain; charset=iso-8859-1';
try
IdSMTP.Connect;
IdSMTP.Authenticate;
except
on E:Exception do
begin
MessageDlg('Cannot authenticate: ' +
E.Message, mtWarning, [mbOK], 0);
Exit;
end;
end;
try
IdSMTP.Send(IdMessage);
MessageDlg('Message sent successfully!', mtInformation, [mbOK], 0);
except
On E:Exception do
begin
MessageDlg('Error while sending a message: ' +
E.Message, mtWarning, [mbOK], 0);
end;
end;
finally
FreeAndNil(IdMessage);
FreeAndNil(IdSSLIOHandlerSocket);
FreeAndNil(IdSMTP);
end;
end;

Delphi: Abrufen von EMails via Indy inkl. SSL

Der folgende Code ist hilft hier vor allem bei TLS und SSL geschützten Accounts. Es eine erste Version und soweit sind keine Fehler aufgefallen.

procedure TForm1.Button9Click(Sender: TObject);
var
i, j,MsgAnz: Integer;
IdSSLIOHandlerSocket: TIdSSLIOHandlerSocketOpenSSL;
bodytext: string;
begin
IdSSLIOHandlerSocket := TIdSSLIOHandlerSocketOpenSSL.Create(Self);
idpop31.IOHandler := IdSSLIOHandlerSocket;
idpop31.UseTLS := utUseImplicitTLS;
IdPOP31.Host := '';
IdPOP31.Port := xxx;
IdPOP31.UseTLS := utUseImplicitTLS;
IdPOP31.Username := '';
IdPOP31.Password := '';
IdPOP31.Connect;
if IdMessage1.ContentType='text/plain' then
memo1.text:=IdMessage1.Body.Text;
MsgAnz := IdPOP31.CheckMessages;
mailzeug.Lines.Add('Anzahl E-Mails:' + IntToStr(MsgAnz));
for i:= 1 to MsgAnz do
begin
idpop31.Retrieve(i, IdMessage1);
mailzeug.Lines.Add('E-Mail Nr:' + IntToStr(i)+ sLineBreak +
' Von:' + IdMessage1.From.Text + sLineBreak +
' Betreff:' + IdMessage1.Subject);
bodytext:=idmessage1.Body.Text;
mailzeug.Lines.Add(bodytext);
IdMessage1.Clear;
idpop31.Delete(i);
end;
IdPOP31.Disconnect;
FreeAndNil(IdSSLIOHandlerSocket);
end;