Delphi - объектно-ориентированный язык программирования, разработанный компанией Borland в 1995 году. Он основан на языке программирования Pascal, но имеет более расширенные возможности и добавлены новые функции.
Delphi является интегрированной средой разработки (IDE), которая позволяет разрабатывать программное обеспечение для различных платформ, включая Windows, macOS, Android и iOS. Delphi достигает многоплатформенности с помощью...
uses
Mapi;
function
SendEMail(Handle: THandle; Mail: TStrings): Cardinal; type
TAttachAccessArray = array
[0..0] of
TMapiFileDesc; PAttachAccessArray = ^TAttachAccessArray; var
MapiMessage: TMapiMessage;
Receip: TMapiRecipDesc;
Attachments: PAttachAccessArray;
AttachCount: Integer;
i1: integer;
FileName: string
; dwRet: Cardinal; MAPI_Session: Cardinal; WndList: Pointer; begin
dwRet := MapiLogon(Handle,
PChar(''),
PChar(''),
MAPI_LOGON_UI or
MAPI_NEW_SESSION,
0, @MAPI_Session);
if
(dwRet <> SUCCESS_SUCCESS) then
begin
MessageBox(Handle,
PChar('Error while trying to send email'),
PChar('Error'),
MB_ICONERROR or
MB_OK); end
else
begin
FillChar(MapiMessage, SizeOf(MapiMessage), #0);
Attachments := nil
;
FillChar(Receip, SizeOf(Receip), #0);
if
Mail.Values['to'] <> '' then
begin
Receip.ulReserved := 0;
Receip.ulRecipClass := MAPI_TO;
Receip.lpszName := StrNew(PChar(Mail.Values['to']));
Receip.lpszAddress := StrNew(PChar('SMTP:' +
Mail.Values['to']));
Receip.ulEIDSize := 0;
MapiMessage.nRecipCount := 1;
MapiMessage.lpRecips := @Receip;
end
;
AttachCount := 0;
for
i1 := 0 to
MaxInt do
begin
if
Mail.Values['attachment' + IntToStr(i1)] = '' then
break;
Inc(AttachCount);
end
;
if
AttachCount > 0 then
begin
GetMem(Attachments, SizeOf(TMapiFileDesc) *
AttachCount);
for
i1 := 0 to
AttachCount - 1 do
begin
FileName := Mail.Values['attachment'
+ IntToStr(i1)];
Attachments[i1].ulReserved := 0;
Attachments[i1].flFlags := 0;
Attachments[i1].nPosition := ULONG($FFFFFFFF);
Attachments[i1].lpszPathName :=
StrNew(PChar(FileName));
Attachments[i1].lpszFileName :=
StrNew(PChar(ExtractFileName(FileName)));
Attachments[i1].lpFileType := nil
;
end
; MapiMessage.nFileCount := AttachCount; MapiMessage.lpFiles := @Attachments^; end
;
if
Mail.Values['subject'] <> '' then
MapiMessage.lpszSubject := StrNew(PChar(Mail.Values['subject']));
if
Mail.Values['body'] <> '' then
MapiMessage.lpszNoteText := StrNew(PChar(Mail.Values['body']));
WndList := DisableTaskWindows(0);
try
Result := MapiSendMail(MAPI_Session, Handle, MapiMessage, MAPI_DIALOG, 0); finally
EnableTaskWindows( WndList ); end
;
for
i1 := 0 to
AttachCount - 1 do
begin
StrDispose(Attachments[i1].lpszPathName); StrDispose(Attachments[i1].lpszFileName); end
;
if
Assigned(MapiMessage.lpszSubject) then
StrDispose(MapiMessage.lpszSubject); if
Assigned(MapiMessage.lpszNoteText) then
StrDispose(MapiMessage.lpszNoteText); if
Assigned(Receip.lpszAddress) then
StrDispose(Receip.lpszAddress); if
Assigned(Receip.lpszName) then
StrDispose(Receip.lpszName); MapiLogOff(MAPI_Session, Handle, 0, 0); end
;
end
;
procedure
TForm1.Button1Click(Sender: TObject); var
mail: TStringList;
begin
mail := TStringList.Create;
try
; ;
mail.values['to'] := 'Receiver-Email@test.xyz';
mail.values['subject'] := 'Hello';
mail.values['body'] := 'blah';
mail.values['body'] := 'blah';
mail.values['attachment0'] := 'C:Test.txt';
//
mail.values['attachment1']:='C:Test2.txt';
sendEMail(Application.Handle, mail);
finally
mail.Free;
end
end