JAVA调用存储过程发送邮件

CREATE OR REPLACE PROCEDURE p_sendmail
(      p_recipient IN   varchar2,                                 -- 邮件接收人
       p_subject   IN   varchar2,                                 -- 邮件标题 
       p_message   IN   varchar2                                  -- 邮件正文 
) 
IS
       v_mailhost  varchar2(50) := 'smtp.163.com';                -- SMTP服务器地址 
       v_user      varchar2(50) := 'oracle11gocp';                -- 登录SMTP服务器的用户名;只是用户名,不包括163.com部分 
       v_pass      varchar2(50) := 'xxxxxxxxxxxxxxx';             -- 登录SMTP服务器的密码 
       v_sender    varchar2(50) := 'oracle11gocp@163.com';        -- 发送者邮箱
       v_conn      utl_smtp.connection;                           -- 到邮件服务器的连接 
       v_msg       varchar2(4000);                                -- 邮件内容 
BEGIN

      v_conn := utl_smtp.open_connection(v_mailhost, 25);
      utl_smtp.ehlo(v_conn, v_mailhost);
      utl_smtp.command(v_conn, 'AUTH LOGIN');                     -- smtp服务器登录校验
      utl_smtp.command(v_conn,utl_raw.cast_to_varchar2(utl_encode.base64_encode(utl_raw.cast_to_raw(v_user))));
      utl_smtp.command(v_conn,utl_raw.cast_to_varchar2(utl_encode.base64_encode(UTL_RAW.cast_to_raw(v_pass))));
      utl_smtp.mail(v_conn, ' ');             -- 设置发件人
      utl_smtp.rcpt(v_conn, ' ');          -- 设置收件人
      
      v_msg := 'Date:' || to_char(sysdate, 'yyyy-mm-dd hh24:mi:ss')                       ||
               utl_tcp.crlf || 'From: '    || v_sender    || ' '  ||
               utl_tcp.crlf || 'To: '      || p_recipient || ' '  ||
               utl_tcp.crlf || 'Subject: ' || p_subject   || utl_tcp.crlf                 ||
               utl_tcp.crlf || p_message; 
               
      utl_smtp.open_data(v_conn);                                 -- 打开流 
      utl_smtp.write_raw_data(v_conn, utl_raw.cast_to_raw(v_msg));-- write_raw_data函数支持中文 
      utl_smtp.close_data(v_conn);                                -- 关闭流 
      utl_smtp.quit(v_conn);                                      -- 关闭连接 

exception
  WHEN others THEN
      dbms_output.put_line(dbms_utility.format_error_stack);
      dbms_output.put_line(dbms_utility.format_call_stack);
      dbms_output.put_line('sqlcode is :' || sqlcode);
      dbms_output.put_line('sqlerrm is :' || sqlerrm);
END p_sendmail;


import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;


public class CallProc {
    public static void main(String[] args) {

        try {
            DriverManager.registerDriver(new oracle.jdbc.OracleDriver());
            Class.forName("oracle.jdbc.driver.OracleDriver");
            String url = "jdbc:oracle:thin:@192.168.106.161:1521:oradb";
            String username = "test";
            String password = "test";
            Connection conn = DriverManager.getConnection(url, username,
                    password);
            String sql = "{call p_sendmail(?,?,?)}";
            CallableStatement cstmt = conn.prepareCall(sql);
            cstmt.setString(1, "805779675@qq.com");
            cstmt.setString(2, "title test");
            cstmt.setString(3, "content test");
            cstmt.execute();
            
            cstmt.close();
            conn.close();
        } catch (SQLException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }

    }
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值