当前位置:  开发笔记 > 后端 > 正文

如何从MySQL 5.1发送电子邮件

如何解决《如何从MySQL5.1发送电子邮件》经验,为你挑选了3个好方法。

我正在尝试在将新行插入表格时向多个收件人发送电子邮件.收件人列表各不相同.我希望能够使用select语句设置此列表.我也安装了Navicat,它允许我发送电子邮件通知,但仅限于预定的一组人.

谢谢.



1> 小智..:

如果您正在运行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 ;



2> Jim Blizard..:

我会非常担心在我的数据库服务器上发送电子邮件的负载(虽然可能很小).我可能会建议其中一种替代方案:

    让应用程序逻辑检测是否需要发送电子邮件并发送它.

    有一个MySQL触发器填充一个表,该表将要发送的电子邮件排队,并有一个进程监视器表和发送电子邮件.


只是把它放在那里,但微软有他们的数据库邮件组件,它运行在与数据库相同的服务器上(至少在正常情况下).它是一个不同的进程/线程,但在同一台服务器上.只是在说'.
您创建一个表格,可以保存您正在发送的电子邮件(可能是主题行和正文的列;但也许您只是引用"表单电子邮件,id = 2")然后您有一个程序来检查此表每隔一段时间就会出现新行,如果发现任何行,则会发送电子邮件.

3> Bill Karwin..:

我同意Jim Blizard的观点.数据库不是应该发送电子邮件的技术堆栈的一部分.例如,如果您发送电子邮件然后回滚触发该电子邮件的更改,该怎么办?你不能收回电子邮件.

您的应用确认已成功并提交SQL更改,最好在应用程序代码层中发送电子邮件.

推荐阅读
大大炮
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有