繁体   English   中英

我怎样才能拥有一系列电子邮件并确保它们都发送?

[英]How can I have an array of emails and make sure they all send?

我希望能够收到一系列电子邮件,并确保每个 email 都已发送。 (例如数组>发送每个email>结果)我在这里改变了问题,因为这更重要,而且我添加了50个代表。 观点。 Codewise 我该怎么做?

除了仍然使用mail() function 之外,您可能还需要设置一个cron 作业来发送邮件。 对于假脱机邮件发送作业,请使用单独的数据库表。 或者,如果它与某种邮件列表功能有关,那么一个简单的收件人列表就可以了。

一样的方法。 您必须具有将 email 发送到 email 地址的代码。 无论他们是否在网站上,它都是相同的代码。 你只需要知道他们的 email 地址。

编辑:如果您想知道如何触发 email 被发送,也许您想使用 cron 作业来安排它,例如每天午夜发送 email。

这说明了一切,真的: http://php.net/manual/en/function.mail.php

您只需要安装一个外发邮件服务器(postfix、exim、sendmail)

发送 email 的简单方法:

$to = "usermail@test.com";
$from = "my_email@mydomain.com";
$subject = "Hello!";
$contents = "This is an test mail!";

mail($to, $subject, $contents, "From: $from");

如果您只想一次发送一堆相同的 email,您可以在电子邮件数组上调用implode()将其转换为字符串:

$to_string = implode(', ', $to_array);

或者,如果您想尝试更复杂的事情,您可以使用foreach循环遍历每个 email 并跟踪成功和失败:

$success = array();
$failure = array();

foreach ($to_array as $to_email)
{
  if (mail($to_email, $subject, $message, ...))
    $success[] = $to_email;
  else
    $failure[] = $to_email;
}

我猜您最初的问题与每天发送所有这些电子邮件或其他事情有关,而无需您按下按钮。 如果您有 ssh 访问权限,请查看如果您键入以下内容会发生什么:

crontab -e

如果您遇到某种错误,您将不得不与您的系统管理员讨论 cron 问题。 如果你得到一个文件,那么你可以使用 cron。 不过,这不是您当前问题的一部分,所以我会留下它。

如果您无法访问 cron 作业,那么您可能会在没有用户交互的情况下难以运行。

处理此问题的常用方法是在每第 n 个页面加载时运行一次,或每隔一段时间运行一次。 仅当您的站点访问频率与您希望发送 email 的频率一样高时,这才有效。 您还需要使用符合 ACID 的数据库。 伪代码如下。

if (1 == rand(1,100)) { // run once every 100 page loads
    $emails = get_emails_to_send();
    mark_emails_as_sent($emails);
    $results = send_emails($emails);
    mark_failures_as_needing_to_be_sent($results);
}

或者,您可以在计时器上运行它:

if (time() - get_last_time_run() > $run_at_least_once_every_this_many_seconds) {
    $emails = get_emails_to_send();
    mark_emails_as_sent($emails);
    $results = send_emails($emails);
    mark_failures_as_needing_to_be_sent($results);
}

或者您可以将两者与&&结合使用。 这取决于您的页面被点击的频率。

如果您想发送 email 的频率高于获得页面点击的频率……太糟糕了;)。 或者让外部服务每隔一段时间调用一次页面。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM