繁体   English   中英

在PHP中处理对多个收件人的传入邮件

[英]Handling Incoming Mail to Multiple Recipients in PHP

好吧,这可能需要一两个时间来解释:

我正在努力创建一个电子邮件<> SMS Bridge(如Teleflip)。 我有一些设置参数可供使用:

  • Dreamhost虚拟主机
  • PHP 5(不含PEAR)
  • 后缀
  • MySQL(如果需要)

我现在拥有的是一个包罗万象的电子邮件地址,用于转发发送到shell帐户的电子邮件。 shell帐户又将它转发到我的PHP脚本。

PHP脚本读取它,剥离一些电子邮件标题以确保它正确发送,然后将其转发到指定为收件人的数字。 5551234567@sms.bridge.gvoms.com当然会发送短信至+1(555)123-4567。

这非常有效,因为我正在解析To字段并只抓取它发送到的电子邮件地址。 但是,我意识到我没有考虑的是多个收件人。 例如,发送到5551234567和1235554567的电子邮件(使用“收件人”行,“抄送”行或其中任何组合)。

当然,电子邮件的工作方式是收到两封电子邮件,最后分别解析每封电子邮件,5551234567最终获得两次相同的邮件。

处理这种情况的最佳方法是什么,以便TO和CC中指定的每个数字都可以获得一个消息副本。

此外,虽然我怀疑它的可能性:有没有办法以同样的方式处理BCC?

如果检查邮件的标题,则应找到Message-ID字段(根据RFC2822 - 第3.6.4节 )。 因此,您可以测试是否已经为具有相同消息ID和电话号码的邮件发送了SMS,以防止将相同的消息发送到同一个号码两次。

为什么不使用像imap这样的东西来检查catch-all邮箱,遍历消息然后在完成后删除它们? 这样您就不需要将它们转发到单独的帐户。

愚蠢的脏解决方案:解析邮件中的所有收件人,然后发送短信,然后将em全部放入临时表中,并使用md5的邮件文本。 并根据此表检查所有传入的邮件。

尽管wimvds在这里得到了最好的答案,但我在其他地方发现,Dreamhost在我通过系统运行它的方式中包含了一个“X-DH-Original-To”标题。 使用此功能,我可以在收到电子邮件时单独发送给每个号码,而无需针对数据库进行检查。 这也适用于Blind Carbon Copy(我不知道电子邮件如何工作的细节足以告诉你它是如何工作的)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM