【问题标题】:Include some emails in a single one在一封邮件中包含一些电子邮件
【发布时间】:2012-05-03 06:54:11
【问题描述】:

我有一个分类网站,并且我正在制作一个 mod,当广告发布在他们订阅的类别和城市中时,它将向我的用户发送邮件。现在,我有一个问题。我已将此文件设置为每天使用 cronjob 运行一次。一天之内,我的网站每天发布 50 个广告,因此用户每天收到 50 封电子邮件。我想将所有 50 封电子邮件包含在一封邮件中,因此用户将收到 1 封电子邮件,但我不知道该怎么做。 例如:每封电子邮件有一个链接,50 封电子邮件有 50 个链接。我希望用户只收到一封电子邮件,其中包含所有 50 个链接。 我尝试了很多方法,但我做不到。 欢迎提出任何建议。

谢谢

【问题讨论】:

    标签: php mysql include cron send


    【解决方案1】:

    这段代码太糟糕了,无法更改,编写新代码要简单得多。我可以建议您创建数组并将电子邮件信息放入其中,而不是立即发送。如果数组已包含具有相同电子邮件的项目,请不要添加新电子邮件,而是将信息添加到现有电子邮件。获取所有电子邮件后,遍历新数组并发送电子邮件。

    【讨论】:

      【解决方案2】:

      由于您已经在为脚本运行 cronjob,只需设置一个适当的时间(清晨或晚上)并从分类广告中查询您存储帖子的数据库,选择最近发布的 50 个,将它们添加到电子邮件中并将它们发送给注册接收最新帖子电子邮件的用户。看起来很简单,除非我误解了什么。

      另外,我很好奇为什么(在您上面的脚本中)您会在每个小代码块之后跳入和跳出 PHP。这很让人分心,坦率地说,我什至不想阅读代码。从上面显示的内容中没有理由离开 PHP - 除非这些都是您一起包含在此处显示的小 sn-ps。如果是这样,请忽略我的抱怨。

      <?php } ?>
      <?php } ?>
      <?php } ?>
      <?php } ?>
      <?php } ?>
      <?php } ?>
      

      /scratcheshead

      【讨论】:

        【解决方案3】:

        只需将您的广告信息收集到一个数组中,您可以在其中将电子邮件设置为数组键。

        $recipients = array();
        while ($row = mysql_fetch_assoc($result)) {
          $email = $row["email"];
          if (!array_key_exists($email, $recipients)) {
            $recipients[$email] = array();
          }
          $recipients[$email][] = $row;
        }
        

        在此之后,您有一个数组,每封电子邮件都有可变数量的 $row-entries。您只需使用 foreach 循环将这些条目添加到您的邮件模板中。

        【讨论】:

          猜你喜欢
          • 2015-10-13
          • 2011-07-14
          • 1970-01-01
          • 1970-01-01
          • 2013-07-29
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多