使用oracle发送mail

在网上看到一小段procedure可以用来发mail,测试了一下没问题,贴上来备忘

CREATE OR REPLACE PROCEDURE send_email (
p_recipient IN VARCHAR2,
p_message IN VARCHAR2,
p_subject IN VARCHAR2 default '',
p_sender IN VARCHAR2 default 'TestingDB@163.com')
IS
crlf varchar2(2) := chr(13) || chr(10);
v_mailhost varchar2(30) := '192.168.199.34';
mail_conn utl_smtp.connection;
msg varchar2(4000) := 'Date:' ||
to_char(sysdate,'dd mon yy hh24:mi:ss') || crlf ||
'From: ' || p_sender || '' ||crlf ||
'Subject: '||p_subject || crlf||
'To: '|| p_recipient || '' ||crlf||
p_message;
begin
mail_conn := utl_smtp.open_connection(v_mailhost,25);
utl_smtp.helo(mail_conn,v_mailhost);
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);
end;

调用如下:

exec send_email(收件人,内容,主题,发件人);


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/1698901/viewspace-103266/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/1698901/viewspace-103266/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Oracle数据库可以使用UTL_SMTP包发送电子邮件。UTL_SMTP是Oracle提供的一个包,可以通过SMTP协议发送电子邮件。下面是一个简单的例子,展示如何使用UTL_SMTP包在Oracle数据库中自动发送电子邮件。 假设你已经有了一个包含要发送电子邮件的收件人地址、主题和正文的表。以下是使用UTL_SMTP包发送电子邮件的步骤: 1. 首先,你需要在Oracle数据库中启用UTL_SMTP包。你可以使用以下命令启用UTL_SMTP包: ```sql EXECUTE UTL_MAIL.ENABLE; ``` 2. 接下来,你需要编写一个存储过程,该存储过程从包含电子邮件数据的表中选择数据,并使用UTL_SMTP包发送电子邮件。以下是一个例子: ```sql CREATE OR REPLACE PROCEDURE send_email AS -- 声明变量 v_mailhost VARCHAR2(255) := 'your_mail_host'; v_port NUMBER := 25; v_sender VARCHAR2(255) := 'sender_email'; v_username VARCHAR2(255) := 'sender_username'; v_password VARCHAR2(255) := 'sender_password'; v_recipient VARCHAR2(255); v_subject VARCHAR2(255); v_message VARCHAR2(4000); v_conn UTL_SMTP.CONNECTION; BEGIN -- 连接SMTP服务器 v_conn := UTL_SMTP.OPEN_CONNECTION(v_mailhost, v_port); UTL_SMTP.HELO(v_conn, v_mailhost); UTL_SMTP.AUTH(v_conn, v_username, v_password); -- 循环遍历邮件表中的每一行数据 FOR r_email IN (SELECT recipient, subject, message FROM email_table) LOOP -- 设置收件人地址、主题和正文 v_recipient := r_email.recipient; v_subject := r_email.subject; v_message := r_email.message; -- 发送电子邮件 UTL_SMTP.MAIL(v_conn, v_sender); UTL_SMTP.RCPT(v_conn, v_recipient); UTL_SMTP.DATA(v_conn, 'Subject: ' || v_subject || UTL_TCP.CRLF || 'To: ' || v_recipient || UTL_TCP.CRLF || 'From: ' || v_sender || UTL_TCP.CRLF || UTL_TCP.CRLF || v_message); END LOOP; -- 关闭连接 UTL_SMTP.QUIT(v_conn); EXCEPTION -- 处理异常 WHEN OTHERS THEN UTL_SMTP.CLOSE_CONNECTION(v_conn); RAISE; END; ``` 在上面的存储过程中,你需要将 `v_mailhost`、`v_port`、`v_sender`、`v_username` 和 `v_password` 替换为你自己的邮件服务器和发件人信息。该存储过程从 `email_table` 表中选择数据,并将每个电子邮件发送给相应的收件人。 3. 最后,你可以使用以下命令调用存储过程并发送电子邮件: ```sql EXECUTE send_email; ``` 这将会发送 `email_table` 表中的所有电子邮件。你可以在表中添加或删除数据,以控制要发送的电子邮件。 需要注意的是,为了使用UTL_SMTP包,你需要有相应的权限。另外,如果你的邮件服务器需要SSL或TLS连接,你需要使用UTL_SMTP包的SSL或TLS版本。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值