【问题标题】:Sending mail with INDY/DELPHI , modify values without restrictions使用 INDY/DELPHI 发送邮件,修改值不受限制
【发布时间】:2013-01-28 14:09:44
【问题描述】:

我正在发送带有 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 组件中完成的此类检查吗?

【问题讨论】:

  • 没有。如果可以的话,你不应该这样做;大多数邮件服务器无论如何都会拒绝您的邮件,大多数垃圾邮件拦截软件也会阻止它。
  • From.Address 必须包含有效的邮件地址,但 From.Name 可以包含您喜欢的任何内容;o)

标签: delphi indy


【解决方案1】:

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

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

一个例子可能是这样的:

John Doe <john.doe@example.com>

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

在 INDY 术语中,TIdEMailAddressItem 具有三个属性,它们始终保持同步:

  • Address是邮箱的address-spec部分,例如:john.doe@example.com
  • Name是邮箱的名称部分,例如:John Doe
  • Text 有两个部分,例如:John Doe &lt;john.doe@example.com&gt;

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

所以,你可以通过直接设置 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';

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

【讨论】:

  • @Remy 感谢您的编辑,我没有注意到我越过了地址/名称,并且地址在文本部分丢失了!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-04-08
  • 1970-01-01
  • 2018-03-12
  • 1970-01-01
  • 2019-08-25
  • 1970-01-01
相关资源
最近更新 更多