有没有办法配置在将新数据添加到MySQL数据库时发送的自动电子邮件。最好是PHP。
这个想法是,当新信息提交给数据库时,会自动生成一个包含新信息的电子邮件,其中包含在线查看信息并发送到预先配置的电子邮件地址的链接。
这是一个假期预订系统。同事将能够提交休假日期和时间,并在团队经理被添加或更改时自动通知他们。
我尝试过使用Word Press,但它太笨重,而且比我需要的功能强大得多。我还在堆栈流程中注意到了另外两个问题,但他们没有回答或答案,也没有完全相同的问题。
非常感谢任何帮助。
答案 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 ;