CREATE OR REPLACE PROCEDURE SEND_MAIL
(as_sender in varchar2,
as_recp in varchar2,
as_subjectin varchar2,
as_msg_body in varchar2)
IS
ls_mailhostvarchar2(30) := '192.168.2.185';
lc_mail_conn utl_smtp.connection;
ls_subject varchar2(100);
ls_db_name varchar2(20);
ls_msg_bodyvarchar2(20000);
BEGIN
lc_mail_conn := utl_smtp.open_connection(ls_mailhost, 25);
ls_subject := 'Subject: [' || upper(sys_context('userenv', 'db_name')) || '] - ' || as_subject;
ls_msg_body := as_msg_body;
utl_smtp.helo(lc_mail_conn, ls_mailhost);
utl_smtp.mail(lc_mail_conn, as_sender);
utl_smtp.rcpt(lc_mail_conn, as_recp);
utl_smtp.open_data(lc_mail_conn);
ls_msg_body := 'From: ' || as_sender || chr(13) || chr(10) || 'To: ' || as_recp || chr(13) || chr(10) || ls_subject || chr(13) || chr(10) ||chr(13) || chr(10) || ls_msg_body;
utl_smtp.write_raw_data(lc_mail_conn,utl_raw.cast_to_raw(ls_msg_body));
utl_smtp.close_data(lc_mail_conn);
utl_smtp.quit(lc_mail_conn);
EXCEPTION
WHEN UTL_SMTP.INVALID_OPERATION THEN
dbms_output.put_line('invalid operation');
WHEN UTL_SMTP.TRANSIENT_ERROR THEN
dbms_output.put_line('transient error');
WHEN UTL_SMTP.PERMANENT_ERROR THEN
dbms_output.put_line('permanent error');
WHEN OTHERS THEN
dbms_output.put_line('others');
end send_mail;
上面是發email的代碼,之前調用此procedure發email速度很快,但近期突然變慢,我仔細調試程序,發現執行到 lc_mail_conn := utl_smtp.open_connection(ls_mailhost, 25);時候很慢,也就是ping email服務器很慢,為什麼呢,是不是哪裡有限制呢,之前速度一直非常快的,而且數據庫和email是本地網絡,真是百思不得其解
|