• Oracle 10G 使用UTL_SMTP发送中文电子邮件[Z]


    CREATE OR REPLACE PROCEDURE SCOTT.HTML_EMAIL( 
            P_TO                    IN   VARCHAR2, --收件人地址
            P_SUBJECT               IN   VARCHAR2,    --邮件主题
            P_HTML                  IN   VARCHAR2   DEFAULT   NULL--邮件内容支持HTML代码
            ) 
    IS 
            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;
            
            L_ACCOUNT               VARCHAR2(100);
            L_PASSWORD          VARCHAR2(100);
            
            
            P_FROM                  VARCHAR2(200); 
            P_TEXT                  VARCHAR2(200); 
            P_SMTP_HOSTNAME         VARCHAR2(200);
            P_SMTP_PORTNUM         VARCHAR2(200); 
    BEGIN 
            
            P_FROM:='test@163.com'; --发件人地址
            P_SMTP_HOSTNAME:='smtp.163.com'; --smtp服务器
            P_SMTP_PORTNUM:='25';                    --smtp服务器端口号
            L_ACCOUNT:='test@163.com';--登录服务器用账号
            L_PASSWORD:='123456';                    --登录服务器密码
            
             P_TEXT:='there is no text';
             
             
            L_CONNECTION   :=   UTL_SMTP.OPEN_CONNECTION(P_SMTP_HOSTNAME,25); 
            UTL_SMTP.ehLO(L_CONNECTION,P_SMTP_HOSTNAME); --问候服务器,注意此用用了EHLO,没有使用HELO
           
            --输入用户名密码
            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(L_ACCOUNT)))); 
            utl_smtp.command(l_connection,utl_raw.cast_to_varchar2(utl_encode.base64_encode(utl_raw.cast_to_raw(L_PASSWORD)))); 
            
            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); 
    
            ---------------------------------------------------- 
            --   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:= CHR(13)||CHR(10)||'-- '||L_BOUNDARY||CHR(13)||CHR(10); 
    --        L_TEMP:= L_TEMP||'Content-Type:text/plain;charset=us-ascii'||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   test vale
    --        L_TEMP :='我是中国人';       
    --        L_OFFSET   :=   DBMS_LOB.GETLENGTH(L_BODY_HTML)   +   1; 
    --        DBMS_LOB.WRITE(L_BODY_HTML,LENGTH(L_TEMP),L_OFFSET,L_TEMP); 
            
    
            ---------------------------------------------------- 
            --   WRITE   THE   FINAL   HTML   BOUNDARY 
    --        L_TEMP  :=CHR(13)||CHR(10) ||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.write_raw_data(L_CONNECTION, UTL_RAW.cast_to_raw('我是中国人'));
            UTL_SMTP.CLOSE_DATA(L_CONNECTION); 
            UTL_SMTP.QUIT(L_CONNECTION);
           -- dbms_output.put_line(DBMS_LOB.SUBSTR(L_BODY_HTML,DBMS_LOB.GETLENGTH(L_BODY_HTML),1));
            DBMS_LOB.FREETEMPORARY(L_BODY_HTML); 
            dbms_output.put_line(to_char(sysdate,'yyyy-mm-dd hh24:mi:ss')||'发送邮件成功!!!');
    exception
      when others then
      dbms_output.put_line(dbms_utility.format_error_stack);
      dbms_output.put_line(dbms_utility.format_call_stack);
      dbms_output.put_line(sqlerrm);
    END; 
    /

    http://blog.csdn.net/blaider/article/details/5672729

  • 相关阅读:
    iOS开发UI中懒加载的使用方法
    ios archives 出现的是other items而不是iOS Apps的解决方案
    Unable to find a team with the given Team ID或者Failed to code sign的问题解决
    Xcode升级插件失效解决办法-升级版
    iOS 全局禁止横屏,但UIWebView 全屏播放视频,横屏,解决办法
    【iOS进阶】UIWebview加载搜狐视频,自动跳回客户端 问题解决
    Swift学习笔记
    微信分享无响应的解决
    xcode6-添加真机设备
    【iOS系列】-UIWebView加载网页禁止左右滑动
  • 原文地址:https://www.cnblogs.com/huak/p/4128370.html
Copyright © 2020-2023  润新知