我正在尝试在将新行插入表格时向多个收件人发送电子邮件.收件人列表各不相同.我希望能够使用select语句设置此列表.我也安装了Navicat,它允许我发送电子邮件通知,但仅限于预定的一组人.
谢谢.
如果您正在运行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 ;
我会非常担心在我的数据库服务器上发送电子邮件的负载(虽然可能很小).我可能会建议其中一种替代方案:
让应用程序逻辑检测是否需要发送电子邮件并发送它.
有一个MySQL触发器填充一个表,该表将要发送的电子邮件排队,并有一个进程监视器表和发送电子邮件.
我同意Jim Blizard的观点.数据库不是应该发送电子邮件的技术堆栈的一部分.例如,如果您发送电子邮件然后回滚触发该电子邮件的更改,该怎么办?你不能收回电子邮件.
在您的应用确认已成功并提交SQL更改后,最好在应用程序代码层中发送电子邮件.