Oracle9发送邮件过程,支持中文邮件与POP3的验证
2007-05-07 17:36
399 查看
CREATE OR REPLACE PROCEDURE "SEND_MAIL" (
P_TO IN VARCHAR2,
P_FROM IN VARCHAR2 DEFAULT 'ljx@mail.com',
P_TEXT IN VARCHAR2 DEFAULT '',
P_HTML IN VARCHAR2 DEFAULT '',
P_SUBJECT IN VARCHAR2 DEFAULT 'ERP系统异常报告. '||TO_CHAR(SYSDATE,'yyyy-mm-dd hh24:mi:ss'))
IS
P_SMTP_HOSTNAME VARCHAR2(20):='lxj-mail.com';
P_SMTP_PORTNUM VARCHAR2(2):='25';
P_USER VARCHAR2(30) := '用户名'; -- 登录SMTP服务器的用户名
P_PASS VARCHAR2(30) := '密码'; -- 登录SMTP服务器的密码
L_BOUNDARY VARCHAR2(255) DEFAULT 'a1b2c3d4e3f2g1';
L_CONNECTION UTL_SMTP.CONNECTION;
L_BODY_HTML CLOB := EMPTY_CLOB; --THIS LOB WILL BE THE EMAIL MESSAGE
L_OFFSET NUMBER;
L_AMMOUNT NUMBER;
L_TEMP VARCHAR2(32767) DEFAULT NULL;
BEGIN
L_CONNECTION := UTL_SMTP.OPEN_CONNECTION( P_SMTP_HOSTNAME, P_SMTP_PORTNUM );
UTL_SMTP.HELO( L_CONNECTION,P_SMTP_HOSTNAME);
/* SMTP服务器登录校验 */
UTL_SMTP.COMMAND(L_CONNECTION, 'AUTH LOGIN');
UTL_SMTP.COMMAND(L_CONNECTION, UTL_RAW.CAST_TO_VARCHAR2(UTL_ENCODE.BASE64_ENCODE(UTL_RAW.CAST_TO_RAW(P_USER))));
UTL_SMTP.COMMAND(L_CONNECTION, UTL_RAW.CAST_TO_VARCHAR2(UTL_ENCODE.BASE64_ENCODE(UTL_RAW.CAST_TO_RAW(P_PASS))));
UTL_SMTP.MAIL( L_CONNECTION, P_FROM );
UTL_SMTP.RCPT( L_CONNECTION, P_TO );
L_TEMP := L_TEMP || 'MIME-Version: 1.0' || CHR(13) || CHR(10);
L_TEMP := L_TEMP || 'To: ' || P_TO || CHR(13) || CHR(10);
L_TEMP := L_TEMP || 'From: ' || P_FROM || CHR(13) || CHR(10);
L_TEMP := L_TEMP || 'Subject: ' || P_SUBJECT || CHR(13) || CHR(10);
L_TEMP := L_TEMP || 'Reply-To: ' || P_FROM || CHR(13) || CHR(10);
L_TEMP := L_TEMP || 'Content-Type: multipart/alternative; boundary=' ||
CHR(34) || L_BOUNDARY || CHR(34) || CHR(13) ||
CHR(10);
--CHR(34) IS "
----------------------------------------------------
-- Write the headers
dbms_lob.createtemporary( l_body_html, false, 10 );
dbms_lob.write(l_body_html,length(l_temp),1,l_temp);
----------------------------------------------------
-- Write the text boundary
l_offset := dbms_lob.getlength(l_body_html) + 1;
l_temp := '--' || l_boundary || chr(13)||chr(10);
l_temp := l_temp || 'content-type: text/plain; Charset=GB2312' ||
chr(13) || chr(10) || chr(13) || chr(10);
dbms_lob.write(l_body_html,length(l_temp),l_offset,l_temp);
----------------------------------------------------
-- Write the plain text portion of the email
l_offset := dbms_lob.getlength(l_body_html) + 1;
dbms_lob.write(l_body_html,length(p_text),l_offset,p_text);
----------------------------------------------------
-- Write the HTML boundary
l_temp := chr(13)||chr(10)||chr(13)||chr(10)||'--' || l_boundary ||
chr(13) || chr(10);
l_temp := l_temp || 'content-type: text/html;' ||
chr(13) || chr(10) || chr(13) || chr(10);
l_offset := dbms_lob.getlength(l_body_html) + 1;
dbms_lob.write(l_body_html,length(l_temp),l_offset,l_temp);
----------------------------------------------------
-- Write the HTML portion of the message
l_offset := dbms_lob.getlength(l_body_html) + 1;
dbms_lob.write(l_body_html,length(p_html),l_offset,p_html);
----------------------------------------------------
-- Write the final html boundary
l_temp := chr(13) || chr(10) || '--' || l_boundary || '--' || chr(13);
l_offset := dbms_lob.getlength(l_body_html) + 1;
dbms_lob.write(l_body_html,length(l_temp),l_offset,l_temp);
----------------------------------------------------
-- Send the email in 1900 byte chunks to UTL_SMTP
l_offset := 1;
l_ammount := 1900;
utl_smtp.open_data(l_connection);
while l_offset < dbms_lob.getlength(l_body_html) loop
utl_smtp.write_raw_data(l_connection,
UTL_RAW.CAST_TO_RAW(dbms_lob.substr(l_body_html,l_ammount,l_offset)));
l_offset := l_offset + l_ammount ;
l_ammount := least(1900,dbms_lob.getlength(l_body_html) - l_ammount);
end loop;
utl_smtp.close_data(l_connection);
utl_smtp.quit( l_connection );
dbms_lob.freetemporary(l_body_html);
end;
/
P_TO IN VARCHAR2,
P_FROM IN VARCHAR2 DEFAULT 'ljx@mail.com',
P_TEXT IN VARCHAR2 DEFAULT '',
P_HTML IN VARCHAR2 DEFAULT '',
P_SUBJECT IN VARCHAR2 DEFAULT 'ERP系统异常报告. '||TO_CHAR(SYSDATE,'yyyy-mm-dd hh24:mi:ss'))
IS
P_SMTP_HOSTNAME VARCHAR2(20):='lxj-mail.com';
P_SMTP_PORTNUM VARCHAR2(2):='25';
P_USER VARCHAR2(30) := '用户名'; -- 登录SMTP服务器的用户名
P_PASS VARCHAR2(30) := '密码'; -- 登录SMTP服务器的密码
L_BOUNDARY VARCHAR2(255) DEFAULT 'a1b2c3d4e3f2g1';
L_CONNECTION UTL_SMTP.CONNECTION;
L_BODY_HTML CLOB := EMPTY_CLOB; --THIS LOB WILL BE THE EMAIL MESSAGE
L_OFFSET NUMBER;
L_AMMOUNT NUMBER;
L_TEMP VARCHAR2(32767) DEFAULT NULL;
BEGIN
L_CONNECTION := UTL_SMTP.OPEN_CONNECTION( P_SMTP_HOSTNAME, P_SMTP_PORTNUM );
UTL_SMTP.HELO( L_CONNECTION,P_SMTP_HOSTNAME);
/* SMTP服务器登录校验 */
UTL_SMTP.COMMAND(L_CONNECTION, 'AUTH LOGIN');
UTL_SMTP.COMMAND(L_CONNECTION, UTL_RAW.CAST_TO_VARCHAR2(UTL_ENCODE.BASE64_ENCODE(UTL_RAW.CAST_TO_RAW(P_USER))));
UTL_SMTP.COMMAND(L_CONNECTION, UTL_RAW.CAST_TO_VARCHAR2(UTL_ENCODE.BASE64_ENCODE(UTL_RAW.CAST_TO_RAW(P_PASS))));
UTL_SMTP.MAIL( L_CONNECTION, P_FROM );
UTL_SMTP.RCPT( L_CONNECTION, P_TO );
L_TEMP := L_TEMP || 'MIME-Version: 1.0' || CHR(13) || CHR(10);
L_TEMP := L_TEMP || 'To: ' || P_TO || CHR(13) || CHR(10);
L_TEMP := L_TEMP || 'From: ' || P_FROM || CHR(13) || CHR(10);
L_TEMP := L_TEMP || 'Subject: ' || P_SUBJECT || CHR(13) || CHR(10);
L_TEMP := L_TEMP || 'Reply-To: ' || P_FROM || CHR(13) || CHR(10);
L_TEMP := L_TEMP || 'Content-Type: multipart/alternative; boundary=' ||
CHR(34) || L_BOUNDARY || CHR(34) || CHR(13) ||
CHR(10);
--CHR(34) IS "
----------------------------------------------------
-- Write the headers
dbms_lob.createtemporary( l_body_html, false, 10 );
dbms_lob.write(l_body_html,length(l_temp),1,l_temp);
----------------------------------------------------
-- Write the text boundary
l_offset := dbms_lob.getlength(l_body_html) + 1;
l_temp := '--' || l_boundary || chr(13)||chr(10);
l_temp := l_temp || 'content-type: text/plain; Charset=GB2312' ||
chr(13) || chr(10) || chr(13) || chr(10);
dbms_lob.write(l_body_html,length(l_temp),l_offset,l_temp);
----------------------------------------------------
-- Write the plain text portion of the email
l_offset := dbms_lob.getlength(l_body_html) + 1;
dbms_lob.write(l_body_html,length(p_text),l_offset,p_text);
----------------------------------------------------
-- Write the HTML boundary
l_temp := chr(13)||chr(10)||chr(13)||chr(10)||'--' || l_boundary ||
chr(13) || chr(10);
l_temp := l_temp || 'content-type: text/html;' ||
chr(13) || chr(10) || chr(13) || chr(10);
l_offset := dbms_lob.getlength(l_body_html) + 1;
dbms_lob.write(l_body_html,length(l_temp),l_offset,l_temp);
----------------------------------------------------
-- Write the HTML portion of the message
l_offset := dbms_lob.getlength(l_body_html) + 1;
dbms_lob.write(l_body_html,length(p_html),l_offset,p_html);
----------------------------------------------------
-- Write the final html boundary
l_temp := chr(13) || chr(10) || '--' || l_boundary || '--' || chr(13);
l_offset := dbms_lob.getlength(l_body_html) + 1;
dbms_lob.write(l_body_html,length(l_temp),l_offset,l_temp);
----------------------------------------------------
-- Send the email in 1900 byte chunks to UTL_SMTP
l_offset := 1;
l_ammount := 1900;
utl_smtp.open_data(l_connection);
while l_offset < dbms_lob.getlength(l_body_html) loop
utl_smtp.write_raw_data(l_connection,
UTL_RAW.CAST_TO_RAW(dbms_lob.substr(l_body_html,l_ammount,l_offset)));
l_offset := l_offset + l_ammount ;
l_ammount := least(1900,dbms_lob.getlength(l_body_html) - l_ammount);
end loop;
utl_smtp.close_data(l_connection);
utl_smtp.quit( l_connection );
dbms_lob.freetemporary(l_body_html);
end;
/
相关文章推荐
- Oracle 存储过程中发送邮件,并支持用户验证、中文标题和内容
- Oracle 存储过程中发送邮件,并支持用户验证、中文标题和内容
- Oracle 存储过程中发送邮件,并支持用户验证、中文标题和内容
- 用ORACLE 存储过程发送HTML邮件,支持文本和HTML两种格式,增加防中文乱码
- Oracle 发送邮件 存储过程
- 在.net中支持ESMTP身份验证的邮件发送简单讲解
- oracle发送邮件存储过程:
- Oracle 11g 使用 UTL_MAIL 包实现存储过程发送邮件
- C#发送邮件异常:根据验证过程,远程证书无效,何解???
- C#实现.Net对邮件进行DKIM签名和验证,支持附件,发送邮件签名后直接投递到对方服务器(无需己方邮件服务器)
- python2.7 TK界面邮件发送(支持中文)
- Oracle 存储过程发送邮件
- Oracle中用于发送邮件的存储过程
- Oracle发送邮件存储过程
- oracle 存储过程发送邮件
- Oracle发送邮件,支持HTML,多收件人,多附件
- Oracle 发送邮件 存储过程
- python发送邮件脚本(支持多个附件,中文)
- C#写的支持SMTP验证的发送邮件组件
- python发送邮件示例(支持中文邮件标题)