使用Oracle的PL/SQL发送Email:
CREATE OR REPLACE PROCEDURE sendEmail(smtp_server VARCHAR2,
from_userid VARCHAR2,
to_userid VARCHAR2,
subject VARCHAR2,
body VARCHAR2,
from_name VARCHAR2 := NULL,
to_name VARCHAR2 := NULL,
content_type VARCHAR2 := NULL)
IS
c utl_smtp.connection;
from_domain VARCHAR2(200) := SUBSTR(from_userid,INSTR(from_userid,'@')+1);
PROCEDURE header(name VARCHAR2, value VARCHAR2) IS
BEGIN
utl_smtp.write_data(c, name || ': ' || value || utl_tcp.CRLF);
END;
BEGIN
c := utl_smtp.open_connection( smtp_server );
utl_smtp.helo(c, from_domain );
utl_smtp.mail(c, from_userid );
utl_smtp.rcpt(c, to_userid );
utl_smtp.open_data(c);
header('From','"'||NVL(from_name,from_userid)||'" <'||from_userid||'>');
header('To','"'||NVL(to_name,to_userid)||'" <'||to_userid||'>');
header('Subject', subject );
header('Content-Type', NVL(content_type,'text/plain'));
utl_smtp.write_data(c, utl_tcp.CRLF || body );
utl_smtp.close_data(c);
utl_smtp.quit(c);
EXCEPTION
WHEN utl_smtp.transient_error OR utl_smtp.permanent_error THEN
utl_smtp.quit(c);
raise_application_error(-20199,'Error sending mail: ' || sqlerrm);
END;