上面的图是为了好看,下面的文字是为了好用。 declare mailhost VARCHAR2(64) := 'mail.domain.com'; sender VARCHAR2(64) := 'someOne@someWhere.com'; recipient1 VARCHAR2(64) := 'someOne@someWhere.com'; recipient2 VARCHAR2(64) := 'someOne@someWhere.com'; mail_conn utl_smtp.connection; PROCEDURE send_header(name IN VARCHAR2, header IN VARCHAR2) AS BEGIN UTL_SMTP.WRITE_DATA(mail_conn, name || ': ' || header || UTL_TCP.CRLF); END; BEGIN 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); -- If we had the message in a single string, we could collapse -- open_data(), write_data(), and close_data() into a single call to data(). utl_smtp.open_data(mail_conn); send_header('From', '"System" <' || sender || '>'); send_header('To', '"Administrator" <' || recipient1 || '>'); send_header('Cc', '"cc Concerns" <' || recipient2 || '>'); send_header('Subject', 'Hello'); utl_smtp.write_data(mail_conn, 'This is a test message.' || utl_tcp.CRLF); utl_smtp.write_data(mail_conn, 'This is line 2.' || chr(13)); utl_smtp.close_data(mail_conn); utl_smtp.quit(mail_conn); EXCEPTION WHEN OTHERS THEN -- Insert error-handling code here dbms_output.put_line(sqlcode || ' | ' || sqlerrm || ' | ' || user); END; / utl_smtp 在 oracle 10g 应该是默认安装的。 用的还是挺方便的。