繁体   English   中英

如何检查电子邮件是否已经发送

[英]How to check if email has been sent already

我有一个(PHP)脚本,该脚本在MySQL的新行上运行。 但是,即使已经发送过电子邮件,它也将继续发送电子邮件,从而导致大量电子邮件进入用户收件箱。

脚本很大,所以我不能在这里粘贴-http://pastebin.com/6v75F4Gv

无论如何,我可以以某种方式检查此脚本是否已经发送了“ xx”电子邮件,但是如果包含“ zz”的新行并且用户指定了他们希望接收包含“ zz”的内容,它将发送“ zz”行?

即。 它停止重复/等。 电子邮件。

注意:MySQL表采用以下格式:
表: feed
传呼机中的行: idtitledescriptiondate

表: recipients
收件人行: idemailsuburb

谢谢 :)

您的两个表都没有一栏记录是否已发送电子邮件,这是我希望在此处看到的:

if (sendMail($subject, $to, $body, $from, $cc))
{
   echo 'Mail for ' . $to . ' has been sent.<br />';

   //Update database so only one email is sent...
   $sql = "INSERT INTO TRACKING_TABLE 
              (feed_id, recipient_id, isSent)
           VALUES
              ($feed_id, $recip_id, 'Y')";
   $query = mysql_query($sql);
} else
{  ...

...这意味着更新:

$feed_sql = "SELECT id, title, description, rssDate 
               FROM feed 
              WHERE MATCH (title) AGAINST ('" . $rows['suburb'] . "') 
                AND NOT EXISTS(SELECT NULL
                                 FROM TRACKING_TABLE tt
                                WHERE tt.feed_id = feed.id
                                  AND tt.recipient_id = $Recipient_id
                                  AND tt.issent = 'Y')
           GROUP BY pubDate 
           ORDER BY pubDate DESC 
              LIMIT 1";

...以确保您的查询没有接收到已成功发送的查询。

DROP TABLE IF EXISTS `example`.`tracking_table`;
CREATE TABLE  `example`.`tracking_table` (
  `feed_id` int(10) unsigned NOT NULL default '0',
  `recipient_id` int(10) unsigned NOT NULL default '0',
  `issent` char(1) NOT NULL default '',
  PRIMARY KEY  (`feed_id`,`recipient_id`),
  FOREIGN KEY (feed_id) REFERENCES pager(id),
  FOREIGN KEY (recipient_id) REFERENCES recipients(id)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

嗯,没有通用的方法,这意味着您必须自己实现它。

在您的收件人表中创建一个已sent标志列,在发送过程开始之前在所有记录中将其取消设置,并在发送了针对特定收件人的电子邮件后将其设置为“是”。

或者,更复杂但更灵活的是,创建一个包含所有已收到特定邮件的地址(由当前日期标识的字符串,例如“ Newsletter Q3”的字符串)等的新表“传送”。 此方法可能有点繁重的数据库,但是是跟踪多个邮件的一种好方法。

您需要在数据库中对此进行跟踪。 您的表中当前没有任何字段可支持此操作,因此您首先需要修改架构。

通过快速扫描程序,我得到的印象是您的pager表包含消息,而recipients包含接收消息的recipients 消息是一对多的,因此每条消息都可以发送给几个收件人。 正确?

在这种情况下,您将需要一个第三表来跟踪发送的内容。 可能带有诸如receive_id,message_id,timestamp之类的字段,或者是消息成功或失败的字段,如果消息退回,您可以稍后填充。

暂无
暂无

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

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