[DUG] Open new email in default browser

Jolyon Direnko-Smith jsmith at deltics.co.nz
Thu Jul 28 16:40:07 NZST 2016


It's been years since I even looked at MAPI but I always thought it was an
MS/Outlook/Exchange technology.  O.o

What happens these days to an app sending mail using MAPI if a user is not
using Outlook / Exchange ?

On 28 July 2016 at 16:10, Robert Martin <rob at chreos.co.nz> wrote:

> 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 <jsmith at deltics.co.nz>
> 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 <rob at chreos.co.nz> 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: delphi at listserver.123.net.nz
>>> Admin: http://delphi.org.nz/mailman/listinfo/delphi
>>> Unsubscribe: send an email to delphi-request at listserver.123.net.nz with
>>> Subject: unsubscribe
>>>
>>>
>>>
>>
>
>
> _______________________________________________
> NZ Borland Developers Group - Delphi mailing list
> Post: delphi at listserver.123.net.nz
> Admin: http://delphi.org.nz/mailman/listinfo/delphi
> Unsubscribe: send an email to delphi-request at listserver.123.net.nz with Subject: unsubscribe
>
>
>
> No virus found in this message.
> Checked by AVG - www.avg.com
> Version: 2016.0.7690 / Virus Database: 4627/12695 - Release Date: 07/27/16
>
>
>
> _______________________________________________
> NZ Borland Developers Group - Delphi mailing list
> Post: delphi at listserver.123.net.nz
> Admin: http://delphi.org.nz/mailman/listinfo/delphi
> Unsubscribe: send an email to delphi-request at listserver.123.net.nz with
> Subject: unsubscribe
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://listserver.123.net.nz/pipermail/delphi/attachments/20160728/24f633e0/attachment-0001.html 


More information about the Delphi mailing list