转:http://www.cnblogs.com/peiyinjin/archive/2011/04/02/2002927.html
CREATE OR REPLACE PROCEDURE send_mail(
p_recipient VARCHAR2, -- 邮件接收人
p_subject VARCHAR2, -- 邮件标题
p_message VARCHAR2 -- 邮件正文
)
IS
--下面四个变量请根据实际邮件服务器进行赋值
v_mailhost VARCHAR2(30) := 'smtp.XXX.com'; --SMTP服务器地址
v_user VARCHAR2(30) := 'user'; --登录SMTP服务器的用户名
v_pass VARCHAR2(20) := 'pwd'; --登录SMTP服务器的密码
v_sender VARCHAR2(50) := 'user@XXX.com'; --发送者邮箱,一般与 ps_user 对应
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); --是用 ehlo() 而不是 helo() 函数
--否则会报:ORA-29279: SMTP 永久性错误: 503 5.5.2 Send hello first.
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, v_sender); --设置发件人
UTL_SMTP.rcpt(v_conn, p_recipient); --设置收件人
-- 创建要发送的邮件内容 注意报头信息和邮件正文之间要空一行
v_msg := 'Date:' || TO_CHAR(SYSDATE, 'dd mon yy 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)); --这样写标题和内容都能用中文
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);
END send_mail;
UTL_SMTP.open_data(v_conn); --打开流
UTL_SMTP.write_data(v_conn, 'From:' || v_sender || utl_tcp.CRLF);
UTL_SMTP.write_data(v_conn, 'To:' || p_recipient || utl_tcp.crlf);
UTL_SMTP.write_raw_data(v_conn, UTL_RAW.cast_to_raw(convert('Subject:' || p_subject || utl_tcp.CRLF, 'ZHS16GBK')));
UTL_SMTP.write_raw_data(v_conn, UTL_RAW.cast_to_raw(convert('Content-Type:text/html;charset=GBK' || utl_tcp.CRLF, 'ZHS16GBK')));
UTL_SMTP.write_data(v_conn, utl_tcp.CRLF);
UTL_SMTP.write_raw_data(v_conn, UTL_RAW.cast_to_raw(convert(p_message, 'ZHS16GBK'))); --这样写标题和内容都能用中文
UTL_SMTP.close_data(v_conn); --关闭流
UTL_SMTP.quit(v_conn); --关闭连接
相关推荐
在Oracle数据库管理中,设置邮件自动发送是一项重要的任务,它能帮助DBA(数据库管理员)及时获取数据库的状态信息、警告和错误报告。Oracle 10g企业管理器(Grid Control)提供了一个集成的邮件通知功能,使得...
以下是一个利用Oracle数据库发送邮件的实例代码解析: 1. **UTL_SMTP包**: UTL_SMTP是Oracle提供的一个实用程序包,它包含了一系列过程和函数,用于建立与SMTP服务器的连接,发送邮件头和邮件内容,以及关闭连接...
Workflow支持通知功能,能够在流程达到特定状态时自动发送电子邮件或系统消息给相关的参与者,提醒他们执行下一步操作。 2. **第3个例子:Lookup Types和分支处理Function** Lookup Types允许在流程中定义可选值...
在邮件管理系统中,Oracle将存储用户的邮件信息,包括发件人、收件人、主题、内容、时间戳等,同时可能还包括用户账户信息、权限设置等数据。使用Oracle的优点在于其强大的数据处理能力和安全性。 在本实例中,...
- **Basic**:设置基本的邮件发送信息,如发件人地址等。 - **Database Layer**:配置数据库相关的参数,确保 Notification 数据正确存储。 - **Application Layer**:定义应用程序级别的配置,如邮件模板等。 - **...
为了确保邮件的正确构造和发送,存储过程会根据参数设置构建正确的邮件头信息,包括发件人、收件人、主题、MIME类型等。如果需要SMTP认证,还会使用提供的用户名和密码进行身份验证。 总结来说,这个Oracle存储过程...
- 当事件发生时,可以配置系统发送电子邮件或短信通知相关人员。 4. **创立Agent Listener**: - Agent Listeners是监听事件并执行相应操作的后台服务。例如,创建一个监听订单状态改变的Agent,当订单状态变为...
### 深入浅出Oracle EBS之Workflow实例详解 #### 一、Oracle Workflow 基础 **1.1 工作流概述** Oracle E-Business Suite (EBS) 中的工作流(Workflow)是一项核心的技术组件,它主要用于管理EBS中的业务流程,...
JavaMail 是一个强大的开源库,用于在 Java 应用程序中发送和接收电子邮件。要实现定时发送邮件,我们可以结合 JavaMail 和 Java 计时器框架(如文中提到的 Java Timer)。以下是一个详细的步骤来实现这个功能: 1....
7. **事件与通知**:开发者可以利用API创建自定义的事件监听器,当特定的项目事件发生时,自动触发相应的处理逻辑,如发送电子邮件通知或更新其他系统。 8. **报表和图表**:通过API,开发者可以动态生成报表和图表...
8. OracleHOME_NAMEPagingServer:用于发送调制解调器或电子邮件警告,通常在需要远程警报通知时启用。 9. OracleHOME_NAMENames:Oracle Names服务,作为命名服务器时才需要,提供全局数据库对象的名称解析。默认...
4. 发送确认邮件或短信,可能需要集成第三方API。 第8章 新闻发布系统:本章关注新闻内容的发布和管理: 1. 新闻添加、编辑、删除和展示,涉及到JSP模板和动态数据绑定。 2. 分类管理和标签系统,提高新闻检索效率...
- 周一到周五每天下午5:00发送一封邮件给`youtops@gmail.com`: ```bash 0 17 * * 1-5 mail -s "hi" youtops@gmail.com </tmp/maildata ``` 2. **At命令**:适用于只需要执行一次的任务,此处不再赘述。 通过...
- **增加告警机制**:可以在检测到失效对象时发送邮件或短信通知管理员。 - **记录失效原因**:除了重新编译外,还可以记录导致对象失效的具体原因,方便后续分析。 - **支持多个数据库实例**:对于大型企业来说,...
8. **OracleHOME_NAMEPagingServer**:用于通过调制解调器或电子邮件发送警告通知,手动启动。服务进程PAGNTSRV.EXE,日志文件paging.log。 9. **OracleHOME_NAMENames**:Oracle Names服务,用于DNS解析,仅在...
Oracle 数据库虽然不直接支持邮件发送功能,但可以通过外部程序如 JavaMail 来扩展其邮发能力。`sendmail` 在这里可能指的是一个配置或者工具,用于通过 JavaMail 实现邮件发送。 在使用 JavaMail 扩展 Oracle 的...