【问题标题】:Send email when an episode airs [closed]当一集播出时发送电子邮件[关闭]
【发布时间】:2024-04-29 14:25:02
【问题描述】:

背景:

我正在开发一个网站,该网站列出了当前和即将到来的季节的电视节目,并附有每一季下一集的倒计时。对于这些节目,我有一个节目表和一个相应剧集的表(每集一行,每集都有正确的播出日期)。

现在,我还希望允许用户选择通过电子邮件接收他们选择的任何系列的更新。所以,我有一个表格,其中包含电子邮件以及要发送到该电子邮件的系列更新。这些电子邮件将是简单的通知,例如“某某系列已宣布将于今年秋季播出”。或“此类系列的第 3 集现已推出。”

我相信我可以编写一个脚本来查找过去 30 分钟内播出的剧集,然后循环播放并通过电子邮件发送给选择接收通知的任何人。但是,我不确定如何自动完成实际执行。我希望在尽可能接近相关时间的时候发送电子邮件,而不是每周汇总一次。这些节目是外国的,这意味着由于播出时间很奇怪,我将无法自己执行脚本,但无论如何我更喜欢自动化。

我的问题:

  1. 在我的各种搜索中,我遇到了 cron 作业 - 这真的是最好的方法吗?
  2. 每 30 分钟运行一次会不会是个坏主意?
  3. 我的网站目前使用的是 PHP,但根据我的阅读,它在发送电子邮件时效率低下。那么,Perl 是一种用于发送电子邮件的好语言吗?如果不是,我应该使用哪种语言? (理想情况下是一种更常见和完善的语言)

【问题讨论】:

  • 我认为 cron 作业是个好主意。或者,如果您知道您有足够的访问量,您可以在用户请求页面时检查事件。
  • 如果您需要每 30 分钟执行一次操作...每 30 分钟执行一次操作是解决此问题的唯一方法,因此请 cron 执行。 AFAIK 任何可以在 perl 中完成的事情都可以在 PHP 中完成,我很想知道 PHP 的功能是否比 perl 有所下降(有趣的事实...... php 最初是 perl cgi 脚本的集合)。
  • 我还开发并使用了 php 和 perl 批量邮件脚本,从性能的角度来看,我的经验显示性能几乎没有差异。

标签: php perl email cron


【解决方案1】:
  1. 没有。您的精度不需要精确到秒,它不需要在 .sh 脚本或小型侦听器上运行。

    但是,如果您确实打算让更新更准确,您可以使用类似的方法:

    脚本.sh

    #!/bin/sh
    while [ 1 ]
    do
        php -q "/path/to/mail.php"
        sleep 5000
    done
    

    在本例中,您可以每隔 5 秒调用一次脚本。

  2. 没有。如果您编写了 PHP 脚本以有效地循环通过数据库(例如,不是使用 php 循环,而是使用 sql 连接),那么以较低的间隔运行脚本也可以。

    PHP 循环意味着:

    foreach ($users as $user) {
        $mysqli->query("SELECT `shows` FROM `user_shows` WHERE `id`=".$user->id);
    }
    

    SQL Join 会更好。

    SELECT `shows` FROM `user_shows` JOIN `users` ON user.id = user_shows.user_id;
    
  3. 没有。 mail 使用在其他位置定义的设置,效率将取决于您的邮件服务器/服务的效率。

    此外,您甚至不需要在 PHP 中使用默认的 mail 函数。您可以使用PHPMailer 或第三方服务,例如FeedBurner

【讨论】:

  • 这在很大程度上取决于您想要什么。至于我,我想当我最喜欢的节目的新一集发布时,我希望精度接近小时。所以30分钟是相当合理的。毫无疑问,Cron 作业应该足够了。
  • 感谢您的回答和示例。我会坚持使用 PHP,并使用 cron 作业。你甚至让我在这个项目上放心了,呵呵。