Using the code below I can generate an email but I would like to send it without any human intervention does anybody know how please
unit PromptMain;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, shellapi, mapi;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
function SendMailMAPI(const strSubject, strBody, strFileName, strSenderName, strSenderEMail,
strRecepientName, strRecepientEMail: ansiString) : Integer;
var
message: TMapiMessage; //changing string->ansiString, char to ansiChar pChar to pAnsiChar
lpSender,
lpRecepient: TMapiRecipDesc;
FileAttach: TMapiFileDesc;
SM: TFNMapiSendMail;
MAPIModule: HModule;
begin
FillChar(message, SizeOf(message), 0);
with message do
begin
if (strSubject<>'') then
begin
lpszSubject := pAnsiChar(strSubject)
end;
if (strBody<>'') then
begin
lpszNoteText := PAnsiChar(strBody)
end;
if (strSenderEMail<>'') then
begin
lpSender.ulRecipClass := MAPI_ORIG;
if (strSenderName='') then
begin
lpSender.lpszName := PAnsiChar(strSenderEMail)
end
else
begin
lpSender.lpszName := PAnsiChar(strSenderName)
end;
lpSender.lpszAddress := PAnsiChar('SMTP:'+strSenderEMail);
lpSender.ulReserved := 0;
lpSender.ulEIDSize := 0;
lpSender.lpEntryID := nil;
lpOriginator := @lpSender;
end;
if (strRecepientEMail<>'') then
begin
lpRecepient.ulRecipClass := MAPI_TO;
if (strRecepientName='') then
begin
lpRecepient.lpszName := PAnsiChar(strRecepientEMail)
end
else
begin
lpRecepient.lpszName := PAnsiChar(strRecepientName)
end;
lpRecepient.lpszAddress := PAnsiChar('SMTP:'+strRecepientEMail);
lpRecepient.ulReserved := 0;
lpRecepient.ulEIDSize := 0;
lpRecepient.lpEntryID := nil;
nRecipCount := 1;
lpRecips := @lpRecepient;
end
else
begin
lpRecips := nil
end;
if (strFileName='') then
begin
nFileCount := 0;
lpFiles := nil;
end
else
begin
FillChar(FileAttach, SizeOf(FileAttach), 0);
FileAttach.nPosition := Cardinal($FFFFFFFF);
FileAttach.lpszPathName := PAnsiChar(strFileName);
nFileCount := 1;
lpFiles := @FileAttach;
end;
end;
MAPIModule := LoadLibrary(pChar(MAPIDLL));
if MAPIModule=0 then
begin
Result := -1
end
else
begin
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
begin
Result := 1
end;
finally
FreeLibrary(MAPIModule);
end;
end;
if Result<>0 then
begin
MessageDlg('Error sending mail ('+IntToStr(Result)+').', mtError, [mbOk],
0)
end;
end;
////////////////////////////////////////////////////////////////////////////////
procedure TForm1.Button1Click(Sender: TObject);
var
strFileName,
strBody,
strRecepientName,
strRecepientEMail,
strSenderName,
strSenderEMail,
strSubject : string;
begin
strRecepientName := 'Chris';
strRecepientEMail := 'email address';
strSenderName := 'name';
strSenderEMail := 'email address';
strSubject := 'message';
strBody := 'generated by me';
SendMailMAPI(strSubject,strBody,strFileName,strSenderName,strSenderEMail,strRecepientName,strRecepientEMail);
end;
end.
Not very sure what you mean by user intervention, Are you trying to use MAPI without showing the dialog?
Then why not just use TIdSMTP component
Much simpler to use and there are no dialogs, message is just sent straight to server