服务器 频道

使用oracle发送邮件

  【IT168 服务器学院】通过在存储过程中调用此存储过程来监控存储过程中所产生的错误,以便尽快解决。

  CREATE OR REPLACE
  PROCEDURE send_mail (
     p_recipient   IN   VARCHAR2,
     p_message     IN   VARCHAR2,
     p_subject     IN   VARCHAR2 DEFAULT    ''Oracle Perf Report ''
                                         || TO_CHAR (SYSDATE,
                                                     ''yyyy-mm-dd hh24:mi:ss''
                                                    ),
     p_sender      IN   VARCHAR2 DEFAULT ''test@sina.com''
  )
  IS
     v_mailhost   VARCHAR2 (30)       := ''test.sina.com'';
                                                               --SMTP服务器地址
     mail_conn    UTL_SMTP.connection;
     msg          VARCHAR2 (4000);
     p_user       VARCHAR2 (30)       := ''test@sina.com'';
     --登录SMTP服务器的用户名
     p_pass       VARCHAR2 (30)       := ''test'';    --登录SMTP服务器的密码
  BEGIN
    /* 创建要发送的邮件内容 注意报头信息和邮件正文之间要空一行 */
     msg :=
           ''Date:''
        || TO_CHAR (SYSDATE, ''dd mon yy hh24:mi:ss'')
        || UTL_TCP.crlf
        || ''From: ''
        || p_sender
        || ''<''
        || p_sender
        || ''>''
        || UTL_TCP.crlf
        || ''To: ''
        || p_recipient
        || ''<''
        || p_recipient
        || ''>''
        || UTL_TCP.crlf
        || ''Subject: ''
        || p_subject
        || UTL_TCP.crlf
        || UTL_TCP.crlf
        || p_message;
     -- dbms_output.put_line(msg);
     mail_conn := UTL_SMTP.open_connection (v_mailhost, 25);
     UTL_SMTP.helo (mail_conn, v_mailhost);
       /* smtp服务器登录校验 */
     UTL_SMTP.command (mail_conn, ''AUTH LOGIN'');
     UTL_SMTP.command
        (mail_conn,
         UTL_RAW.cast_to_varchar2
                          (UTL_ENCODE.base64_encode (UTL_RAW.cast_to_raw (p_user)
                                                    )
                          )
        );
     UTL_SMTP.command
        (mail_conn,
         UTL_RAW.cast_to_varchar2
                          (UTL_ENCODE.base64_encode (UTL_RAW.cast_to_raw (p_pass)
                                                    )
                          )
        );
     UTL_SMTP.mail (mail_conn, p_sender);
     UTL_SMTP.rcpt (mail_conn, p_recipient);
       /* 发送数据 */
     UTL_SMTP.DATA (mail_conn, msg);
     UTL_SMTP.quit (mail_conn);
  EXCEPTION
     WHEN OTHERS
     THEN
        DBMS_OUTPUT.put_line (DBMS_UTILITY.format_error_stack);
        DBMS_OUTPUT.put_line (DBMS_UTILITY.format_call_stack);
        NULL;
  END send_mail;

   

0
相关文章