0

我知道 Perl Mime::Lite 已被弃用,但我必须在仅安装 Mime::Lite 的托管服务器上工作。该服务器还将每小时可以发送的电子邮件数量限制为 500 封。

我有很多参与者需要通过电子邮件发送说明,以完成问卷调查和提醒,如果他们几周后还没有完成问卷调查。我有一个脚本,可以检查他们是否完成了调查问卷,以及是否应该发送和已发送提醒。否则会发送提醒。但是,我必须将发送的电子邮件数量限制为每小时 500 封。

有没有办法告诉 Mime::Lite 发送 500 封电子邮件,等待 1 小时,然后再发送 500 封其他电子邮件,或者我是否需要使用外部文件在 perl 中自己编程:发送 500 封电子邮件,标记这些电子邮件已发送并且在什么时候。每次运行脚本时,它都会再次检查是否必须发送电子邮件以及发送最后一封电子邮件的时间。如果距当前时间超过一小时,它将发送 500 封新电子邮件。

还是有其他更方便的方式?

可以肯定的是,我的电子邮件是合法的并且是用户期望的(并且是想要的)。

4

1 回答 1

1

Mime::Lite 本身并没有实现这一点,但你自己很容易实现。假设你有一个 subsend_to($recipient, $msg)实际使用 Mime::Lite 发送消息,你可以用类似的东西包装它:

my $msg = ...;
my @recipients = ...;
while (@recipients) {
  for (1 .. 500) {
    last unless @recipients; # batch is implicitly over if we're out of people to send to
    send_to(shift @recipients, $msg);
  }
  sleep 3600 if @recipients;  # wait an hour before the next batch
}

请注意,这取决于您的主机服务器是否允许您保持进程运行足够的时间来处理整个列表。如果他们不这样做,那么您将需要使用数据库来跟踪所有收件人以及已经邮寄给的收件人。

不过,老实说,使用真正的邮件列表软件来处理这个问题可能会更好(并且可能更容易),而不是编写自己的半功能列表服务器。也许您的托管服务也提供邮件列表?

于 2013-05-28T10:27:43.467 回答