如何从MySQL 5.1发送电子邮件

Dav*_*nez 24 mysql email notifications navicat

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

谢谢.

小智 27

如果您正在运行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;
Run Code Online (Sandbox Code Playgroud)

要标记邮件正文,您需要这样的内容......

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 ;
Run Code Online (Sandbox Code Playgroud)


Jim*_*ard 26

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

  1. 让应用程序逻辑检测是否需要发送电子邮件并发送它.
  2. 有一个MySQL触发器填充一个表,该表将要发送的电子邮件排队,并有一个进程监视器表和发送电子邮件.

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

Bil*_*win 9

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

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