2

我需要能够定期向订阅用户发送电子邮件警报。PHP 似乎很难发送一条消息,所以我正在寻找好的替代方案。

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

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

4

8 回答 8

2

php 中的电子邮件队列- 简短版本 - Pear 的 Mail_Queue。一年多来,我一直在使用它每天或更多(每周几天)发送 30-50,000 多封邮件,没有任何问题。

于 2008-10-02T12:55:40.940 回答
1

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

我们每分钟最多可以发送 1000 封电子邮件...

于 2008-10-02T07:33:54.737 回答
1

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

在 Ruby 中它非常简单,但我没有使用过它,所以不能说任何关于性能的事情。 http://snippets.dzone.com/posts/show/2362

那就是说...我怀疑PHP本身发送邮件的速度太慢了。也许您的应用程序有一些瓶颈?

于 2008-10-02T07:43:06.947 回答
1

只想提一下,在我之前的工作中,我们用 PHP 创建了一个海量电子邮件解决方案,效果很好,所以我不明白为什么你会完全排除它:)

于 2008-10-02T07:59:24.333 回答
1

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

于 2008-10-02T08:01:11.897 回答
1

您可以做的一件事是将问题的焦点转移到底层邮件软件。例如,如果我想发送大量电子邮件,我会使用任何语言以 BSMTP 格式将它们写出来,这基本上看起来像简单的 SMTP 客户端命令。就像是:

MAIL FROM:<me@example.com>
RCPT TO:<you@example.com>
DATA
From: Me <me@example.com>
To: You <you@example.com>
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:<me@example.com>
RCPT TO:<you@example.com>
RCPT TO:<him@example.com>
RCPT TO:<her@example.com>
RCPT TO:<them@example.com>
DATA
From: Me <me@example.com>
To: Me <me@example.com>
Subject: test email

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

然后,您还可以在如何优化 MTA 本身以发送邮件方面获得大量回旋余地(例如,它将自动处理并行传递、通过同一 TCP 连接将电子邮件传递到同一邮件服务器等)。

关于在代码中做这件事,我们曾经有一个 perl 库来帮助我们做这些事情。本质上,您将电子邮件和地址提供给它,它会根据需要分叉对邮件服务器的调用。它可以配置允许的并行会话数,它还监视服务器上的负载,如果负载超过用户可配置的阈值,它就会节流。

于 2008-10-02T12:49:05.183 回答
0

我使用一个名为 e-Campaign 的程序读取 CSV 文件。如果您必须以编程方式执行此操作,那么您可能需要构建一种等待技术,这样您就不会尝试一次发送 10,000 封电子邮件。使用 e-Campaign,您可以选择一次发送多少封电子邮件,并在这些批次之间设置休息时间。它仍然非常快,但不会导致服务器过载问题。

于 2008-10-02T12:58:15.723 回答
-2

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

于 2008-10-02T07:48:40.850 回答