2

使用 Delphi 2010,我正在尝试发送电子邮件的正文需要多行的电子邮件。我无法让多线部分工作。我尝试插入#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

4

3 回答 3

3

根据 mailto URL 方案RFC 2368,您必须使用%0D%0Afor 换行符。直接有一个关于它的注释(删除了双引号):

另请注意,消息正文中的换行符必须使用 %0D%0A 进行编码。

于 2013-02-04T15:02:10.527 回答
1

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

修改你的第三行阅读:

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

每当我在编写一个不仅仅使用嵌入式回车符和换行符的程序时,我都会声明一个常量:

const
  CRFL = #13#10;

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

于 2013-02-04T22:35:05.530 回答
0

添加

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

在 TidMessage.Body.Text 也为我工作。Outlook 完成了其余的工作,即使使用纯文本也将 www 更改为链接。

谢谢埃里克。使用 Indy 9 对 Delphi 7 很好。

于 2020-08-02T00:31:19.987 回答