oracle发邮件没有反应,执行Oracle发送邮件的正确操作步骤

以下的文章主要是以实例演示的方式来讲解如何正确的执行Oracle发送邮件,以下的文章就就是对其实际的操作步骤的讲解,如果你对其相关的实际操作有兴趣的话,你就可以对以下的文章点击观看了。

LINUX AS3+Oracle 9.2||10.20.

从Oracle发送邮件:

示例如下:

具体的测试环境:LINUX AS3 , Oracle 9.0.2.4

SQL>select * from v$version;

BANNER

Oracle9i Enterprise Edition Release 9.2.0.4.0 - Production

PL/SQL Release 9.2.0.4.0 - Production

CORE 9.2.0.3.0 Production

TNS for Linux: Version 9.2.0.4.0 - Production

NLSRTL Version 9.2.0.4.0 - Production

SQL>select * from v$version;

Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Prod

PL/SQL Release 10.2.0.1.0 - Production

CORE 10.2.0.1.0 Production

TNS for Linux: Version 10.2.0.1.0 - Production

NLSRTL Version 10.2.0.1.0 - Production

MAIL服务器为WIN2003,WINMAIL

1.保证ORACLE服务器到MAIL服务器网络畅通,25端口打开

2.创建Oracle发送邮件的procedure如下:

CREATE OR REPLACE PROCEDURE SEND_MAIL

(as_sender in varchar2, --邮件发送者

as_recp in varchar2, --邮件接收者

as_subject in varchar2, --邮件标题

as_msg_body in varchar2) --邮件内容

IS

ls_mailhost varchar2(30):='mail server'; -- address or IP

lc_mail_conn utl_smtp.connection;

ls_subject varchar2(100);

ls_msg_body varchar2(20000);

ls_username varchar2(256):='usercode';

ls_password varchar2(256):='password';

BEGIN

lc_mail_conn:=utl_smtp.open_connection(ls_mailhost, 25);

utl_smtp.helo(lc_mail_conn, ls_mailhost);

utl_smtp.command(lc_mail_conn, 'AUTH LOGIN');

utl_smtp.command(lc_mail_conn, demo_base64.encode(utl_raw.cast_to_raw(ls_username)));

utl_smtp.command(lc_mail_conn, demo_base64.encode(utl_raw.cast_to_raw(ls_password)));

ls_subject:='Subject: ['|| upper(sys_context('userenv', 'db_name')) || '] - ' || as_subject;

ls_msg_body:=as_msg_body;

utl_smtp.mail(lc_mail_conn, ''); --这里的'

utl_smtp.rcpt(lc_mail_conn, '');--这里的'

utl_smtp.open_data(lc_mail_conn);

ls_msg_body:='From: '|| as_sender || chr(13) || chr(10) || 'To: ' || as_recp || chr(13) || chr(10) || ls_subject ||

chr(13) || chr(10) || chr(13) || chr(10) || ls_msg_body;

utl_smtp.write_raw_data(lc_mail_conn, utl_raw.cast_to_raw(ls_msg_body)); --这样写subject可以支持中文但body内容不支持中文;

-- utl_smtp.write_data(lc_mail_conn, ls_msg_body); --这样写subject不支持中文

utl_smtp.close_data(lc_mail_conn);

utl_smtp.quit(lc_mail_conn);

EXCEPTION

WHEN UTL_SMTP.INVALID_OPERATION THEN

dbms_output.put_line('invalid operation');

WHEN UTL_SMTP.TRANSIENT_ERROR THEN

dbms_output.put_line('transient error');

WHEN UTL_SMTP.PERMANENT_ERROR THEN

dbms_output.put_line('permanent error');

WHEN OTHERS THEN

dbms_output.put_line('others');

end send_mail;

3.执行Oracle发送邮件:

exec send_mail('heyu@163.net','admin@163.net','我我','this is a oracle test mail');

注意事项:上面的过程如果在编译中出现demo_base64.encode must be declared,请大家创建下面的包和包体;

CREATE OR REPLACE PACKAGE demo_base64 IS

-- Base64-encode a piece of binary data.

--

-- Note that this encode function does not split the encoded text into

-- multiple lines with no more than 76 bytes each as required by

-- the MIME standard.

以上的相关内容就是对Oracle发送邮件的介绍,望你能有所收获。

  • 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、付费专栏及课程。

余额充值