Delphi - 发送包含换行符的电子邮件

时间:2013-02-04 14:58:34

标签: delphi mailto

使用Delphi 2010,我正在尝试发送电子邮件,其中电子邮件的BODY需要是多行的。我不能让多线部分工作。我尝试插入#13,#10和'%0d'。它要么忽略并将所有内容打印为一行,要么我得到一个外部异常。

这是我的源代码。

  strEmail := 'address@domain.com';
  strSubject := 'Update Request: ';
  strBody := 'Line1 ' +#13 + 'Line 2';


  Param := 'mailto:' + strEmail + '?subject=' + strSubject + '&Body=' + strBody;
  Shellexecute(Main.Handle, 'open', PChar(Param), nil, nil, SW_SHOWNORMAL);

如何在电子邮件正文中的不同行上获取Line1和Line2?您可以假设唯一的电子邮件客户端将是Outlook。 (可以使用不同的版本。)

谢谢,

GS

3 个答案:

答案 0 :(得分:3)

根据mailto URL方案RFC 2368,您必须使用%0D%0A进行换行。有一个关于它的说明(删除双引号):

  

另请注意,必须对邮件正文中的换行符进行编码   %0D%0A。

答案 1 :(得分:1)

正如TLama所指出的,RFC需要回车和换行来断开电子邮件中的行。

将第三行修改为:

strBody := 'Line1 ' + #13#10 + 'Line 2';

任何时候我正在开发一个程序,它不仅可以轻松使用嵌入式回车和换行,还可以声明一个常量:

const
  CRFL = #13#10;

知道我应该在整个代码中使用常量而不是#13#10,这会减少我忘记某个部分或向后输入它们的可能性。

答案 2 :(得分:0)

添加

'Line1 ' + #13#10 + 'Line 2'

TidMessage.Body.Text的

也对我有用。 Outlook可以解决问题,只需将www更改为即使是纯文本的链接。

感谢Eric。 配合Indy 9使用Delphi 7很好。