使用签名发送电子邮件

时间:2012-06-12 17:34:50

标签: delphi email shell

我一直在使用:

        ShellExecute(Self.Handle,
            nil, PCHAR(format('mailto:%s ?Subject=Assunto: &Body=',[_lEmails ])),
            nil,
            nil,
            SW_NORMAL);

发送电子邮件。 没有正文文本,因此在其电子邮件客户端中具有自动签名的用户会自动获得这些签名。

现在我想让用户也能插入文本,但如果他们这样做,文本就会到达,但没有签名。 有没有办法“强迫”这个。

由于

2 个答案:

答案 0 :(得分:4)

您可以使用MAPI代替(Messaging Applications Programming Interface),这样可以更好地控制电子邮件,并允许附件等内容。您还可以选择是否显示用户的电子邮件客户端"撰写"窗口或直接添加到发件箱。 (由于Windows安全性的更改,特别是在涉及MS Outlook的情况下,现在通常会限制发件箱功能。)

最快捷,最简单的方法是使用JEDI Code Library JCLEMail之类的内容。它是SimpleMAPI的包装器,它非常简单(代码来自旧的应用程序,并基于JCL演示中的示例):

EMail := TJclEMail.Create;
try
  EMail.Recipients.Add(AnsiString(EMailAddress), AnsiString(EMailName));
  EMail.Subject := AnsiString(Subject);
  EMail.Body := AnsiString(Body);
  EMail.HtmlBody := False;  // True if it's HTML email

  // Send attachment if wanted
  EMail.Attachments.Add(AnsiString(FileName));
  EMail.Send(True);   // True to show default email, false to add to outbox
finally
  EMail.Free;
end;

SimpleMAPI的缺点是它可能是一个短期解决方案(尽管它仍然存在于Win7 64位及更早版本中,但我无法代表Windows 8)。根据{{​​3}},

  

[不鼓励使用简单MAPI。它可能会在后续版本的Windows中被更改或不可用。]

MAPI的缺点是它依赖于正在安装的MAPI客户端。幸运的是,几乎所有支持mailto的软件都应支持MAPI;例如,Outlook确实如此,Mozilla Thunderbird也是如此。

答案 1 :(得分:2)

确保出现默认签名(如果这是问题的关键,如果不是抱歉,我误读了),那么看起来你可能运气不好(因为我一直试图这样做)。

以下MS文章似乎说“不”。它似乎意味着,到2010年的Outlook版本在通过MAPI创建电子邮件时不会支持默认的电子邮件签名。它似乎没有提供太多理由,并建议你只需在电子邮件对话框中使用“插入签名”选项(对我来说,当你可能希望它默认时,这可能是一个真正的帮助,也许对于电子邮件只是“没有用户干预”。

http://support.microsoft.com/kb/2544665