2

我使用以下代码发送带有 INDY 10 组件的电子邮件:

  try
    MyNewIndyMessage.From.Address := edFrom.Text;
    MyNewIndyMessage.Recipients.EMailAddresses := edTo.Text;
    MyNewIndyMessage.CCList.EMailAddresses := edCC.Text;
    MyNewIndyMessage.BCCList.EMailAddresses := edBCC.Text;
    MyNewIndyMessage.Subject := edSubject.Text;
    MyNewIndyMessage.Body := edContent.Lines;
    MyIndySMTP.Send(MyNewIndyMessage);
  finally
    MyIndySMTP.Disconnect;
  end;

Indy smtp 要求我在 Message.from.address 中输入一个有效的组织,例如 "myname@companyX.com" ,我想在这里输入和任意字符串,例如 "This mail is Emergency to read"。我可以绕过在我的 INDY SMTP 组件中完成的此类检查吗?

4

1 回答 1

5

根据 Internet 消息格式规范 (RFC 2822),发件人字段必须包含有效邮箱,通常为(第 3.4 节):

通常,邮箱由两部分组成:(1) 可选的显示名称,指示可以显示给邮件应用程序用户的收件人(可以是个人或系统)的名称,以及 (2)括在尖括号(“<”和“>”)中的 addr-spec 地址。还有另一种简单的邮箱形式,其中 addr-spec 地址单独出现,没有收件人姓名或尖括号。

这方面的一个例子可能是这样的:

John Doe <john.doe@example.com>

正如暗示的那样,邮件客户端通常显示(可选)名称属性(如果存在),如果名称不存在,则显示地址本身。

在 INDY 术语中,TIdEMailAddressItem 具有三个始终同步的属性:

  • Address是邮箱的地址规范部分,例如:john.doe@example.com
  • Name是邮箱的名称部分,例如:John Doe
  • Text有两个部分,例如:John Doe <john.doe@example.com>

您可以更改其中一个,其他的将反映相同的更改。

因此,您可以通过直接设置 Text 属性来做您想做的事情,如下所示:

MyNewIndyMessage.From.Text := 'This mail is urgent to read <myname@companyX.com>';

或者您可能希望分别设置每一项:

MyNewIndyMessage.From.Address := 'myname@companyX.com';
MyNewIndyMessage.From.Name := 'This mail is urgent to read';

综上所述,您可能希望使用该名称作为主题(以及更多信息),而不是真正的名称,但这取决于您。

于 2013-01-28T00:02:08.430 回答