unit TMail_VersandUnit;
interface
uses
Messages, SysUtils, Variants, Classes, Dialogs, ExtCtrls, StdCtrls,
ComCtrls,IdSMTP, IdMessage, Menus, Clipbrd, IDText,IdAttachment,
IdAttachmentFile, IdSSL, Codes, Uni, Forms, ComObj, TDatenbankUnit,
IdSSLOpenSSL, IdExplicitTLSClientServerBase, IdGlobal;
type
TMail_Versand=
class
strict protected
FEmpfaenger:
string;
FBetreff:
string;
FBody: TStringList;
FDatei_Pfad:
string;
FVorlagen_Pfad:
string;
private
function SendEmail( Recipient :
string; CCList :
string; sSubject :
string; Body : TStringList; Pfad :
string ): boolean;
procedure Set_Verbindungsdaten;
public
property Betreff :
string read FBetreff
write FBetreff;
property Body : TStringList
read FBody
write FBody;
property Empfaenger :
string read FEmpfaenger
write FEmpfaenger;
property Datei_Pfad :
string read FDatei_Pfad
write FDatei_Pfad;
property Vorlagen_Pfad :
string read FVorlagen_Pfad
write FVorlagen_Pfad;
constructor create;
function Versand(Dateianhang_delete: Boolean): boolean;
procedure Set_Body(Auftrag, Datum, Verfasser, Kommentar, Tabelle:
string);
end;
var idSMTP: TidSMTP;
idMessage: TidMessage;
idSSLHandler: TIdSSLIOHandlerSocketOpenSSL;
Mail_Versand: TMail_Versand;
Query: TUniQuery;
implementation
constructor TMail_Versand.create;
begin
FBody:=TStringList.Create;
idMessage := TidMessage.Create;
idSMTP := TidSMTP.Create;
end;
procedure TMail_Versand.Set_Body(Auftrag, Datum, Verfasser, Kommentar, Tabelle:
string);
var Datei: TextFile;
MyString:
String;
begin
AssignFile(Datei, ExtractFilePath(Application.ExeName) + '
KommentarMailVorlage.txt');
Reset(Datei);
FBody.Clear;
try
while not eof (Datei)
do begin
ReadLn(Datei, MyString);
MyString:=StringReplace(MyString, '
XXXAuftrag',Auftrag, [rfReplaceAll]);
MyString:=StringReplace(MyString, '
XXXDATUMNEU', Datum, [rfReplaceAll]);
MyString:=StringReplace(MyString, '
XXXVERFASSERNEU',Verfasser, [rfReplaceAll]);
MyString:=StringReplace(MyString, '
XXXKommentar',Kommentar, [rfReplaceAll]);
MyString:=StringReplace(MyString, '
XXXTABELLE', Tabelle, [rfReplaceAll]);
FBody.Add(MyString);
end;
finally
CloseFile(Datei);
end;
end;
procedure TMail_Versand.Set_Verbindungsdaten;
var Datei: TextFile;
MyString:
String;
begin
AssignFile(Datei, ExtractFilePath(Application.ExeName) + '
Mail.ini');
Reset(Datei);
try
ReadLn(Datei, MyString);
idSMTP.Host := copy(MyString, pos('
:', MyString)+1, length(MyString));
ReadLn(Datei, MyString);
idSMTP.Username := copy(MyString, pos('
:', MyString)+1, length(MyString));
ReadLn(Datei, MyString);
idSMTP.Password := copy(MyString, pos('
:', MyString)+1, length(MyString));
ReadLn(Datei, MyString);
idSMTP.Port := StrToInt(copy(MyString, pos('
:', MyString)+1, length(MyString)));
ReadLn(Datei, MyString);
idMessage.From.text := copy(MyString, pos('
:', MyString)+1, length(MyString));
idMessage.Sender.text := copy(MyString, pos('
:', MyString)+1, length(MyString));
finally
CloseFile(Datei);
end;
end;
function TMail_Versand.SendEmail( Recipient :
string; CCList :
string; sSubject :
string; Body : TStringList; Pfad :
string )
: boolean;
var
nAlarmnr : integer;
Attachment : TIdAttachment;
begin
Result := True;
Set_Verbindungsdaten;
idMessage.Recipients.EMailAddresses := Recipient;
idMessage.CCList.EMailAddresses := CCList;
idMessage.Subject := sSubject;
idMessage.ContentType := '
multipart/*';
with TidText.Create( idMessage.MessageParts, Body )
do begin
ContentType := '
text/html';
end;
if Pfad<>'
'
then begin
with TIdAttachmentFile.Create( idMessage.MessageParts, Pfad )
do begin
idMessage.MessageParts.Add( );
end;
end;
try
idSMTP.Connect;
//Hier entsteht der Fehler
try
idSMTP.Send( idMessage );
Result := True;
finally
idSMTP.Disconnect;
idMessage.Clear;
end;
except
Result := False;
end;
end;
function TMail_Versand.Versand (Dateianhang_delete: Boolean):boolean;
begin
{! Empfaenger, Betreff, Text und der Dateianhang kommen aus der aufrufenden Procedure}
Try
Result:= SendEmail(empfaenger, '
', betreff, FBody, FDatei_Pfad);
if Result
and Dateianhang_delete
then
deleteFile(FDatei_Pfad);
Except
Result:=false;
End;
end;
initialization
Mail_Versand := TMail_Versand.Create;
finalization
idSMTP.Free;
idMessage.Free;
if Mail_Versand.Body <>
nil then
Mail_Versand.Body.Free;
if Mail_Versand <>
nil then
Mail_Versand.Free;
end.