UTL_SMTP发送邮件,防中文乱码处理!

来源:互联网 发布:分水岭算法图像分割 编辑:程序博客网 时间:2024/05/07 01:52
DECLARE  V_CONN                UTL_SMTP.CONNECTION;  L_REC_ARR             ARRAY;  V_DB_NLS_CHARACTERSET VARCHAR2(40);  CURSOR L_TEMP IS    SELECT COL1, COL2, COL3, COL4, COL5, COL6, COL7 FROM TABLE_NAME;  ;  L_REC_LIST    VARCHAR2(32767);  BODY_HTML_S   VARCHAR2(32767);  BODY_HTML_E   VARCHAR2(20);  BODY_HTML_C   VARCHAR2(32767);  L_MEG_CONTENT VARCHAR2(32767);BEGIN  --获取服务器字符集  SELECT VALUE    INTO V_DB_NLS_CHARACTERSET    FROM NLS_DATABASE_PARAMETERS   WHERE PARAMETER = 'NLS_CHARACTERSET';  --获取邮件接收人列表,格式如(xxx1@126.com,xxx2@126.com,xxx3@126.com...)  SELECT ADL.TO_RECIPIENTS    INTO L_REC_LIST    FROM ALR_DISTRIBUTION_LISTS ADL   WHERE ADL.NAME = 'ALERT_REC_LIST';  --表头HTML代码  BODY_HTML_S := '<table width="100%" border="1"  cellspacing="1" cellpadding="0" bgcolor="#000000" style="font-size:12px; font-family:Arial, Helvetica, sans-serif">' ||                 '<tr>' ||                 '<th bgcolor="#0099ff" scope="col">Header 1</th>' ||                 '<th bgcolor="#0099ff" scope="col">Header 2</th>' ||                 '<th bgcolor="#0099ff" scope="col">Header 3</th>' ||                 '<th bgcolor="#0099ff" scope="col">Header 4</th>' ||                 '<th bgcolor="#0099ff" scope="col">Header 5</th>' ||                 '<th bgcolor="#0099ff" scope="col">Header 6</th>' ||                 '<th bgcolor="#0099ff" scope="col">Header 7</th>' ||                 '</tr>';  --循环数据行  FOR R IN L_TEMP LOOP    BODY_HTML_C := BODY_HTML_C || '<tr>' ||                   '<td width="8%" bgcolor="#FFFFFF" align="left">' ||                   NVL(R.COL1, ' ') || '</td>' || UTL_TCP.CRLF ||                   '<td width="12%" bgcolor="#FFFFFF" align="left">' ||                   NVL(R.COL2, ' ') || '</td>' || UTL_TCP.CRLF ||                   '<td width="20%" bgcolor="#FFFFFF" align="left">' ||                   NVL(R.COL3, ' ') || '</td>' || UTL_TCP.CRLF ||                   '<td width="10%" bgcolor="#FFFFFF" align="left">' ||                   NVL(R.COL4, ' ') || '</td>' || UTL_TCP.CRLF ||                   '<td width="8%" bgcolor="#FFFFFF" align="center">' ||                   NVL(R.COL5, ' ') || '</td>' || UTL_TCP.CRLF ||                   '<td width="8%" bgcolor="#FFFFFF" align="center">' ||                   NVL(R.COL6, ' ') || '</td>' || UTL_TCP.CRLF ||                   '<td width="8%" bgcolor="#FFFFFF" align="center">' ||                   NVL(R.COL7, ' ') || '</td>' || UTL_TCP.CRLF ||                   '</tr>';  END LOOP;  --表格结束代码  BODY_HTML_E := '</table>';  --连接邮件服务器  V_CONNECTION := UTL_SMTP.OPEN_CONNECTION('10.2.3.111', 25);  UTL_SMTP.HELO(V_CONN, '10.2.3.111');  UTL_SMTP.COMMAND(V_CONN, 'AUTH LOGIN');  --身份验证,如果服务器允许匿名,此部分可以注释。  UTL_SMTP.COMMAND(V_CONN,                   UTL_RAW.CAST_TO_VARCHAR2(UTL_ENCODE.BASE64_ENCODE(UTL_RAW.CAST_TO_RAW('ebs_alert@xxxx.cn'))));  UTL_SMTP.COMMAND(V_CONN,                   UTL_RAW.CAST_TO_VARCHAR2(UTL_ENCODE.BASE64_ENCODE(UTL_RAW.CAST_TO_RAW('*****'))));  --发件人  UTL_SMTP.MAIL(V_CONN, '"Workflow Mailer"<ebs_alert@xxxx.cn>');  --按","字符拆分收件人字符串,并返回伪数组.  L_REC_ARR := SPLIT(L_REC_LIST, ',');  --收件人(多个接收人可以循环该代码)  FOR I IN 1 .. L_REC_ARR.COUNT LOOP    UTL_SMTP.RCPT(V_CONN, L_REC_ARR(I) || '<' || L_REC_ARR(I) || '>');  END LOOP;  UTL_SMTP.OPEN_DATA(V_CONN);  --发件人  UTL_SMTP.WRITE_DATA(V_CONN,                      'From: ' || 'ebs_alert@xxxx.cn' || UTL_TCP.CRLF);  L_MEG_CONTENT := L_MEG_CONTENT || 'MIME-Version: 1.0' || UTL_TCP.CRLF;  --收件人(多个接收人可以循环该代码)  FOR I IN 1 .. L_REC_ARR.COUNT LOOP    L_MEG_CONTENT := L_MEG_CONTENT || 'To: ' || L_REC_ARR(I) || '<' ||                     L_REC_ARR(I) || '>' || UTL_TCP.CRLF;  END LOOP;  --开始拼接邮件格式字符串  L_MEG_CONTENT := L_MEG_CONTENT || 'Subject: ' || '这里是邮件主题 ' ||                   UTL_TCP.CRLF;  L_MEG_CONTENT := L_MEG_CONTENT ||                   'Content-Type: text/html;charset=gb2312' || UTL_TCP.CRLF;  L_MEG_CONTENT := L_MEG_CONTENT || 'Content-Transfer-Encoding: 8bit' ||                   UTL_TCP.CRLF;  --邮件输出(防乱码处理)  UTL_SMTP.WRITE_RAW_DATA(V_CONN,                          UTL_RAW.CAST_TO_RAW(CONVERT(L_MEG_CONTENT ||                                                      BODY_HTML_S ||                                                      BODY_HTML_C ||                                                      BODY_HTML_E                                                      UTL_TCP.CRLF,                                                      'ZHS16GBK',                                                      V_DB_NLS_CHARACTERSET)));  UTL_SMTP.CLOSE_DATA(V_CONNECTION);  UTL_SMTP.QUIT(V_CONNECTION);END;

原创粉丝点击