Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Отправить почту [D6, D7]


АртемК ©   (2005-11-15 22:15:00) 

Привет всем!
Ребята, как через АПи отправить/принять почту.
Подскажите простенький пример, пожалуйста!
Зараннее благодарен!


АртемК   (2005-11-16 21:15:00) [1]

Друг, спасибо.
Но выскакивает ошибка-error while trying to send email


WondeRu   (2005-11-16 10:21:00) [2]

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;


Наверх

Титульная страница Поиск, карта сайта Написать письмо