Oracle发送中文邮件,请参考.
CREATE OR REPLACE  PROCEDURE "SEND_MAIL"   ( 
    v_from varchar2, 
   v_to varchar2, 
   v_cc varchar2,
   v_subject varchar2,
   v_msg varchar2 
)as
 
smtp_host   VARCHAR2(256) := '192.168.1.10';
smtp_port   PLS_INTEGER   := 25;
v_conn utl_smtp.connection;my_to VARCHAR2(32767) := v_to;
my_cc VARCHAR2(32767) := v_cc;  FUNCTION get_address(addr_list IN OUT VARCHAR2) RETURN VARCHAR2 IS    addr VARCHAR2(256);
    i    pls_integer;    FUNCTION lookup_unquoted_char(str  IN VARCHAR2,
  chrs IN VARCHAR2) RETURN pls_integer AS
      c            VARCHAR2(5);
      i            pls_integer;
      len          pls_integer;
      inside_quote BOOLEAN;
    BEGIN
       inside_quote := false;
       i := 1;
       len := length(str);
       WHILE (i <= len) LOOP  c := substr(str, i, 1);  IF (inside_quote) THEN
   IF (c = '"') THEN
     inside_quote := false;
   ELSIF (c = '\') THEN
     i := i + 1; -- Skip the quote character
   END IF;
   GOTO next_char;
 END IF;  IF (c = '"') THEN
   inside_quote := true;
   GOTO next_char;
 END IF;  IF (instr(chrs, c) >= 1) THEN
    RETURN i;
 END IF;  <<next_char>>
 i := i + 1;       END LOOP;       RETURN 0;    END;  BEGIN    addr_list := ltrim(addr_list);
    i := lookup_unquoted_char(addr_list, ',;');
    IF (i >= 1) THEN
      addr      := substr(addr_list, 1, i - 1);
      addr_list := substr(addr_list, i + 1);
    ELSE
      addr := addr_list;
      addr_list := '';
    END IF;    i := lookup_unquoted_char(addr, '<');
    IF (i >= 1) THEN
      addr := substr(addr, i + 1);
      i := instr(addr, '>');
      IF (i >= 1) THEN
addr := substr(addr, 1, i - 1);
      END IF;
    END IF;    RETURN addr;
  END; 
beginv_conn := utl_smtp.open_connection (smtp_host, smtp_port);
utl_smtp.helo(v_conn, smtp_host); utl_smtp.mail(v_conn, v_from);WHILE (my_to IS NOT NULL) LOOP
      utl_smtp.rcpt(v_conn, get_address(my_to));
END LOOP;WHILE (my_cc IS NOT NULL) LOOP
      utl_smtp.rcpt(v_conn, get_address(my_cc));
END LOOP;
 
utl_smtp.open_data(v_conn); 
utl_smtp.write_raw_data(v_conn, utl_raw.cast_to_raw(convert('From: ' || v_from || utl_tcp.CRLF,'ZHT16BIG5')));
utl_smtp.write_raw_data(v_conn, utl_raw.cast_to_raw(convert('To: ' || v_to || utl_tcp.CRLF,'ZHT16BIG5')));
utl_smtp.write_raw_data(v_conn, utl_raw.cast_to_raw(convert('Cc: ' || v_cc || utl_tcp.CRLF,'ZHT16BIG5')));
utl_smtp.write_raw_data(v_conn, utl_raw.cast_to_raw(convert('Subject: ' || v_subject || utl_tcp.CRLF,'ZHT16BIG5')));
utl_smtp.write_raw_data(v_conn, utl_raw.cast_to_raw(convert('Content-Type:text/plain;charset=big5'|| utl_tcp.CRLF,'ZHT16BIG5')));
utl_smtp.write_data(v_conn, utl_tcp.CRLF);
utl_smtp.write_raw_data(v_conn, utl_raw.cast_to_raw(convert(v_msg,'ZHT16BIG5')));
utl_smtp.write_data(v_conn, utl_tcp.CRLF); 
UTL_SMTP.close_data(v_conn); 
UTL_SMTP.quit(v_conn); 
end;