更新数据库时自动向管理员发送电子邮件

时间:2012-07-08 21:53:33

标签: php mysql database email

有没有办法配置在将新数据添加到MySQL数据库时发送的自动电子邮件。最好是PHP。

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

这是一个假期预订系统。同事将能够提交休假日期和时间,并在团队经理被添加或更改时自动通知他们。

我尝试过使用Word Press,但它太笨重,而且比我需要的功能强大得多。我还在堆栈流程中注意到了另外两个问题,但他们没有回答或答案,也没有完全相同的问题。

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:0)

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

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

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

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

答案 1 :(得分:0)

如果您正在运行SMTP服务,则可以outfile到drop目录。如果您的音量很高,可能会导致文件名重复,但有办法避免这种情况。

否则,您需要创建一个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 ;