小弟尝试使用UTL_SMTP包发送邮件,环境是oracle10g,装在linux上,
结果邮件的标题和正文有中文时,中文会变成乱码。
但是同样的代码,在另一台装有oracle10g的windows机器上,
发送邮件没有中文乱码问题。
小弟搞不明白是怎么回事,请有做过这个功能的大虾们指教一下。贴个代码  create or replace procedure Send_Mail(p_recipient VARCHAR2, p_subject varchar2, p_message varchar2) is  
    --下面四个变量请根据实际邮件服务器进行赋值
    v_mailhost VARCHAR2(30) := 'xxx.xxx.com'; --SMTP服务器地址
    v_user     VARCHAR2(30) := '[email protected]'; --登录SMTP服务器的用户名
    v_pass     VARCHAR2(20) := 'password'; --登录SMTP服务器的密码
    v_sender   VARCHAR2(50) := '[email protected]'; --发送者邮箱  
    v_conn UTL_SMTP.connection; --到邮件服务器的连接
    v_msg  VARCHAR2(4000); --邮件内容
  
  BEGIN
    v_conn := UTL_SMTP.open_connection(v_mailhost, 25);  
    UTL_SMTP.helo(v_conn, v_mailhost); --有些服务器要用UTL_SMTP.ehlo() 来与服务器打招呼
  
    UTL_SMTP.command(v_conn, 'AUTH LOGIN'); -- smtp服务器登录校验
    UTL_SMTP.command(v_conn,
                     UTL_RAW.cast_to_varchar2(UTL_ENCODE.base64_encode(UTL_RAW.cast_to_raw(v_user))));
    UTL_SMTP.command(v_conn,
                     UTL_RAW.cast_to_varchar2(UTL_ENCODE.base64_encode(UTL_RAW.cast_to_raw(v_pass))));
  
    UTL_SMTP.mail(v_conn, '<' || v_sender || '>'); --设置发件人
    UTL_SMTP.rcpt(v_conn, '<' || p_recipient || '>'); --设置收件人
  
    -- 创建要发送的邮件内容 注意报头信息和邮件正文之间要空一行
    v_msg := 'Date:' || to_char(sysdate, 'yyyy-mm-dd hh24:mi:ss') ||
             UTL_TCP.CRLF || 'From: ' || v_sender || '' || UTL_TCP.CRLF ||
             'To: ' || p_recipient || '' || UTL_TCP.CRLF || 'Subject: ' ||
             p_subject || UTL_TCP.CRLF || UTL_TCP.CRLF -- 这前面是报头信息
             || p_message; -- 这个是邮件正文
  
    UTL_SMTP.open_data(v_conn); --打开流
    UTL_SMTP.write_raw_data(v_conn, utl_raw.cast_to_raw(v_msg)); --这样写标题和内容都能用中文
    dbms_output.put_line(v_msg);
    UTL_SMTP.close_data(v_conn); --关闭流  
    UTL_SMTP.quit(v_conn); --关闭连接  
    dbms_output.put_line('邮件发送成功!');    
  EXCEPTION
  
    WHEN OTHERS THEN
      dbms_output.put_line('邮件发送失败!');
      DBMS_OUTPUT.put_line(DBMS_UTILITY.format_error_stack);
      DBMS_OUTPUT.put_line(DBMS_UTILITY.format_call_stack);
  end;