以编程方式发送大量电子邮件

时间:2020-03-06 15:00:49  来源:igfitidea点击:

我需要能够定期向订阅的用户发送电子邮件警报。 PHP似乎很难发送一条消息,因此我正在寻找更好的选择。

如果实现足够快,任何语言都可以。最终发送的邮件数量将达到数千。

如果可以避免购买许可软件,那就更好了。

解决方案

我们有各种应用程序在数据库表中写入电子邮件队列,.Net Windows Service对该表进行轮询以编写电子邮件并通过我们的邮件服务器发送出去。

我们每分钟最多处理1000封电子邮件...

对于Java,有http://java.sun.com/products/javamail/
我已经在应用程序中使用过它。相当容易设置和使用。

在Ruby中,它非常简单,但是我没有使用过它,因此无法说出任何有关性能的信息。
http://snippets.dzone.com/posts/show/2362

就是说...我怀疑PHP本身发送邮件太慢了。也许应用程序存在瓶颈?

有一个基于dos的基于命令行的工具blat,我们可以非常轻松地下载和发送电子邮件

仅想提到我在上一份工作中用PHP创建了一个质量很好的大规模电子邮件解决方案,所以我不明白为什么我们会完全排除它:)

python中的smtplib是一个轻而易举的设置,并且是一个非常干净的API。

我们可以做的一件事是将问题的焦点更改为基础邮件软件。例如,如果我想发送大量电子邮件,则可以使用任何语言以BSMTP格式将其写出,基本上看起来像简单的SMTP客户端命令。就像是:

MAIL FROM:<[email protected]>
RCPT TO:<[email protected]>
DATA
From: Me <[email protected]>
To: You <[email protected]>
Subject: test email

This is the body of the test email I'm sending
.

然后,我将通过exim提交BSMTP文件:

cat *.bsmtp | exim -bS

这从根本上消除了从程序发送电子邮件的延迟,并将负担加在了exim上(作为MTA,它可以更好地处理它)。

一旦掌握了基础知识,我们可以修改很多东西以提高效率。例如,如果电子邮件不是自定义的,则可以通过将相同域中的所有收件人放入相同的BSMTP文件进行预优化:

MAIL FROM:<[email protected]>
RCPT TO:<[email protected]>
RCPT TO:<[email protected]>
RCPT TO:<[email protected]>
RCPT TO:<[email protected]>
DATA
From: Me <[email protected]>
To: Me <[email protected]>
Subject: test email

This is the body of the test email I'm sending
.

然后,我们还会在如何优化MTA本身以发送邮件方面有很多回旋余地(例如,它将自动处理并行传递,通过相同TCP连接将电子邮件传递到同一邮件服务器等)。

关于在代码中执行此操作,我们曾经在perl库中添加了一个可以帮助我们完成此工作的库。从本质上讲,我们向它提供了电子邮件和地址,它将根据需要将呼叫分流到邮件服务器。它可以在允许的并行会话数中进行配置,并且它还监视服务器上的负载,并且如果负载超过用户可配置的阈值,它将降低速度。

电子邮件在php中的简短版本Pear's Mail_Queue排队。一年多来,我一直在使用它每天发送30-50,000多个邮件或者更多(一周几天),而不会出现问题。

我使用一个名为e-Campaign的程序来读取CSV文件。如果我们必须以编程方式进行操作,则可能需要使用等待技术,这样就不必一次发送10,000封电子邮件。使用电子广告系列,我们可以选择一次发送多少封电子邮件,并在这两批之间设置间隔时间。它仍然非常快,但不会引起服务器过载问题。