定期通过 PHP 脚本发送电子邮件

3
我正在开发一个自动监控系统。我已经制作了一个使用MySQL数据库的.NET应用程序。为此,我开发了一个普通的管理员面板,管理员可以登录并获取来自数据库各种查询的必要报告。面板中还有一个“摘要报告”,它只是大致的每周总结。现在我想做的是,我希望这个报告(所有文本)可以自动发送给一些邮箱“xxxxx@xxx.com”,并且每七天发送一次。我之前使用过一些PHP脚本来在提交按钮单击时发送电子邮件。像下面这个例子。
<?php
if(isset($_POST['isPost']))
{
$header="From:".$_POST['customer_mail']."\r\nName:".$_POST['name']."\r\nCity:".$_PO        ST['city'];
$subject = $_POST['title'];
$message="From:$_POST[customer_mail]\r\nName:$_POST[name]\r\nPhone:$_POST[city]\r\n        \r\n\r\n\r\n".$_POST['details'];
$to = 'xxxxxxxxx@xxx.com';

$send_contact=mail($to,$subject,$message,$header);

if($send_contact)
{
echo "<h6 style='text-align:center;color:green'>Sent Successfully</h6>";
}
else
{
echo "<h6 style='color:red'>Error sending e-mail'</h6>";
}
}
?>

这是一个正常的邮件发送脚本,可以正常工作。但是为了实现我想要的目的,我希望能够定期自动执行此操作,或者指导我如何实现。我已经在谷歌上搜索了相关的php脚本,但没有找到令人满意的结果。 ~ 致以问候


这就是举报按钮的作用。请不要在每个答案下单独留言哭诉。给予负反馈,举报,然后继续前进。 - Jacob Goulden
4个回答

4
你可以使用cronjobs完成此操作。这是一个长时间运行的进程,可以在指定的时间/日期/间隔执行命令。
根据您所使用的系统,有不同的方法。 如果您的脚本在某个Web服务器上运行: 请询问系统管理员使用cronjob运行脚本。或者搜索任何帮助文档,看看是否可以在管理面板中自己设置。请向您的网络托管服务提供商/系统管理员了解更多信息。 如果您的脚本在本地机器上: UNIX 尝试阅读有关crontab如何运行php脚本或其他脚本的信息。
例如,键入crontab -e并在您的crontab中添加以下行,cronjob将每小时运行您的脚本:
00 * * * * /usr/local/bin/php /home/Low-pointer/myscript.php

如果您想了解有关间隔的更多信息,请参考此处

Windows

如果您使用 Windows,您可以使用计划任务来运行 php 命令。

例如,将以下命令添加到调度程序:C:\wamp\bin\php\php.exe -f C:\wamp\www\my_script.php

您还可以使用在线定时服务(Google 搜索),这些是在指定时间运行页面的在线服务。 可以免费或付费使用。


Fred,感谢您的编辑,但我真的很好奇(英语不是我的母语)。当Google被用作动词(它已经成为了一个动词),它是否仍然需要大写字母? - Timmetje
你好,Tim。我倾向于认为是这样,因为它是一个公司的名字(已经被改变了),而不是词典中的实际名词/单词(但很快可能会改变)lol。然而,这是一个非常好的问题,但我更倾向于将其大写;虽然这是有争议的。 - Funk Forty Niner
这可能是不同之处,在我的国家,他们实际上在2年前将其添加到字典中。 - Timmetje
“Google”这个词实际上在我的Robert&Collins高级版词典中(是的,我喜欢用真正的书作为参考眨眼,并且它是大写的。 - Funk Forty Niner

3

如果你在使用Cpanel,可以通过cronjob来发送定时邮件。 打开Cpanel后,进入crontab系统。 将当前的代码添加到一个文件(xx.php)中,并在Cpanel的crontab中添加此命令。

/usr/bin/php -q /home/public_html/xx.php

到目前为止,这是唯一一个真正符合“答案”标准的“答案”。 - Funk Forty Niner
2
这非常局限于Cpanel,但OP可能甚至没有使用它。 - Timmetje
是的,这甚至更加无用,OP没有提到Cpanel! - Jessica

1

像其他人已经说过的那样,您必须使用cronjob来完成您的任务。我假设您使用Linux操作系统作为生产环境。因此,您需要:

1)一个php端点(例如www.mywebsite.com/emailsend.php)或CLI php脚本,当调用时发送电子邮件。

2)正确的crontab规则

下面是一个简单的shell脚本示例(mailsend.sh),它使用CURL调用一个端点并保存一个带有Web服务器给出的任何响应的html文件。

#!/bin/bash

curl http://www.mywebsite.com/emailsend.php -o /path/to/my/mailsendreport/"$(date '+%Y-%m-%d-%H-%M-%S')".html

要向cron添加计划任务

crontab -e

然后添加以下规则

50 23 * * 6 sh /path/to/mailsend.sh  

“50 23 * * 6”是什么意思?这意味着每周六的第六天,在第23个小时的第50分钟,将调用您的sh脚本,然后发送您的Web应用程序和电子邮件。我曾经写过一篇关于此内容的小文档,您可以在这里看到。祝好!

0
你正在寻找“cron job”。
编辑:或者,如果你在使用Windows系统,可以尝试使用“计划任务”。

是的,但如何在 Web 应用程序中实现此类定时任务呢? - Low-Pointer
@Low-Pointer:从技术上讲,它不是Web应用程序的一部分。它是一个独立的应用程序。cron将其作为命令行可执行文件来执行:http://www.php.net/manual/en/features.commandline.usage.php - David
所以寻找使用这些工具的基础教程。你用的是Windows还是Linux?你需要再多付出一点努力,而且对此发誓并不能为你赢得任何分数。 - Jessica
给楼主一个实际的答案,而不是本应该是评论的内容。你并没有提供一个实际的答案,就这么说吧。 - Funk Forty Niner
1
你也没有。这就像锅咕噜叫水壶黑一样;在我看来。 - Funk Forty Niner
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接