Php 使用SMTP服务器发送密件抄送电子邮件?
我已经在我的一些代码中记录了一段时间:Php 使用SMTP服务器发送密件抄送电子邮件?,php,email,smtp,bcc,Php,Email,Smtp,Bcc,我已经在我的一些代码中记录了一段时间: /** * Add a BCC. * * Note that according to the conventions of the SMTP protocol all * addresses, including BCC addresses, are included in every email as it * is sent over the Internet. The BCC addresses are stripped off blin
/**
* Add a BCC.
*
* Note that according to the conventions of the SMTP protocol all
* addresses, including BCC addresses, are included in every email as it
* is sent over the Internet. The BCC addresses are stripped off blind
* copy email only at the destination email server.
*
* @param string $email
* @param string $name
* @return object Email
*/
我不记得是从哪里得到的(),但这与这个问题无关。基本上,每当我尝试通过SMTP发送带有密件抄送的电子邮件时,密件抄送地址都不会隐藏——我已经阅读了SMTP协议的全部RFC(几年前),我不认为我遗漏了任何内容
奇怪的是,如果我使用与密件抄送系统发送电子邮件,一切正常,我不知道为什么-我想滚动我自己的电子邮件发件人,但我无法理解这一点
有人能解释一下这个黑暗的主题吗?目标电子邮件服务器上的密件抄送地址没有被删除。这不是它的工作原理 SMTP的实际工作原理
- 发件人将向SMTP服务器发送
命令列表,每个收件人电子邮件地址一个,此命令不区分收件人是普通收件人、抄送还是密件抄送类型的收件人RCPT TO
- 在调用告诉SMTP服务器谁是发件人、谁是服务器以及其他所有内容的命令后不久,只有发件人才会调用
命令,其中包含电子邮件的内容(包括电子邮件标题和正文),即电子邮件客户端接收到的内容。在这些电子邮件标题中,通常有“发件人地址”、“收件人地址”和“抄送地址”DATA
- 密件抄送地址没有显示给接收者,只是因为它没有在
命令下打印出来,而不是因为目标SMTP服务器将其剥离。目标SMTP服务器将只参考DATA
以获取应接收电子邮件内容的电子邮件地址列表。它并不真正关心接收方是否在To、CC或BCC列表中。RCPT to
更新(澄清):密件抄送电子邮件地址必须列在
命令列表中,但密件抄送头不应在RCPT to
命令下打印数据
坦白地说,我认为,几年前,假设你仍能背诵一首又一首歌,那是相当长的一段时间了。:) 很晚了,但公认的答案基本上是错误的 首先,SMTP与密件抄送无关。SMTP作为一种协议,只涉及返回路径(邮件
请求)、收件人列表(RCPT请求)和要传输的数据(数据请求)。如果你想通过SMTP向某人发送电子邮件,那么你必须在RCPT
请求期间提供他们的地址
电子邮件的内容(有效的数据
)在中完全单独指定。如何处理BCC
有很大的自由度。规范给出了3种处理BCC
的方法,其中只有一种是在准备电子邮件时去掉的BCC
。例如,如果我将Thunderbird用作电子邮件客户端,并将其指向SMTP服务器,然后查看线路上的邮件,则我发现ThunderbirdBCC
已经消失(来自SMTP数据
),SMTP连接反而包含一个标准的RCPT
请求BCC
”加密地址。因此,雷鸟将BCC
转换为RCPT
,但这不是唯一的方法
另一个处理密件抄送的地方是MTA,也就是说,邮件客户端指向的SMTP服务器。例如,Sendmail搜索SMTP数据
中的所有至
、抄送
和密件抄送
行,然后从这些行构造地址列表,然后删除密件抄送
行。如果愿意,您可以说服Sendmail保留Bcc
。如果sendmail不是目标MTA,则它将通过SMTP连接到另一个MTA,并通过RCPT
发送收件人地址。换句话说,如果sendmail是目标MTA,并且它获得了一个Bcc
,那么它将删除它,这与安利的声明相反
评论中也有一些混乱。您可以为任何域指定RCPT
地址,而不仅仅是同一域中的地址列表。MTA必须查找目标域的MX记录,以确定将所有内容发送到何处。google.com和yahoo.com的声明是错误的。如果不在重复使用同一连接的同时发送单独的消息,我从来没有成功地做到过。即使你让BCC工作(这取决于远程MTA写得多好),像Hotmail这样的服务也只是考虑它的垃圾邮件。我本想回答这个问题,但它并没有完全回答你的问题。。我也对一些有用的东西感兴趣。@Tim Post:谢谢你的评论,这也是我对当前实现所做的。。。我希望有人能想出一个解决方案,或者至少能解释为什么会发生这种情况。请注意,我所说的“成功”是指“在任何地方都能工作”,而不是“在谷歌上工作,但在foomail上不太有效”。有缺陷的远程MTA至少是它崩溃的部分原因(或者更确切地说,是它们使用的解析器)。+1用于滚动您自己的电子邮件发件人。MTA就像Hotmail一样,似乎很在意,但我想我们对此无能为力:)啊,如果是这样的话,那么我真的不知道。就我个人而言,我没有任何真实世界的工作原型,我自己的电子邮件发件人。2002年,当我在大学里研究这个SMTP作为我课程的一部分时,我只是简单地想起了一点我的实现就是这么做的,我没有记住RFC 821——我只是记住我做得对(花了3天时间测试和调试一个缺失的点)。@Alix:I