Link to home
Start Free TrialLog in
Avatar of CtexAndy
CtexAndyFlag for United Kingdom of Great Britain and Northern Ireland

asked on

delphi 2010 and mapi auto send

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.
Avatar of pasolo
pasolo

As far as I notice all human intervention you have is click the button.
But you can make it self click by calling Button1Click(self) from another method.
ASKER CERTIFIED SOLUTION
Avatar of Ephraim Wangoya
Ephraim Wangoya
Flag of United States of America image

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
Avatar of CtexAndy

ASKER

thanks ewangoya: top tip it works a treat using TIdSMTP. MAPI started outlook and required a send button press to work but this solution talks direct to the mail server.