Chinaunix首页 | 论坛 | 博客
  • 博客访问: 231254
  • 博文数量: 47
  • 博客积分: 1630
  • 博客等级: 上尉
  • 技术积分: 972
  • 用 户 组: 普通用户
  • 注册时间: 2008-02-20 12:52
文章存档

2013年(12)

2012年(6)

2010年(27)

2009年(2)

我的朋友

分类: Oracle

2010-06-04 22:38:37

发送邮件的实例
创建公用Package:
create or replace package xx_mail_api is
procedure sendmail(p_err_buf out varchar2
,p_ret_code out number
,p_sendor in varchar2
,p_recipients in varchar2
,p_subject in varchar2
,p_message in varchar2
,p_smtp_server in varchar2 default null);
end xx_mail_api;
--Body
create or replace package body xx_mail_api is
procedure sendmail(p_err_buf out varchar2
,p_ret_code out number
,p_sendor in varchar2
,p_recipients in varchar2
,p_subject in varchar2
,p_message in varchar2
,p_smtp_server in varchar2 default null) is
v_mailhost varchar2(100);
v_mail_conn utl_smtp.connection;
v_error_exception exception;
v_stage varchar2(1000);
v_boundary varchar2(255) default '001';
procedure populate_smtp_server is
begin
v_stage := 'populating the smtp server...';
select flv.description
into v_mailhost
from fnd_lookup_values flv
,fnd_lookup_types flt
where flt.lookup_type = flv.lookup_type
and flt.lookup_type = 'XX_MAIL_SMTP_SERVER'
and flv.language = 'ZHS'
and flv.lookup_code = upper(nvl(p_smtp_server, 'CN_SERVER'));
end populate_smtp_server;
procedure split_recipients is
c_delimeter varchar2(1) := ';';
v_index number := 0;
v_recipients varchar2(1000) := nvl(p_recipients, '');
begin
v_stage := 'spliting the recipients information...';
v_index := instr(v_recipients, c_delimeter);
loop
exit when v_index <= 0;
utl_smtp.rcpt(v_mail_conn, rtrim(ltrim(substr(v_recipients, 1, v_index - 1))));
v_recipients := substr(v_recipients, v_index + 1);
v_index := instr(v_recipients, c_delimeter);
end loop;
utl_smtp.rcpt(v_mail_conn, rtrim(ltrim(v_recipients)));
end split_recipients;
begin
populate_smtp_server;
v_stage := 'connecting the mailhost...';
v_mail_conn := utl_smtp.open_connection(v_mailhost, 25);
v_stage := 'hello of the mail server...';
utl_smtp.helo(v_mail_conn, v_mailhost);
utl_smtp.mail(v_mail_conn, p_sendor);
split_recipients;
v_stage := 'populating the other information for the email...';
utl_smtp.open_data(v_mail_conn);
utl_smtp.write_raw_data(v_mail_conn,
utl_raw.cast_to_raw('MIME-Version: 1.0' || chr(13) || chr(10) || 'To: ' || p_recipients ||
chr(13) || chr(10) || 'From: ' || p_sendor || chr(13) || chr(10) ||
'Subject:' || p_subject || chr(13) || chr(10) || 'Reply-To: ' ||
p_sendor || chr(13) || chr(10) ||
'Content-Type: multipart/alternative;' || ' boundary=' || chr(34) ||
v_boundary || chr(34) || chr(13) || chr(10) || '--' || v_boundary ||
chr(13) || chr(10) || 'content-type: text/plain; Charset=utf-8' ||
chr(13) || chr(10) || chr(13) || chr(10) || p_message));
utl_smtp.close_data(v_mail_conn);
utl_smtp.quit(v_mail_conn);
exception
when others then
p_err_buf := 'Error in ' || v_stage || ' Error Code:' || sqlcode || '. Error Msg:' || sqlerrm;
p_ret_code := 2;
end sendmail;
end xx_mail_api;
--调用:
declare
p_err_buf varchar2(3000);
p_ret_code varchar2(3000);
begin
xx_mail_api.sendmail(p_err_buf,p_ret_code,'ERP@Hotmail.com',','Test','测试!',null);
end;
阅读(1461) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~