DelphiFAQ Home Search:
General :: Programming :: Delphi :: Network
Network (local network and Internet) programming under Windows with Delphi.

Articles:

This list is sorted by recent document popularity (not total page views).
New documents will first appear at the bottom.

Featured Article

Sending an email from Delphi using MAPI

If you do not want to rely on Outlook to send an email but you know that MAPI is installed, then you can also send mails with the following handy routine SendMailMAPI(). You need to add unit MAPI to your uses clause.

Note that MAPI is not always installed with Windows.

Thanks to Sven Sonderegger for improving the code with the 'SMTP:' prefix.

program MAPIMail;
 
 uses
   MAPI;
 
 function SendMailMAPI(const Subject, Body, FileName, SenderName, SenderEMail,
                   RecepientName, RecepientEMail: String) : Integer;
 var
   message: TMapiMessage;
   lpSender,
   lpRecepient: TMapiRecipDesc;
   FileAttach: TMapiFileDesc;
   SM: TFNMapiSendMail;
   MAPIModule: HModule;
 begin
   FillChar(message, SizeOf(message), 0);
   with message do
   begin
     if (Subject<>'') then
     begin
       lpszSubject := PChar(Subject)
     end;
     if (Body<>'') then
     begin
       lpszNoteText := PChar(Body)
     end;
     if (SenderEMail<>'') then
     begin
       lpSender.ulRecipClass := MAPI_ORIG;
       if (SenderName='') then
       begin
         lpSender.lpszName := PChar(SenderEMail)
       end
       else
       begin
         lpSender.lpszName := PChar(SenderName)
       end;
       lpSender.lpszAddress := PChar('SMTP:'+SenderEMail);
       lpSender.ulReserved := 0;
       lpSender.ulEIDSize := 0;
       lpSender.lpEntryID := nil;
       lpOriginator := @lpSender;
     end;
     if (RecepientEMail<>'') then
     begin
       lpRecepient.ulRecipClass := MAPI_TO;
       if (RecepientName='') then
       begin
         lpRecepient.lpszName := PChar(RecepientEMail)
       end
       else
       begin
         lpRecepient.lpszName := PChar(RecepientName)
       end;
       lpRecepient.lpszAddress := PChar('SMTP:'+RecepientEMail);
       lpRecepient.ulReserved := 0;
       lpRecepient.ulEIDSize := 0;
       lpRecepient.lpEntryID := nil;
       nRecipCount := 1;
       lpRecips := @lpRecepient;
     end
     else
     begin
       lpRecips := nil
     end;
     if (FileName='') then
     begin
       nFileCount := 0;
       lpFiles := nil;
     end
     else
     begin
       FillChar(FileAttach, SizeOf(FileAttach), 0);
       FileAttach.nPosition := Cardinal($FFFFFFFF);
       FileAttach.lpszPathName := PChar(FileName);
       nFileCount := 1;
       lpFiles := @FileAttach;
     end;
   end;
   MAPIModule := LoadLibrary(PChar(MAPIDLL));
   if MAPIModule=0 then
   begin
     Result := -1
   end
   else
   begin
     try
       @SM := GetProcAddress(MAPIModule, 'MAPISendMail');
       if @SM<>nil then
       begin
         Result := SM(0, Application.Handle, message, MAPI_DIALOG or
                      MAPI_LOGON_UI, 0);
       end
       else
       begin
         Result := 1
       end;
 
     finally
       FreeLibrary(MAPIModule);
     end;
   end
   if Result<>0 then
   begin
     MessageDlg('Error sending mail ('+IntToStr(Result)+').', mtError, [mbOk],
                0)
   end;
 end;
 
 begin
 
 end.
You don't like the formatting? Check out SourceCoder then!
Generated 20:01:18 on Apr 24, 2018