Delphi: 使用Outlook发送带有多个附件的电子邮件

3

Hello all experts,

procedure TForm1.domail(Sender: TObject; fromname, fromadd, sub, toadd, thedocdone, theacc: string; body: widestring);
const
  olMailItem = 0;
var
  Outlook: OLEVariant;
  vmailitem: variant;
  Attachment: TIdAttachment;
  savetofol: string;
begin
  try
    Outlook := GetActiveOleObject('Outlook.Application');
  except
    Outlook := CreateOleObject('Outlook.Application');
  end;
  vmailitem := Outlook.CreateItem(olMailItem);
  vmailitem.Recipients.Add(toadd);
  vmailitem.ReplyRecipients.Add('email@email.com');
  vmailitem.Subject := sub;
  vmailitem.body := 'SENT: ' + formatdatetime('dd mmmm yyyy - hh:nn am/pm', now) + #13#10 + body;
  vmailitem.ReadReceiptRequested := true;
  vmailitem.importance := 2;
  if thedocdone <> 'NIL' then
  begin
    vmailitem.Attachments.Add(thedocdone, 1, 1, 'SBSA_' + theacc);
    if ansipos('string1', lowercase(toadd)) <> 0 then
    begin
      vmailitem.Attachments.Add('*manual path', 1, 2, '*manual name');
      Memo1.Lines.Add('Adding consent letter to mail...');
    end;
    if ansipos('string2', lowercase(toadd)) <> 0 then
    begin
      vmailitem.Attachments.Add('*manual path', 1, 2, '*manual name');
      Memo1.Lines.Add('Adding consent letter to mail...');
    end;
    savetofol := extractfilepath(thedocdone) + copy(extractfilename(thedocdone), 0, length(extractfilename(thedocdone)) - 8);
    vmailitem.saveas(savetofol + '_eml.doc', 4); // ^ +'.doc'
  end;
  // vmailitem.clear;
  vmailitem.Send;
  Outlook := Unassigned;
end;

使用上述代码,我可以连接到Outlook并发送电子邮件,并将附件附加到该邮件中...
我的问题是它不能附加第二个附件...??? 我尝试了各种不同的方法来做到这一点,但我无法让第二个附件附加到邮件中...
请帮忙解决这个问题...

为什么要使用Outlook?直接在程序中创建电子邮件并发送不是更容易吗? - Arioch 'The
它是什么意思“它不会附加”?它给你什么错误异常? 你是否确保使用不同的附件名称?您是否确保使用Outlook不认为危险的文件格式/文件名扩展名?#2和#3附件是否都具有相同的“1、2”索引? - Arioch 'The
1 我需要使用Outlook,以便Outlook中的那个帐户有一个记录。 2 没有错误,只是第二个附件没有被附加。 3 是的,它们是不同的文件名。 4 是的,它们是被附加的PDF文件。 5 #2 #3 是不同的PDF文件。如果是string1,则附加#2;如果是string2,则附加#3。#2#3永远不会同时被附加。 - Troz
好吧,你一定在开玩笑吧... 当我刚刚输入完评论时,我正在尝试使用从https://msdn.microsoft.com/en-us/library/office/ff864730.aspx获取的信息对我的程序进行另一个想法,该网站建议在每个附件后使用.save...现在它可以工作了,所以还是谢谢你... - Troz
很高兴它起作用了。嗯,我刚刚观察到您丢失了 Attachments.Add 返回的值。就在两天前,我也面临了类似的任务,所以我最终从程序中生成并发送邮件。日志记录是由一个特殊的只读邮箱完成的,我的程序将每封信都密送给它。 - Arioch 'The
1个回答

2
请参见Outlook 中的附件对象

为确保结果一致,请在向项的附件集合添加或删除对象之前始终保存该项。

错误示例:

vmailitem.Attachments.Add();
vmailitem.Attachments.Add();
vmailitem.Attachments.Add();

正确的:

vmailitem.Attachments.Add();
vmailitem.save;
vmailitem.Attachments.Add();
vmailitem.save;
vmailitem.Attachments.Add();
vmailitem.save;

你能否在你的回答中添加一些更多的信息?http://stackoverflow.com/help/how-to-answer - Rich Benner

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接