Oracle 實現郵件傳送

2021-07-26 15:35:00 字數 4335 閱讀 8319

create or replace procedure send_mail(

p_recipient varchar2, -- 郵件接收人

p_subject varchar2, -- 郵件標題

p_message varchar2, -- 郵件正文

p_type number -- 1文字 2html

) is

--下面四個變數請根據實際郵件伺服器進行賦值

v_mailhost varchar2(30) := 'smtp.pop.com'; --smtp伺服器位址

v_user varchar2(30) := '[email protected]'; --登入smtp伺服器的使用者名稱

v_pass varchar2(20) := '1234'; --登入smtp伺服器的密碼

v_sender varchar2(50) := '[email protected]'; --傳送者郵箱,一般與 ps_user 對應

v_conn utl_smtp.connection ; --到郵件伺服器的連線

v_msg varchar2(4000); --郵件內容

begin

v_conn := utl_smtp.open_connection(v_mailhost, 25);

utl_smtp.ehlo(v_conn, v_mailhost); --是用 ehlo() 而不是 helo() 函式

--否則會報:ora-29279: smtp 永久性錯誤: 503 5.5.2 send hello first.

utl_smtp.command(v_conn, 'auth login' ); -- smtp伺服器登入校驗

utl_smtp.command(v_conn,utl_raw.cast_to_varchar2(utl_encode.base64_encode(utl_raw.cast_to_raw(v_user))));

utl_smtp.command(v_conn,utl_raw.cast_to_varchar2(utl_encode.base64_encode(utl_raw.cast_to_raw(v_pass))));

utl_smtp.mail(v_conn, '<' || v_sender || '>'); --設定發件人 注:網上很多資料直接寫v_sender,這樣寫會報ora-29279: smtp 500 error

utl_smtp.rcpt(v_conn, '<' || p_recipient || '>'); --設定收件人

utl_smtp.open_data(v_conn); --開啟流

if p_type = 1 then

-- 建立要傳送的郵件內容 注意報頭資訊和郵件正文之間要空一行

v_msg := 'date:' || to_char(sysdate, 'dd mon yy hh24:mi:ss' )

|| utl_tcp.crlf || 'from: ' || '<' || v_sender || '>'

|| utl_tcp.crlf || 'to: ' || '<' || p_recipient || '>'

|| utl_tcp.crlf || 'subject: ' || p_subject

|| utl_tcp.crlf || utl_tcp.crlf -- 這前面是報頭資訊

|| p_message; -- 這個是郵件正文

utl_smtp.write_raw_data(v_conn, utl_raw.cast_to_raw(v_msg)); --這樣寫標題和內容都能用中文

elsif p_type = 2 then

utl_smtp.write_data(v_conn, 'from:' || '<' || v_sender || '>' || utl_tcp.crlf);

utl_smtp.write_data(v_conn, 'to:' || '<' || p_recipient || '>' || utl_tcp.crlf);

utl_smtp.write_raw_data(v_conn, utl_raw.cast_to_raw(convert('subject:' || p_subject || utl_tcp.crlf, 'zhs16gbk')));

utl_smtp.write_raw_data(v_conn, utl_raw.cast_to_raw(convert('content-type:text/html;charset=gbk' || utl_tcp.crlf, 'zhs16gbk')));

utl_smtp.write_data(v_conn, utl_tcp.crlf);

utl_smtp.write_raw_data(v_conn, utl_raw.cast_to_raw(convert(p_message, 'zhs16gbk'))); --這樣寫標題和內容都能用中文

end if;

utl_smtp.close_data(v_conn); --關閉流

utl_smtp.quit(v_conn); --關閉連線

exception

when others then

dbms_output.put_line(dbms_utility.format_error_stack);

dbms_output.put_line(dbms_utility.format_call_stack);

end send_mail;'<' || v_sender || '>'); --設定發件人 注:網上很多資料直接寫v_sender,這樣寫會報ora-29279: smtp 500 error

utl_smtp.rcpt(v_conn, '<' || p_recipient || '>'); --設定收件人

utl_smtp.open_data(v_conn); --開啟流

if p_type = 1 then

-- 建立要傳送的郵件內容 注意報頭資訊和郵件正文之間要空一行

v_msg := 'date:' || to_char(sysdate, 'dd mon yy hh24:mi:ss' )

|| utl_tcp.crlf || 'from: ' || '<' || v_sender || '>'

|| utl_tcp.crlf || 'to: ' || '<' || p_recipient || '>'

|| utl_tcp.crlf || 'subject: ' || p_subject

|| utl_tcp.crlf || utl_tcp.crlf -- 這前面是報頭資訊

|| p_message; -- 這個是郵件正文

utl_smtp.write_raw_data(v_conn, utl_raw.cast_to_raw(v_msg)); --這樣寫標題和內容都能用中文

elsif p_type = 2 then

utl_smtp.write_data(v_conn, 'from:' || '<' || v_sender || '>' || utl_tcp.crlf);

utl_smtp.write_data(v_conn, 'to:' || '<' || p_recipient || '>' || utl_tcp.crlf);

utl_smtp.write_raw_data(v_conn, utl_raw.cast_to_raw(convert('subject:' || p_subject || utl_tcp.crlf, 'zhs16gbk')));

utl_smtp.write_raw_data(v_conn, utl_raw.cast_to_raw(convert('content-type:text/html;charset=gbk' || utl_tcp.crlf, 'zhs16gbk')));

utl_smtp.write_data(v_conn, utl_tcp.crlf);

utl_smtp.write_raw_data(v_conn, utl_raw.cast_to_raw(convert(p_message, 'zhs16gbk'))); --這樣寫標題和內容都能用中文

end if;

utl_smtp.close_data(v_conn); --關閉流

utl_smtp.quit(v_conn); --關閉連線

exception

when others then

dbms_output.put_line(dbms_utility.format_error_stack);

dbms_output.put_line(dbms_utility.format_call_stack);

end send_mail;

ORACLE傳送郵件 例項

create or replace procedure send mail p recipient varchar2,郵件接收人 p subject varchar2,郵件標題 p message varchar2 郵件正文 is 下面四個變數請根據實際郵件伺服器進行賦值 v mailhost va...

python 實現傳送郵件

可採用email模組傳送電子郵件附件。傳送乙個未知mime型別的檔案附件其基本思路如下 1.構造mimemultipart物件做為根容器 2.構造mimetext物件做為郵件顯示內容並附加到根容器 3.構造mimebase物件做為檔案附件內容並附加到根容器 a.讀入檔案內容並格式化 b.設定附件頭 ...

python實現傳送郵件

有時我們需要程式在執行出現問題時傳送郵件通知我們,在這裡寫了乙個使用qq傳送的python指令碼,也是綜合了網上的資源 然而網上的案例好像都不能用 搞得,當然只要把主機埠啥的改一下就能使用其他郵箱了,如下 usr bin python coding utf 8 import smtplib from...