【发布时间】:2008-10-02 07:31:57
【问题描述】:
我需要能够定期向订阅用户发送电子邮件提醒。 PHP 似乎很难发送 one 消息,所以我正在寻找好的替代方案。
只要实现速度足够快,任何语言都可以。发送的邮件数量最终将达到数千。
如果可以避免购买许可软件,那就更好了。
【问题讨论】:
标签: email programming-languages
我需要能够定期向订阅用户发送电子邮件提醒。 PHP 似乎很难发送 one 消息,所以我正在寻找好的替代方案。
只要实现速度足够快,任何语言都可以。发送的邮件数量最终将达到数千。
如果可以避免购买许可软件,那就更好了。
【问题讨论】:
标签: email programming-languages
Email queueing in php - 简短版 - Pear 的 Mail_Queue。一年多来,我一直在使用它每天或更多(每周几天)发送 30-50,000 多封邮件。
【讨论】:
python 中的 smtplib 是一个轻而易举的设置和一个非常干净的 API。
【讨论】:
我们有各种应用程序写入数据库表中的电子邮件队列,并且 .Net Windows 服务轮询该表以编写电子邮件并通过我们的邮件服务器发送出去。
我们每分钟最多可发送 1000 封电子邮件...
【讨论】:
对于Java,有http://java.sun.com/products/javamail/ 我在一个应用程序中使用过它。很容易设置和使用。
在 Ruby 中它非常简单,但我没有使用过它,所以不能说任何关于性能的东西。 http://snippets.dzone.com/posts/show/2362
也就是说……我怀疑 PHP 本身发送邮件的速度太慢了。也许您的应用程序遇到了瓶颈?
【讨论】:
想提一下,在我之前的工作中,我们用 PHP 创建了一个群发电子邮件解决方案,效果很好,所以我不明白为什么你会完全排除它:)
【讨论】:
您可以做的一件事是将问题的焦点转移到底层邮件软件。例如,如果我想发送大量电子邮件,我会使用任何语言以 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 库帮助我们做这些事情。本质上,您将电子邮件和地址提供给它,它会根据需要分叉对邮件服务器的调用。它可以配置允许的并行会话数,它还监视服务器上的负载,如果负载超过用户可配置的阈值,它会节流。
【讨论】:
我使用一个名为 e-Campaign 的程序读取 CSV 文件。如果您必须以编程方式执行此操作,那么您可能需要构建一种等待技术,这样您就不会尝试一次发送 10,000 封电子邮件。使用 e-Campaign,您可以选择一次发送多少封电子邮件,并在这些批次之间设置休息时间。它仍然非常快,但不会导致服务器出现过载问题。
【讨论】:
有一个名为 blat 的基于 dos 的命令行工具,您可以非常轻松地下载和发送电子邮件
【讨论】: