2014-10-20 165 views
-4

我需要通过oracle数据库发送电子邮件pl/sql,存储过程必须包括认证(用户名/密码)从存储过程发送邮件

+0

http://blog.sqlauthority.com/2013/01/16/sql-server-send-email-from-sql-database -configure-database-mail-sql-in-sixty-seconds-039-video/ – 2014-10-20 21:04:53

回答

1

写邮件的存储过程。

CREATE OR REPLACE PROCEDURE send_mail 
     ( sender  IN VARCHAR2, 
      recipient IN VARCHAR2, 
      subject IN VARCHAR2, 
      message IN VARCHAR2) 
     IS 
      mailhost  VARCHAR2(30) := 
'YOUR.SMTP.SERVER'; 
      mail_conn utl_smtp.connection; 

     crlf VARCHAR2(2):= CHR(13) 
|| CHR(10); 
     mesg VARCHAR2(1000); 

     BEGIN 

      mail_conn := utl_smtp.open_connection 
(mailhost, 25); 
       mesg:= 'Date: ' || TO_CHAR(SYSDATE, 
'dd Mon yy 
hh24:mi:ss') || crlf || 
      'From: <'||sender||'>' || crlf || 
      'Subject: '||subject || crlf || 
      'To: '||recipient || crlf || 
      '' || crlf || message; 
      utl_smtp.helo(mail_conn, mailhost); 
      utl_smtp.mail(mail_conn, sender); 
      utl_smtp.rcpt(mail_conn, recipient); 
      utl_smtp.data(mail_conn, mesg); 
      utl_smtp.quit(mail_conn); 

     END; 

并调用存储过程如下:

begin 

send_mail('sender e-mail','dest e-mail','here 
goes subject','here goes 
message'); 

end; 
+1

虽然Shirish的解决方案看起来不错(我没有测试它),但考虑在课程期间采取非事务性操作(发送电子邮件)的含义的交易。如果进行更新1,更新2,然后发送邮件,然后更新3,然后回滚,会发生什么? 3次更新会回滚,但您无法回忆该电子邮件。即使相应的事务已回滚,它也不会发送到收件人的邮箱中。只需要考虑一下.... – 2014-10-20 17:21:58

+0

没有使用用户名和密码的身份验证,仍然缺失 – 2014-10-21 13:49:39