【问题标题】:To send email on some future time在未来某个时间发送电子邮件
【发布时间】:2014-04-01 16:04:58
【问题描述】:

我是 php 新手,我正在制作一个获取数据表单数据库的计划页面。从数据库中,我选择了已发送电子邮件的发送时间和日期。我想做的是,如果发送日期和时间到了,系统应该向该地址发送电子邮件。

对于发送电子邮件,我使用的是API

这是我的代码,我应该在其中添加以执行此类功能。 我试图得到 3 件事。 1.从数据库中取出时间已到的数组。 2. 使用循环将它们存储在数组中。 3. 通过循环向他们发送电子邮件。 这是我的代码。

<?php
  include('iSDK/src/isdk.php');
  $myApp = new iSDK();
  Test Connnection
  if ($myApp->cfgCon("connectionName"))

  {
  echo "Connected...";
  }
  else
  {
  echo "Not Connected...";
  }
  $query = mysql_query('SELECT communication.senddatetime,emails.email
                        FROM communication
                        INNER JOIN emails
                        ON communication.communication_id=emails.communication_id
                        WHERE senddatetime <= NOW()'); //or die(mysql_error())
 while($row = mysql_fetch_assoc($query)){
 $email=array($fetch);
 $result=mysql_num_rows($query);
 for($i=0; $i<$result; $i++){
 $obj=mysql_fetch_object($query);
 $emailaddress=$obj->email;
 }

 for($i=0; $i<$result; $i++){
 $conDat = array('FirstName' => 'Hassan',
                          'Email'     => $email);
        $conID = $myApp->addCon($conDat);
        $clist = array($conID);
$email = $myApp->sendEmail($clist,'kamranasadi431@gmail.com','~Contact.Email~','ccAddresses', 'bccAddresses', 'contentType', 'JK', 'htmlBody', 'txtBody');}
}

?>

【问题讨论】:

  • 可以使用 Cron 作业。
  • 快速扫描你的脚本告诉我这很好,正如阿里所说,设置一个 cron 作业每 X 分钟运行一次。
  • 你的第一个 for() 循环只会给你 一个 电子邮件地址发送到,因为循环不断覆盖以前的记录的地址。
  • 您能否提供一些有关 cron 作业的提示或任何帮助链接?

标签: php sendmail infusionsoft


【解决方案1】:

您应该使用 cron 作业。

首先,您必须创建一个 php 脚本,其查看是否有任何电子邮件要发送(它可以是一个简单的 php 文件,用于获取时间并将其与数据库中的时间戳进行比较,然后获取有关电子邮件的信息您要发送,用您的标题、主题和正文撰写电子邮件,然后发送完成。)

其次,您必须在 shell 中执行它(我假设您使用的是 Linux 系统)来测试它是否工作正常。要在 shell 中执行 php,您可以使用下一个命令

php /route/to/your/php/script.php var1 var2 .... varN

可能命令 php 不能工作,所以你必须知道你安装了哪个 php 客户端(非常重要,你必须首先在你的系统中安装一个 php 客户端 -- apt-get install php5-cli em>)。您可以知道您在系统中安装了哪个 php,在 shell 中键入下一个

which php

您将在 url Shell run/execute php script with parameters 中找到有关如何在 shell 中执行 php 的更多信息

您必须做的第三件事是在 cronjob 中编写脚本。例如,如果你想每隔 5 分钟执行一次,你可以在你的 cron 中写下一个(crontab -e)

*/5 * * * * php /route/to/your/php/script.php var1 var2 > /dev/null

或者

*/5 * * * * /usr/bin/php /route/to/your/php/script.php var1 var2 > /dev/null

您还有其他选项可以将 php 设置为 exec 文件,因此您不能在脚本之前使用 php,而是在打开 php 之前添加下一行

#!/usr/bin/php
<?php

【讨论】:

    【解决方案2】:

    另一种安排稍后发送电子邮件的方法是通过系统命令结合sendmailat,如下所示:

    /usr/sbin/sendmail -f from@from.com to@to.com < message.txt | at 16:00 today
    

    这可能比每隔几分钟运行一次 cron 作业来查询数据库以查找需要发送的电子邮件要干净一些。您可以使用 php 的 shell_exec 函数从您的 PHP 脚本运行上述系统命令。

    【讨论】:

      【解决方案3】:

      如果您没有 24/7 全天候可用的服务器,您也可以利用云来实现您的目的。

      一种简单的设置方法是在 IaaS 或 PaaS 上使用 Jenkins,您只需在其中创建作业并指定要启动它的时间,无需安装或配置任何东西。

      可以按照here 指定的方式完成 cron 作业配置。完整的分步指南也可以找到here

      【讨论】:

        猜你喜欢
        • 2011-06-11
        • 2023-02-01
        • 2017-06-11
        • 2013-12-02
        • 1970-01-01
        • 2012-02-04
        • 1970-01-01
        • 1970-01-01
        • 2020-04-02
        相关资源
        最近更新 更多