0

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

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

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

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

任何帮助将不胜感激。

4

2 回答 2

0

我可能会先尝试php mail() 函数

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

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

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

于 2012-07-08T22:11:44.760 回答
0

如果您正在运行 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 ;
于 2012-07-10T08:42:59.760 回答