PHP - 批量邮寄和检查服务器响应
Posted
技术标签:
【中文标题】PHP - 批量邮寄和检查服务器响应【英文标题】:PHP - Bulk mailing and checking for server responses 【发布时间】:2011-09-28 15:39:16 【问题描述】:我们向很多用户发送大量电子邮件(每天 20k+)。我们面临的主要问题之一是无效或无效的电子邮件 - 有时我们的用户会删除他们的帐户、更改他们的电子邮件地址而不更新他们的个人资料,或者我们的电子邮件数据库构建器只是捕获了无效或不再有效的电子邮件。这些未解决的返回状态消息不仅堆积在我们的网站管理员帐户上,而且还浪费了宝贵的服务器资源,并且由于反复尝试而更频繁地将我们标记为垃圾邮件。
现在,虽然我们的邮件服务器设置为继续尝试向返回“暂时不可用”的地址发送电子邮件,但我希望能够在发送后立即将状态消息接收到 php 中。例如,当我的 Sender 类发送一封电子邮件时,我想知道返回的状态消息 - 电子邮件不再处于活动状态,或者服务器不存在,或者电子邮件只是移动到另一个地址。
当然,我也希望能够收到延迟电子邮件的状态消息。因此,如果由于收件人电子邮件地址暂时不可用而未发送电子邮件,我希望将“暂时不可用”消息返回到 Php,但我也希望在发送成功后将真正的消息传回(例如例如,如果电子邮件确实在 2 天后通过)。
是否有图书馆可以帮助我实现这一目标?解决此问题的最常见方法是什么?
【问题讨论】:
【参考方案1】:像大多数关于 PHP 和邮件的问题一样,这主要是关于 MTA。
群发电子邮件本身就是一门科学(好吧,这更像是一门魔法),如果您想要合理的送达率,就需要大大提高您的游戏水平。
但回到问题。
其中很大一部分与您如何配置邮件服务器有关。 AFAIK,大多数 MTA 只会在消息从队列中删除时(例如,在最后一次传递尝试之后)发回失败消息。这为跟踪每次尝试提供了 2 个选项:
1) 解析日志文件
2) 将尝试次数设置为 1(并可选择自行处理重新排队)。
鉴于邮件在成功离开您的服务器后可能无法传递,因此使用传递状态通知(即退回电子邮件)来跟踪邮件的进度非常有意义 - 因此使用选项 2 可以避免构建不同的代码来处理不同的场景。
如果不知道这是在什么操作系统上运行,也不知道是哪个 MTA,就不可能给出更具体的建议。
【讨论】:
我们在 MTA 上很灵活,如果能更好地满足我们的需求,我们不介意更换它。操作系统是Linux。现在,我们在某些情况下使用 sendmail,在其他情况下使用 Zend_Mail_Transport_Smtp。 我为我的公司创建了一个发送库。我们可以在不到 2 秒的时间内处理(解析和创建)来自 1000 个不同发件人的 1000 封不同的电子邮件到 1000 个不同的收件人,而实际发送(->send() 命令)需要 30 秒来处理整个 1000 封邮件。这对我们来说是可以接受的.现在,我们使用直接 Zend 传输来锁定服务器并以这种方式发送。在某种程度上,我们不使用真正的 MTA。如前所述,服务器是基于 Linux 的。至于您的建议 - 您是否有解决方案 2 的示例?【参考方案2】:symcbean 的回答提供了许多理论输入和几种处理您的案例的方法。
此外,也许您可以看看其他库或内置函数是如何工作的。例如,您可以查看:
PHPList Extended PHP Mailer我之前使用过 PHPList,但它已经是一个可靠的解决方案。我不知道 PHP Mailer 类,但我可能值得一试(或者至少看看他们如何处理类似问题)。
问候,
最大
【讨论】:
我不认为其中任何一个具有我所追求的功能,这些是“发件人”库,但它们似乎无法解析返回消息/状态。那部分我仍然必须手动完成,并且由于我已经为我的公司构建了一个相当不错的发件人库(因此只需要“处理程序”部分),我不需要这两个。不过谢谢!以上是关于PHP - 批量邮寄和检查服务器响应的主要内容,如果未能解决你的问题,请参考以下文章