2014-10-20 164 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