Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    text
    copied!<p>I use two methods for sending a MAPI mail, depending on whether an attatchment is needed. For the simple case with no attachment I use the following:</p> <pre><code>function SendShellEmail( ARecipientEmail, ASubject, ABody : string ) : boolean; // Send an email to this recipient with a subject and a body var iResult : integer; S : string; begin If Trim(ARecipientEmail) = '' then ARecipientEmail := 'mail'; S := 'mailto:' + ARecipientEmail; S := S + '?subject=' + ASubject; If Trim(ABody) &lt;&gt; '' then S := S + '&amp;body=' + ABody; iResult := ShellExecute( Application.Handle,'open', PChar(S), nil, nil, SW_SHOWNORMAL); Result := iResult &gt; 0; end; </code></pre> <p>This uses a simple shell execute method, so you should not have any real problems other than the more recent alerts to get the User to confirm that they are ok with your program sending an email.</p> <p>For attatchments I use the following code originally taken from the Delphi Magazine by Brian Long. It is also possible to send an email WITHOUT using the MAPI client but using a nominated SMTP server but I think you explicitly do not want this. I can provide code for this if you do.</p> <pre><code>uses SysUtils, Windows, Dialogs, Forms, MAPI; procedure ArtMAPISendMail( const Subject, MessageText, MailFromName, MailFromAddress, MailToName, MailToAddress: String; const AttachmentFileNames: array of String); //Originally by Brian Long: The Delphi Magazine issue 60 - Delphi And Email var MAPIError: DWord; MapiMessage: TMapiMessage; Originator, Recipient: TMapiRecipDesc; Files, FilesTmp: PMapiFileDesc; FilesCount: Integer; begin FillChar(MapiMessage, Sizeof(TMapiMessage), 0); MapiMessage.lpszSubject := PAnsiChar(AnsiString(Subject)); MapiMessage.lpszNoteText := PAnsiChar(AnsiString(MessageText)); FillChar(Originator, Sizeof(TMapiRecipDesc), 0); Originator.lpszName := PAnsiChar(AnsiString(MailFromName)); Originator.lpszAddress := PAnsiChar(AnsiString(MailFromAddress)); // MapiMessage.lpOriginator := @Originator; MapiMessage.lpOriginator := nil; MapiMessage.nRecipCount := 1; FillChar(Recipient, Sizeof(TMapiRecipDesc), 0); Recipient.ulRecipClass := MAPI_TO; Recipient.lpszName := PAnsiChar(AnsiString(MailToName)); Recipient.lpszAddress := PAnsiChar(AnsiString(MailToAddress)); MapiMessage.lpRecips := @Recipient; MapiMessage.nFileCount := High(AttachmentFileNames) - Low(AttachmentFileNames) + 1; Files := AllocMem(SizeOf(TMapiFileDesc) * MapiMessage.nFileCount); MapiMessage.lpFiles := Files; FilesTmp := Files; for FilesCount := Low(AttachmentFileNames) to High(AttachmentFileNames) do begin FilesTmp.nPosition := $FFFFFFFF; FilesTmp.lpszPathName := PAnsiChar(AnsiString(AttachmentFileNames[FilesCount])); Inc(FilesTmp) end; try MAPIError := MapiSendMail( 0, Application.MainForm.Handle, MapiMessage, MAPI_LOGON_UI {or MAPI_NEW_SESSION}, 0); finally FreeMem(Files) end; case MAPIError of MAPI_E_AMBIGUOUS_RECIPIENT: Showmessage('A recipient matched more than one of the recipient descriptor structures and MAPI_DIALOG was not set. No message was sent.'); MAPI_E_ATTACHMENT_NOT_FOUND: Showmessage('The specified attachment was not found; no message was sent.'); MAPI_E_ATTACHMENT_OPEN_FAILURE: Showmessage('The specified attachment could not be opened; no message was sent.'); MAPI_E_BAD_RECIPTYPE: Showmessage('The type of a recipient was not MAPI_TO, MAPI_CC, or MAPI_BCC. No message was sent.'); MAPI_E_FAILURE: Showmessage('One or more unspecified errors occurred; no message was sent.'); MAPI_E_INSUFFICIENT_MEMORY: Showmessage('There was insufficient memory to proceed. No message was sent.'); MAPI_E_LOGIN_FAILURE: Showmessage('There was no default logon, and the user failed to log on successfully when the logon dialog box was displayed. No message was sent.'); MAPI_E_TEXT_TOO_LARGE: Showmessage('The text in the message was too large to sent; the message was not sent.'); MAPI_E_TOO_MANY_FILES: Showmessage('There were too many file attachments; no message was sent.'); MAPI_E_TOO_MANY_RECIPIENTS: Showmessage('There were too many recipients; no message was sent.'); MAPI_E_UNKNOWN_RECIPIENT: Showmessage('A recipient did not appear in the address list; no message was sent.'); MAPI_E_USER_ABORT: Showmessage('The user canceled the process; no message was sent.'); SUCCESS_SUCCESS: Showmessage('MAPISendMail successfully sent the message.'); else Showmessage('MAPISendMail failed with an unknown error code.'); end; end; </code></pre>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload