Delphi 如何同时创建和显示任意长度的多封电子邮件?
我一直在使用ShellExecute使用Windows默认邮件客户端一次性生成5或6封电子邮件:Delphi 如何同时创建和显示任意长度的多封电子邮件?,delphi,mapi,shellexecute,Delphi,Mapi,Shellexecute,我一直在使用ShellExecute使用Windows默认邮件客户端一次性生成5或6封电子邮件: ShellExecute(Self.Handle, nil, Pchar(email), nil, nil, SW_NORMAL); 然后,这允许用户决定是否发送它们 我遇到的问题是,如果电子邮件正文太长,它会在创建的电子邮件中被截断。我认为这是以这种方式创建电子邮件的一个限制 我曾考虑过将生成电子邮件的方式改为使用MAPI,但我发现的问题是,我尝试过的所有MAPI例程或组件似乎都只允许我一次创建
ShellExecute(Self.Handle, nil, Pchar(email), nil, nil, SW_NORMAL);
然后,这允许用户决定是否发送它们
我遇到的问题是,如果电子邮件正文太长,它会在创建的电子邮件中被截断。我认为这是以这种方式创建电子邮件的一个限制
我曾考虑过将生成电子邮件的方式改为使用MAPI,但我发现的问题是,我尝试过的所有MAPI例程或组件似乎都只允许我一次创建一封电子邮件。最终用户必须在生成下一个之前决定是否发送
是否有解决ShellExecute长度问题的方法,或者是否有一种方法可以使用MAPI或其他方式一次性生成一批电子邮件?我想使用默认的Windows电子邮件客户端来删除邮件
我正在使用Delphi 7。我正在使用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;
希望它能对你有用
也检查一下这个帖子:这是我之前提出的建议(在现在删除的答案中),因为它不符合要求。(海报希望同时显示多个电子邮件合成窗口,以便用户可以阅读并决定是否发送它们。您使用的
MAPI
发送邮件功能会在每条邮件后暂停,直到窗口关闭为止,这不是问题所在。我还在最后一段中写下了您链接到的答案。)我认为你的方法很难。我会创建自己的对话框,显示一个电子邮件合成窗口,在那里显示建议的电子邮件以供批准(允许您同时显示任意数量的邮件),然后在用户单击“发送”按钮时使用MAPI发送每个邮件。从编程的角度来看,它大大简化了事情。@Ken谢谢,我最终采用了你的方法。
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;