【问题标题】:Automatic E-Mail to Admin when Database is Updated更新数据库时自动向管理员发送电子邮件
【发布时间】:2012-07-08 09:03:20
【问题描述】:

有没有一种方法可以配置在将新数据添加到 MySQL 数据库时自动发送电子邮件。最好在 PHP 中。

这个想法是,当新信息提交到数据库时,会自动生成一封包含新信息的电子邮件,其中包含用于在线查看信息的链接并发送到预先配置的电子邮件地址。

这样做的目的是为了一个休假预订系统。同事将能够提交休假日期和时间,团队经理会在添加或更改时自动收到通知。

我曾尝试使用 Word Press,但它太笨重而且比我需要的强大得多。我还在 Stack Flow 上注意到了另外几个问题,但他们没有回答或答案,而且不是完全相同的问题。

任何帮助将不胜感激。

【问题讨论】:

  • 添加发送电子邮件的命令将很容易插入:php.net/manual/en/function.mail.php 这是您需要找到正确应用程序的任务的其余不想从头开始写...不确定电子邮件要求是否是正确的开始方式
  • 您是否设置了电子邮件功能?

标签: php mysql database email


【解决方案1】:

如果您正在运行 SMTP 服务,您可以将文件输出到投递目录。如果您的容量很大,可能会导致文件名重复,但有一些方法可以避免这种情况。

否则,您将需要创建 UDF。

这是一个示例触发解决方案:

 CREATE TRIGGER test.autosendfromdrop BEFORE INSERT ON test.emaildrop
 FOR EACH ROW BEGIN
  /* START THE WRITING OF THE EMAIL FILE HERE*/      
  SELECT  concat("To: ",NEW.To),
          concat("From: ",NEW.From),
          concat("Subject: ",NEW.Subject),
          NEW.Body
      INTO OUTFILE 
               "C:\\inetpub\\mailroot\\pickup\\mail.txt" 
          FIELDS TERMINATED by '\r\n' ESCAPED BY '';            
    END;

要标记邮件正文,您需要这样的内容...

CREATE FUNCTION `HTMLBody`(Msg varchar(8192)) 
RETURNS varchar(17408) CHARSET latin1 DETERMINISTIC
BEGIN
declare tmpMsg varchar(17408);
set tmpMsg = cast(concat(
  'Date: ',date_format(NOW(),'%e %b %Y %H:%i:%S -0600'),'\r\n',
  'MIME-Version: 1.0','\r\n',
  'Content-Type: multipart/alternative;','\r\n',
  ' boundary=\"----=_NextPart_000_0000_01CA4B3F.8C263EE0\"','\r\n',
  'Content-Class: urn:content-classes:message','\r\n',
  'Importance: normal','\r\n',
  'Priority: normal','\r\n','','\r\n','','\r\n',
  'This is a multi-part message in MIME format.','\r\n','','\r\n',
  '------=_NextPart_000_0000_01CA4B3F.8C263EE0','\r\n',
  'Content-Type: text/plain;','\r\n',
  '  charset=\"iso-8859-1\"','\r\n',
  'Content-Transfer-Encoding: 7bit','\r\n','','\r\n','','\r\n',
  Msg,
  '\r\n','','\r\n','','\r\n',
  '------=_NextPart_000_0000_01CA4B3F.8C263EE0','\r\n',
  'Content-Type: text/html','\r\n',
  'Content-Transfer-Encoding: 7bit','\r\n','','\r\n',
  Msg,
  '\r\n','------=_NextPart_000_0000_01CA4B3F.8C263EE0--'
  ) as char);
 RETURN tmpMsg;
 END ;

【讨论】:

    【解决方案2】:

    我可能会先尝试php mail() function

    这是否足够取决于应用程序。例如,系统管理员可以通过使用 dbms 的本机命令行程序来更新我的任何数据库。他们还可以使用 GUI 实用程序,甚至像 Excel(也许)这样的工具来执行 php 根本看不到的更新。如果发生这种情况,您将不会看到任何有关这些更改的电子邮件。

    至少一些 dbms 可以从数据库中执行电子邮件应用程序。但这可能会引发一些安全问题。 (通常,我的数据库除了在备份/转储期间不会写入文件系统,并且它们不与电子邮件交互。)考虑一下如果某些管理员更新表中的每一行,您希望发生什么。 (大多数情况下,该管理员就是您。)

    就个人而言,我认为我不会为此使用电子邮件。这是(恕我直言)每天最多只能引起管理员注意一次的事情。为此,我可能会首先尝试显示自管理员上次访问以来所做更改的网页。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-11-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-07-09
      • 2021-09-03
      • 2017-12-01
      相关资源
      最近更新 更多