Scalabium Software |
|
Knowledge for your independence'. | |
Home Delphi and C++Builder tips |
#115: How can I create an email message using MAPI? |
|
Few months ago I posted a code sample for email sending using MS Outlook as OLE-object. Today I want to post a tip for email sending using MAPI. Using MAPI you can control the default mailer whcih was installed in MS Windows - MS Outlook, MS Outlook Express, Lotus, Netscape etc The SendMail procedure (view below) can be used in any your project - just call with parameteres: function SendMail(const Subject, Body, FileName, SenderName, SenderEMail, RecipientName, RecipientEMail: string): Integer; var Message: TMapiMessage; lpSender, lpRecipient: TMapiRecipDesc; FileAttach: TMapiFileDesc; SM: TFNMapiSendMail; MAPIModule: HModule; begin FillChar(Message, SizeOf(Message), 0); with Message do begin if (Subject <> '') then lpszSubject := PChar(Subject); if (Body <> '') then lpszNoteText := PChar(Body); if (SenderEmail <> '') then begin lpSender.ulRecipClass := MAPI_ORIG; if (SenderName = '') then lpSender.lpszName := PChar(SenderEMail) else lpSender.lpszName := PChar(SenderName); lpSender.lpszAddress := PChar(SenderEmail); lpSender.ulReserved := 0; lpSender.ulEIDSize := 0; lpSender.lpEntryID := nil; lpOriginator := @lpSender; end; if (RecipientEmail <> '') then begin lpRecipient.ulRecipClass := MAPI_TO; if (RecipientName = '') then lpRecipient.lpszName := PChar(RecipientEMail) else lpRecipient.lpszName := PChar(RecipientName); lpRecipient.lpszAddress := PChar(RecipientEmail); lpRecipient.ulReserved := 0; lpRecipient.ulEIDSize := 0; lpRecipient.lpEntryID := nil; nRecipCount := 1; lpRecips := @lpRecipient; end else lpRecips := nil; 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 Result := -1 else 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 Result := 1; finally FreeLibrary(MAPIModule); end; if Result <> 0 then MessageDlg('Error sending mail (' + IntToStr(Result) + ').', mtError, [mbOK], 0); end; PS: you must add the MAPI unit in USES-clause. To execute this procedure: procedure TForm1.Button1Click(Sender: TObject); begin SendMail('Re: mailing from Delphi', 'Welcome to http://www.scalabium.com'#13#10'Mike Shkolnik', 'c:\autoexec.bat', 'your name', 'your@address.com', 'Mike Shkolnik', 'mshkolnik@scalabium.com'); end; Of course, the any parameter of this procedure can be empty.
|
Copyright© 1998-2024, Scalabium
Software. All rights reserved. |