use utl_smtp to send mail
create or replace procedure mail_send( message in varchar2, sender in varchar2, recipient in varchar2, subject in varchar2 default ‘my mail test‘) is mailhost varchar2(30) := ‘smtp.163.com‘; c utl_smtp.connection; msg varchar2(1000); begin msg := ‘Date: ‘ || to_char(sysdate - 1, ‘dd mon yy hh24:mi:ss‘) || UTL_TCP.CRLF || ‘From: <‘ || sender || ‘>‘ || UTL_TCP.CRLF || ‘subject: ‘ || subject || UTL_TCP.CRLF || ‘To: <‘ || recipient || ‘>‘ || UTL_TCP.CRLF || ‘‘ || UTL_TCP.CRLF || message; dbms_output.put_line(msg); c := utl_smtp.open_connection(mailhost, 25); utl_smtp.ehlo(c, mailhost); utl_smtp.command(c, ‘auth login‘); utl_smtp.command(c, utl_raw.cast_to_varchar2(utl_encode.base64_encode(utl_raw.cast_to_raw(‘&username‘)))); utl_smtp.command(c, utl_raw.cast_to_varchar2(utl_encode.base64_encode(utl_raw.cast_to_raw(‘&password‘)))); utl_smtp.mail(c, sender); utl_smtp.rcpt(c, recipient); utl_smtp.open_data(c); utl_smtp.write_raw_data(c, utl_raw.cast_to_raw(msg)); utl_smtp.close_data(c); utl_smtp.quit(c); EXCEPTION WHEN others THEN BEGIN dbms_output.put_line (‘send_message error: ‘||DBMS_UTILITY.FORMAT_ERROR_BACKTRACE ); dbms_output.put_line (‘send_message error: ‘||sqlerrm ); utl_smtp.quit(c); exception when others then BEGIN dbms_output.put_line (‘exception error: ‘||DBMS_UTILITY.FORMAT_ERROR_BACKTRACE ); dbms_output.put_line (‘exception error: ‘||sqlerrm ); end; END; END; /
Notes
1.port need to change according to server setting. For example gmail smtp port is 465.
2.use utl_smtp.command to use Third-party mailbox.
3.addresses of sender and receiver must append string "<" and ">" .
4.use utl_smtp.write_raw_data instead of write_data to solve chinese character garbled.
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
use utl_tcp to send (not tested)
CREATE OR REPLACE PROCEDURE SEND_MAIL ( msg_from varchar2 := ‘[email protected]‘, ----- MAIL BOX SENDING THE EMAIL msg_to varchar2 := ‘[email protected]‘, ----- MAIL BOX RECIEVING THE EMAIL msg_subject varchar2 := ‘Output file TEST1‘, ----- EMAIL SUBJECT msg_text varchar2 := ‘THIS IS THE TEXT OF THE EMAIL MESSAGE.‘, v_output1 varchar2 := ‘THIS IS THE TEXT OF THE ATTACHMENT FILE. THIS TEXT WILL BE IN A TEXT FILE ATTACHED TO THE EMAIL.‘) IS c utl_tcp.connection; rc integer; crlf VARCHAR2(2):= CHR(13)||CHR(10); mesg VARCHAR2(32767); BEGIN c := utl_tcp.open_connection(‘196.35.140.18‘, 25); ----- OPEN SMTP PORT CONNECTION rc := utl_tcp.write_line(c, ‘HELO 196.35.140.18‘); ----- PERFORMS HANDSHAKING WITH SMTP SERVER dbms_output.put_line(utl_tcp.get_line(c, TRUE)); rc := utl_tcp.write_line(c, ‘EHLO 196.35.140.18‘); ----- PERFORMS HANDSHAKING, INCLUDING EXTRA INFORMATION dbms_output.put_line(utl_tcp.get_line(c, TRUE)); rc := utl_tcp.write_line(c, ‘MAIL FROM: ‘||msg_from); ----- MAIL BOX SENDING THE EMAIL dbms_output.put_line(utl_tcp.get_line(c, TRUE)); rc := utl_tcp.write_line(c, ‘RCPT TO: ‘||msg_to); ----- MAIL BOX RECIEVING THE EMAIL dbms_output.put_line(utl_tcp.get_line(c, TRUE)); rc := utl_tcp.write_line(c, ‘DATA‘); ----- EMAIL MESSAGE BODY START dbms_output.put_line(utl_tcp.get_line(c, TRUE)); rc := utl_tcp.write_line(c, ‘Date: ‘||TO_CHAR( SYSDATE, ‘dd Mon yy hh24:mi:ss‘ )); rc := utl_tcp.write_line(c, ‘From: ‘||msg_from||‘ <‘||msg_from||‘>‘); rc := utl_tcp.write_line(c, ‘MIME-Version: 1.0‘); rc := utl_tcp.write_line(c, ‘To: ‘||msg_to||‘ <‘||msg_to||‘>‘); rc := utl_tcp.write_line(c, ‘Subject: ‘||msg_subject); rc := utl_tcp.write_line(c, ‘Content-Type: multipart/mixed;‘); ----- INDICATES THAT THE BODY CONSISTS OF MORE THAN ONE PART rc := utl_tcp.write_line(c, ‘ boundary="-----SECBOUND"‘); ----- SEPERATOR USED TO SEPERATE THE BODY PARTS rc := utl_tcp.write_line(c, ); ----- DO NOT REMOVE THIS BLANK LINE - PART OF MIME STANDARD rc := utl_tcp.write_line(c, ‘-------SECBOUND‘); rc := utl_tcp.write_line(c, ‘Content-Type: text/plain‘); ----- 1ST BODY PART. EMAIL TEXT MESSAGE rc := utl_tcp.write_line(c, ‘Content-Transfer-Encoding: 7bit‘); rc := utl_tcp.write_line(c, ); rc := utl_tcp.write_line(c, msg_text); ----- TEXT OF EMAIL MESSAGE rc := utl_tcp.write_line(c, ); rc := utl_tcp.write_line(c, ‘-------SECBOUND‘); rc := utl_tcp.write_line(c, ‘Content-Type: text/plain;‘); ----- 2ND BODY PART. rc := utl_tcp.write_line(c, ‘ name="Test.txt"‘); rc := utl_tcp.write_line(c, ‘Content-Transfer_Encoding: 8bit‘); rc := utl_tcp.write_line(c, ‘Content-Disposition: attachment;‘); ----- INDICATES THAT THIS IS AN ATTACHMENT rc := utl_tcp.write_line(c, ‘ filename="Test.txt"‘); ----- SUGGESTED FILE NAME FOR ATTACHMENT rc := utl_tcp.write_line(c, ); rc := utl_tcp.write_line(c, v_output1); rc := utl_tcp.write_line(c, ‘-------SECBOUND--‘); rc := utl_tcp.write_line(c, ); rc := utl_tcp.write_line(c, ‘.‘); ----- EMAIL MESSAGE BODY END dbms_output.put_line(utl_tcp.get_line(c, TRUE)); rc := utl_tcp.write_line(c, ‘QUIT‘); ----- ENDS EMAIL TRANSACTION dbms_output.put_line(utl_tcp.get_line(c, TRUE)); utl_tcp.close_connection(c); ----- CLOSE SMTP PORT CONNECTION END; /
时间: 2024-11-15 09:44:04