Ali*_*xel 16 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 blind
* copy email only at the destination email server.
*
* @param string $email
* @param string $name
* @return object Email
*/
Run Code Online (Sandbox Code Playgroud)
我不记得从哪里得到它(可能的来源),但这不应该与这个问题相关.基本上,每当我尝试通过SMTP发送带有BCC的电子邮件时,BCC地址都不会被隐藏 - 我已经阅读了整个RFC的SMTP协议(几年前),我认为我什么都没有丢失.
奇怪的是,如果我使用内置mail()函数向BCC发送电子邮件,一切正常,我不知道为什么 - 我想推送自己的电子邮件发件人,但我不明白这一点.
有人可以对这个黑暗的主题有所了解吗?
Amr*_*mry 37
BCC地址不会在目标电子邮件服务器上剥离.这不是它的工作原理.
RCPT TOSMTP服务器发送一个命令列表,每个接收方电子邮件地址一个,此命令不区分接收方是普通的To,CC还是BCC类型的接收方.DATA命令后,发件人才会调用该命令,其中包含电子邮件的内容 - 包括电子邮件标题和正文 - 电子邮件客户端收到的那个.在这些电子邮件标题中,通常是从地址到地址,CC地址.DATA命令下打印出来,不是因为目标SMTP服务器将它们剥离了.目标SMTP服务器将仅引用RCPT TO应接收电子邮件内容的电子邮件地址列表.它并不关心接收器是否在To,CC或BCC列表中.RCPT TO命令列表,但BCC头应该不会下进行打印DATA命令.引用我认为与您的案例相关的RFC的一部分:
请注意,邮件数据包括备注标题项,如日期,主题,收件人,抄送,来自[2].
几年前,我坦率地认为,假设您仍然记住RFC 821的端到端,还有很长一段时间.:)
EML*_*EML 17
很晚,但接受的答案本质上是错误的.
首先,SMTP与之无关BCC.SMTP作为协议,仅涉及返回路径(MAIL请求),收件人列表(RCPT请求)和要传输的数据(DATA请求).如果您想通过SMTP向某人发送电子邮件,则必须在RCPT请求期间提供其地址.
电子邮件的内容 - DATA有效 - 在RFC2822中完全单独指定.BCC应该如何处理有很多自由.该规范提供了3种处理方式,BCC其中只有一种是BCC在准备电子邮件时被删除的.例如,如果我将Thunderbird用作电子邮件客户端,并将其指向SMTP服务器,然后查看该行上的消息,那么我发现Thunderbird BCC已经消失(来自SMTP DATA),而SMTP连接则包含'ed地址的标准RCPT请求bcc.所以,Thunderbird转换BCC为RCPT,但这不是唯一的方法.
另一个需要处理的地方BCC是MTA - 换句话说,就是你的邮件客户端指向的任何SMTP服务器.Sendmail的,例如,搜索所有的To,Cc和Bcc在SMTP线DATA,然后从构建这些行的地址列表,然后删除该Bcc行.你可以说服Sendmail保留Bcc你想要的.如果sendmail不是目标MTA,则它将通过SMTP连接到另一个MTA,并通过发送收件人地址RCPT.换句话说,如果sendmail 是目标MTA,它会得到一个Bcc,它会将其删除,这与Amry的声明相反.
评论中也存在一些混淆.您可以RCPT为任何域指定地址,而不仅仅是同一域中的地址列表.MTA必须查找目标域的MX记录,以确定发送所有内容的位置.google.com和yahoo.com的陈述是错误的.
| 归档时间: |
|
| 查看次数: |
30480 次 |
| 最近记录: |