The body of the DATA command may be transferred in full 8 bits, but the rest of the SMTP command and response should be in 7 bits. When the target SMTP server supports 8BITMIME extension, users of multibyte databases may convert their non-US7ASCII, multibyte VARCHAR2 data to RAW and use the write_raw_data() API to send multibyte data using 8-bit MIME encoding
(sender in varchar2,
recipient in varchar2,
message in varchar2,
title in varchar2,
nStatus out number)
is
mailhost varchar2(255) := '3.243.221.8'; --replace with your mail server
mail_conn utl_smtp.connection;
vrData RAW(32767);
vrTitle RAW(32767);
--write title
PROCEDURE send_header(NAME IN VARCHAR2, HEADER IN VARCHAR2) AS
BEGIN
utl_smtp.write_data(mail_conn, NAME||': '|| HEADER||utl_tcp.CRLF);
END;begin nStatus := 0;
mail_conn := utl_smtp.open_connection(mailhost, 25);
utl_smtp.helo(mail_conn, mailhost);
utl_smtp.mail(mail_conn, sender);
utl_smtp.rcpt(mail_conn, recipient);
--utl_smtp.data(mail_conn, message);
--utl_smtp.quit(mail_conn); utl_smtp.open_data(mail_conn);
--write title
--send_header('From', 'Oracle Database');
--send_header('To', '"Recipient" <'||rcpter||'>');
vrTitle := utl_raw.cast_to_raw(title);
--utl_smtp.write_raw_data(mail_conn, 'Subject'||': '||vrTitle);
--send_header('Subject', title);
--write mail content
utl_smtp.write_data(mail_conn, 'MIME-Version: ' || '1.0' || UTL_tcp.CRLF);
utl_smtp.write_data(mail_conn, 'Content-Type: ' || 'text/plain; charset=utf-8' || UTL_tcp.CRLF);
utl_smtp.write_data(mail_conn, 'Content-Transfer-Encoding: ' || '8bit' || UTL_tcp.CRLF);
UTL_smtp.write_data(mail_conn, UTL_tcp.CRLF);
vrData := utl_raw.cast_to_raw(message);
utl_smtp.write_raw_data(mail_conn, 'Subject'||': '||vrTitle||vrData);
--utl_smtp.write_raw_data(mail_conn, 'Subject: ' || vrTitle);
--utl_smtp.write_data(mail_conn, utl_tcp.crlf || message);
--close connect
utl_smtp.close_data(mail_conn);
utl_smtp.quit(mail_conn);
exception when others then
nStatus := SQLCODE;
dbms_output.put_line(Sqlerrm || to_char(SQLCODE));
end CBP_SEND_MAIL;
(sender in varchar2,
recipient in varchar2,
message in varchar2,
title in varchar2,
nStatus out number)
is
mailhost varchar2(255) := '3.243.221.8'; --replace with your mail server
mail_conn utl_smtp.connection;
vrData RAW(32767);
vrTitle RAW(32767);
--write title
PROCEDURE send_header(NAME IN VARCHAR2, HEADER IN VARCHAR2) AS
BEGIN
utl_smtp.write_data(mail_conn, NAME||': '|| HEADER||utl_tcp.CRLF);
END;begin nStatus := 0;
mail_conn := utl_smtp.open_connection(mailhost, 25);
utl_smtp.helo(mail_conn, mailhost);
utl_smtp.mail(mail_conn, sender);
utl_smtp.rcpt(mail_conn, recipient);
--utl_smtp.data(mail_conn, message);
--utl_smtp.quit(mail_conn); utl_smtp.open_data(mail_conn);
--write title
--send_header('From', 'Oracle Database');
send_header('To', '<'||recipient||'>');
vrTitle := utl_raw.cast_to_raw('Subject'||': '||title);
utl_smtp.write_raw_data(mail_conn, vrTitle);
--send_header('Subject', title);
--write mail content----这一段我不太清楚为什么,不加会出点儿问题
utl_smtp.write_data(mail_conn, '' || UTL_tcp.CRLF);
--
utl_smtp.write_data(mail_conn, 'MIME-Version: ' || '1.0' || UTL_tcp.CRLF);
utl_smtp.write_data(mail_conn, 'Content-Type: ' || 'text/plain; charset=utf-8' || UTL_tcp.CRLF);
utl_smtp.write_data(mail_conn, 'Content-Transfer-Encoding: ' || '8bit' || UTL_tcp.CRLF);
UTL_smtp.write_data(mail_conn, UTL_tcp.CRLF);
vrData := utl_raw.cast_to_raw(message);
utl_smtp.write_raw_data(mail_conn, vrData);
--utl_smtp.write_data(mail_conn, utl_tcp.crlf || message);
--close connect
utl_smtp.close_data(mail_conn);
utl_smtp.quit(mail_conn);
exception when others then
nStatus := SQLCODE;
dbms_output.put_line(Sqlerrm || to_char(SQLCODE));
end CBP_SEND_MAIL;
BEGIN
utl_smtp.write_data(mail_conn, NAME||': '|| HEADER||utl_tcp.CRLF);
END;中的 utl_smtp.write_data 改为 utl_smtp.write_raw_data 试试看
你提到的 ----这一段我不太清楚为什么,不加会出点儿问题
下面的东西是 snmp 的标准格式
如果想了解具体的,你需要查看 RFC 的文档了
[email protected]