- deklarasi spesifik ke gmail :
v_smtp_domain varchar2 (256) := 'gmail.com';
utl_smtp.ehlo(v_mail_conn, v_smtp_domain);
-- utl_smtp.helo(v_mail_conn, p_smtp_host);Maka sekarang kita bisa gunakan untuk kebutuhan gmail dengan stunnel :
CREATE OR REPLACE PROCEDURE custom_send_mail ( p_to IN VARCHAR2, p_cc IN VARCHAR2 DEFAULT NULL, p_bcc IN VARCHAR2 DEFAULT NULL, p_from IN VARCHAR2, p_subject IN VARCHAR2, p_text_msg IN VARCHAR2 DEFAULT NULL, p_html_msg IN CLOB DEFAULT NULL, p_attachments IN table_attachments DEFAULT NULL, p_smtp_host IN VARCHAR2, p_smtp_port IN NUMBER DEFAULT 25, p_username IN VARCHAR2 DEFAULT NULL, p_password IN VARCHAR2 DEFAULT NULL) AS v_mail_conn UTL_SMTP.connection; v_boundary VARCHAR2(50) := '----=*#abc1234321cba#*='; v_step PLS_INTEGER := 24573; v_length PLS_INTEGER; v_begin PLS_INTEGER := 1; v_buffer_size INTEGER := 75; v_raw RAW(32767); v_smtp_domain varchar2 (256) := 'gmail.com'; BEGIN /* **** Author: Josep Coves **** Version: 1.0 **** Date: 08/06/2012 **** josepcoves@relational.es **** http://www.relational.es **** Based on Tim's procedure, Thanks Tim! **** http://www.oracle-base.com/articles/misc/email-from-oracle-plsql.php#html */ v_mail_conn := UTL_SMTP.open_connection(p_smtp_host, p_smtp_port); utl_smtp.ehlo(v_mail_conn, v_smtp_domain); utl_smtp.command( v_mail_conn, 'AUTH LOGIN'); --Establish SMTP connection IF (p_username IS NOT NULL) THEN utl_smtp.command( v_mail_conn, UTL_RAW.cast_to_varchar2( UTL_ENCODE.base64_encode( UTL_RAW.cast_to_raw( p_username ))) ); utl_smtp.command( v_mail_conn, UTL_RAW.cast_to_varchar2( UTL_ENCODE.base64_encode( UTL_RAW.cast_to_raw( p_password ))) ); END IF; -- utl_smtp.helo(v_mail_conn, p_smtp_host); utl_smtp.mail(v_mail_conn, p_from); utl_smtp.rcpt(v_mail_conn, p_to); utl_smtp.open_data(v_mail_conn); utl_smtp.write_data(v_mail_conn, 'Date: ' || TO_CHAR(SYSDATE, 'DD-MON-YYYY HH24:MI:SS') || UTL_TCP.crlf); utl_smtp.write_data(v_mail_conn, 'To: ' || p_to || UTL_TCP.crlf); utl_smtp.write_data(v_mail_conn, 'From: ' || p_from || UTL_TCP.crlf); IF (p_cc IS NOT NULL) THEN utl_smtp.write_data(v_mail_conn, 'CC: ' || p_cc || UTL_TCP.crlf); END IF; IF (p_bcc IS NOT NULL) THEN utl_smtp.write_data(v_mail_conn, 'BCC: ' || p_bcc || UTL_TCP.crlf); END IF; utl_smtp.write_data(v_mail_conn, 'Subject: ' || p_subject || UTL_TCP.crlf); utl_smtp.write_data(v_mail_conn, 'Reply-To: ' || p_from || UTL_TCP.crlf); utl_smtp.write_data(v_mail_conn, 'MIME-Version: 1.0' || UTL_TCP.crlf); utl_smtp.write_data(v_mail_conn, 'Content-Type: multipart/mixed; boundary="' || v_boundary || '"' || UTL_TCP.crlf || UTL_TCP.crlf); --Plain Text Body IF p_text_msg IS NOT NULL THEN utl_smtp.write_data(v_mail_conn, '--' || v_boundary || UTL_TCP.crlf); utl_smtp.write_data(v_mail_conn, 'Content-Type: text/plain; charset="iso-8859-1"' || UTL_TCP.crlf || UTL_TCP.crlf); utl_smtp.write_data(v_mail_conn, p_text_msg); utl_smtp.write_data(v_mail_conn, UTL_TCP.crlf || UTL_TCP.crlf); ELSIF p_html_msg IS NOT NULL THEN -- HTML Body utl_smtp.write_data(v_mail_conn, '--' || v_boundary || UTL_TCP.crlf); utl_smtp.write_data(v_mail_conn, 'Content-Type: text/html; charset="iso-8859-1"' || UTL_TCP.crlf || UTL_TCP.crlf); FOR i IN 0 .. TRUNC((DBMS_LOB.getlength(p_html_msg) - 1 )/v_step) LOOP utl_smtp.write_data(v_mail_conn, DBMS_LOB.SUBSTR(p_html_msg, v_step, i * v_step + 1)); END LOOP; utl_smtp.write_data(v_mail_conn, UTL_TCP.crlf || UTL_TCP.crlf); END IF; IF p_attachments IS NOT NULL THEN FOR i IN 1..p_attachments.COUNT LOOP utl_smtp.write_data(v_mail_conn, '--' || v_boundary || UTL_TCP.crlf); utl_smtp.write_data(v_mail_conn, 'Content-Type: ' ||p_attachments(i).attachment_mime || UTL_TCP.crlf); utl_smtp.write_data(v_mail_conn, 'Content-Transfer-Encoding: base64' || UTL_TCP.crlf); utl_smtp.write_data(v_mail_conn, 'Content-Disposition: attachment; filename="' || p_attachments(i).attachment_name || '"' || UTL_TCP.crlf || UTL_TCP.crlf); v_length := DBMS_LOB.getlength(p_attachments(i).attachment_blob); v_begin := 1; v_raw := NULL; v_buffer_size := 75; WHILE v_begin < v_length LOOP DBMS_LOB.read( p_attachments(i).attachment_blob, v_buffer_size, v_begin, v_raw ); utl_smtp.write_raw_data( v_mail_conn, UTL_ENCODE.base64_encode(v_raw) ); utl_smtp.write_data( v_mail_conn, UTL_TCP.crlf ); v_begin := v_begin + v_buffer_size; END LOOP ; utl_smtp.write_data(v_mail_conn, UTL_TCP.crlf || UTL_TCP.crlf); END LOOP; END IF; utl_smtp.write_data(v_mail_conn, '--' || v_boundary || '--' || UTL_TCP.crlf); utl_smtp.close_data(v_mail_conn); utl_smtp.quit(v_mail_conn); END; /
Selanjutnya kita bisa pakai untuk mengirim, text bisa, html dan attachement. berikut contoh pemakaian untuk mengirim gambar product dari tabel DEMO_PRODUCT_INFO.
DECLARE v_clob clob := 'Test email'; v_blob blob; t_a table_attachments := NULL; v_a mail_attachment ; BEGIN SELECT mail_attachment(t.FILENAME,t.MIMETYPE,t.PRODUCT_IMAGE) BULK COLLECT INTO t_a FROM DEMO_PRODUCT_INFO t; custom_send_mail (p_to => '<your_recipient@mail.com>', p_from => '<yourgmailname@gmail.com>', p_subject => 'test', p_html_msg => v_clob, p_attachments => t_a, p_smtp_host => 'localhost', p_smtp_port => 1925, p_username => 'yourgmailname@gmail.com', p_password => 'yourgmailpassword'); END; /
Maka pada email penerima akan muncul:
Tidak ada komentar :
Posting Komentar