Hi Joylon

No problem !

I usually use Indy to send emails but in this case I wanted to use the default email client. I HAVE found some MAPI code that seems to work! I am working through it now. Third time lucky :)

Code below for others (in its cut and paste format) ...

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} MAPI_DIALOG,
       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;


On 28/07/2016 4:00 PM, Jolyon Direnko-Smith wrote:
Ignore my previous response - it was just re-stating what you already learned. Sorry 'bout that.

As for alternatives, is there any reason you must use the default email client and cannot simply construct and send an email using (e.g.) Indy SMTP or IMAP components, suitably configured ?



On 28 July 2016 at 15:58, Jolyon Direnko-Smith <[email protected] <mailto:[email protected]>> wrote:

    The mailto URI scheme does not support attachments.

    https://tools.ietf.org/html/rfc6068

    Specific email clients may provide extensions to the URI scheme
    that allow that email client to support attachments via a mailto:
    URI but by definition these extensions will not be universally
    supported and so fail the test of "working with the user's default
    email client (whatever that may be)".

    On 28 July 2016 at 15:33, Robert Martin <[email protected]
    <mailto:[email protected]>> wrote:

        Hi All

        I am trying to open the default system email client with a new
        email
        (subject and attachment).  I know about MailTo but that
        doesn't support
        file attachments.  I have tried a couple of MAPI functions I
        got off the
        web but to no avail (one errors the other just runs and does
        nothing).
        Does anyone have code to do this?


        Cheers

        Rob


        _______________________________________________
        NZ Borland Developers Group - Delphi mailing list
        Post: [email protected]
        <mailto:[email protected]>
        Admin: http://delphi.org.nz/mailman/listinfo/delphi
        Unsubscribe: send an email to
        [email protected]
        <mailto:[email protected]> with Subject:
        unsubscribe






_______________________________________________
NZ Borland Developers Group - Delphi mailing list
Post: [email protected]
Admin: http://delphi.org.nz/mailman/listinfo/delphi
Unsubscribe: send an email to [email protected] with 
Subject: unsubscribe


No virus found in this message.
Checked by AVG - www.avg.com <http://www.avg.com>
Version: 2016.0.7690 / Virus Database: 4627/12695 - Release Date: 07/27/16


_______________________________________________
NZ Borland Developers Group - Delphi mailing list
Post: [email protected]
Admin: http://delphi.org.nz/mailman/listinfo/delphi
Unsubscribe: send an email to [email protected] with 
Subject: unsubscribe

Reply via email to