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;
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;
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货