v_msg        VARCHAR2 (4000);
v_msg := '中文测试from Bugtrace test email.';
UTL_SMTP.write_raw_data (v_conn, UTL_RAW.cast_to_raw (v_msg));
这样OK阿~

解决方案 »

  1.   

    出现乱码“,您好 ”
      

  2.   

    function  EncodeBase64(i_str  varchar2)  return  varchar2  is    
          begin    
              return  twd_base64.encode(  utl_raw.cast_to_raw(i_str)  );    
          end;    
          --  EncodeAddress    
          function  EncodeAddress(i_str  varchar2)  return  varchar2  is    
          begin    
      

  3.   

    楼上的,是不是这样写呢?
    utl_smtp.data(conn, 'MIME-Version: 1.0' ||crlf||'Content-type: text/html;Charset=GB2312' || crlf||EncodeBase64('您好!'));
      

  4.   

    哦,不是,这样不行吗?
    utl_smtp.write_data(c,  'Content-Type:  text/plain; charset="GB2312"'||utl_tcp.CRLF);
    utl_smtp.write_data(c,  utl_tcp.CRLF);
      

  5.   

    邮件能发的,我是以网页形式发的(需要修改字体颜色),所以不用text/plain,英文是没有问题的,但有中文的话就出现乱码
      

  6.   

    共享一份utl_smtp发中文邮件代码,终于能够实现oracle发中文邮件.
    create or replace procedure SP_MAIL_SHARE
    IS
    SendorAddress Varchar2(30) := '[email protected]';
    EmailServer varchar2(30) := 'smtp.21cn.com';
    Port number := 25;
    conn utl_smtp.CONNECTION;
    crlf VARCHAR2( 2 ):= CHR( 13 ) || CHR( 10 );
    mesg VARCHAR2( 4000 char );mesg_body0 varchar2(4000 char)
      := '<html>
    <head>
    <title> </title>
    </head>
    <body bgcolor="#FFFFFF" link="#000080">
    <table cellspacing="0" cellpadding="0" width="100%">';
    font_red   varchar2(100 char):='<font size="2" face="Arial" color="#ff0000" >';
    font_blue  varchar2(100 char):='<font size="2" face="Arial" color="#0000FF" >';
    mesg_body1 varchar2(300 char):='谢谢您的支持.<br/><br/>
    </font>
    </body>
    </html>';
    BEGIN
        conn:= utl_smtp.open_connection( EmailServer, Port );
        utl_smtp.ehlo( conn, EmailServer );
        utl_smtp.command(conn, 'AUTH LOGIN');
        utl_smtp.command(conn,utl_raw.cast_to_varchar2(utl_encode.base64_encode(utl_raw.cast_to_raw('[email protected]'))));
        utl_smtp.command(conn,utl_raw.cast_to_varchar2(utl_encode.base64_encode(utl_raw.cast_to_raw('password'))));
        utl_smtp.mail( conn, SendorAddress);
        utl_smtp.rcpt( conn, '[email protected]');
        mesg:='' || crlf ||mesg_body0||FONT_RED||mesg_body1;
        utl_smtp.open_data(conn);
        utl_smtp.write_data(conn,'From:'||SendorAddress||utl_tcp.crlf);
        utl_smtp.write_data(conn,'To:[email protected]' || utl_tcp.crlf );
        utl_smtp.write_data(conn,'Date:'||to_char (sysdate, 'hh24:mi:ss dd-Mon-yyyy')||utl_tcp.crlf);
        utl_smtp.write_data(conn,'Subject:Not approved over three days Alert'||utl_tcp.crlf);
        utl_smtp.write_data(conn, 'MIME-Version: 1.0' || chr(13) || chr(10));
        utl_smtp.write_data(conn, 'Content-type: text/html;Charset=GB2312;' || chr(13) || chr(10));
        utl_smtp.write_data(conn, 'Content-Transfer-Encoding: base64' || chr(13) || chr(10));
        utl_smtp.write_data(conn, chr(13) || chr(10));
        utl_smtp.write_raw_data(conn,  utl_encode.base64_encode(utl_raw.cast_to_raw(mesg)));
        utl_smtp.write_data(conn, CRLF);
        utl_smtp.close_data(conn);
        utl_smtp.quit( conn );
    EXCEPTION WHEN OTHERS THEN
    ROLLBACK;
    END SP_MAIL_SHARE;