If you’ve ever wondered how to use TSendMail action in ExtActns unit – drop it, it’s useless. I’ve had a few people complaining they don’t know how to set the Recipients and Subject set it – you can’t do it 🙂
Let’s look at the source code for the TSendMail.ExecuteTarget method:
First:
lpszSubject := nil; lpszNoteText := PAnsiChar(AnsiString(Text.Text)); lpszMessageType := nil; lpszDateReceived := nil; lpszConversationID := nil;
and then:
MError := MapiSendMail(0, Application.Handle, MapiMessage, MAPI_DIALOG or MAPI_LOGON_UI or MAPI_NEW_SESSION, 0); if MError <> 0 then MessageDlg(SSendError, mtError, [mbOK], 0);
Three problems with this code:
- First it has no support for Subject and Recipients/CC and related.
- If the user closes the “Send mail window” of his mail client, a message box will pop up – and you can’t do anything about it!
- The text is converted to ANSI so no Unicode support for you email.
The first problem can be solved rather simply by the VCL developers but I think it’s not top priority anyway.
For the second problem it should at least have been an event like OnMailResult with a Boolean that would say – MessageWasSent so that you, the developer would have the control of what you would do in case of failure/cancel.
Anyway, let’s hope the VCL gets cleaned up a bit in the next years and such controls are removed or updated to actually be useful to someone.