0

私は ShellExecute を使用して、Windows の既定のメール クライアントを使用して一度に 5 つか 6 つの電子メールを生成しています。

ShellExecute(Self.Handle, nil, Pchar(email), nil, nil, SW_NORMAL);

これにより、ユーザーはそれらを送信するかどうかを決定できます。

私が抱えている問題は、メール本文のテキストが長すぎると、作成されたメールで切り捨てられることです。これは、この方法でメールを作成する際の制限であると思います。

代わりに MAPI を使用して電子メールを生成する方法を切り替えることを検討しましたが、私が見つけた問題は、私が試したすべての MAPI ルーチンまたはコンポーネントで、一度に 1 つの電子メールしか作成できないように見えることです。エンド ユーザーは、次のメッセージが生成される前に、それを送信するかどうかを決定する必要があります。

ShellExecute の長さの問題に対する修正はありますか、それとも MAPI または別の方法を使用して一度に電子メールのバッチを生成する方法はありますか? デフォルトの Windows 電子メール クライアントを使用してメッセージを表示したいと考えています。

Delphi 7 を使用しています。

4

1 に答える 1

0

JclMapi.pas を使用して、MAPI を使用して電子メールを送信しています。TJclEmail クラスを使いやすくするためのクラスを作成しました。

メールを送信するコードは次のとおりです。

class function TMAPISendMail.Execute(const Name, EmailTo, Subject, Body: string; Attachment: TStrings): boolean;
var
  I: Integer;
  Email: string;
  MAPISendMail: TMAPISendMail;
begin
  MAPISendMail:= TMAPISendMail.Create;
  try
    I:= 1;
    while I > 0 do
    begin
      Email:= TString.Token(EmailTo, ';', I);
      if Email <> '' then
        MAPISendMail.AddRecipient(Email, Name);
    end;
    for I := 0 to Attachment.Count - 1 do
      MAPISendMail.AddAttachment(Attachment[I]);
    MAPISendMail.MailSubject:= Subject;
    MAPISendMail.HTMLBody:= False;
    MAPISendMail.MailBody:= Body;
    Result:= MAPISendMail.SendMail;
  finally
    MAPISendMail.Free;
  end;
end;

クラスインターフェースは次のとおりです。

 TMAPISendMail = class
  private
    FAJclEmail: TJclEmail;
    FPrerequisites: TPrerequisites;
    FResolveNames: Boolean;
    FShowDialog: Boolean;
    [...]
  protected
    function DoSendMail: Boolean; virtual;
  public
    constructor Create;
    destructor Destroy; override;
    class function Execute(const Name, EmailTo, Subject, Body: string; Attachment: TStrings): boolean; static;
    property MailBody: string read GetMailBody write SetMailBody;
    property HTMLBody: Boolean read GetHTMLBody write SetHTMLBody;
    property ShowDialog: Boolean read FShowDialog write FShowDialog;
    property MailSubject: string read GetMailSubject write SetMailSubject;
    property ResolveNames: Boolean read FResolveNames write FResolveNames;
    property Prerequisites: TPrerequisites read FPrerequisites;
    procedure AddRecipient(const Address: string; const Name: string = '');
    procedure AddAttachment(const FileName: string);
    function SendMail: Boolean;
  end;

お役に立てば幸いです。

このスレッドもチェックしてください: Sending Email with signature

于 2012-06-22T01:14:23.457 に答える