2010-02-04 55 views
1

我創建了一個使用UTL_SMTP包發送電子郵件的Oracle函數。如果包含冒號,UTL_SMTP.Write_Data不發送任何文本

當使用方法WRITE_DATA數據,如果我的文字不包含一個冒號,發送的電子郵件將包含在電子郵件的身體輸入的文本。

但是,如果文本包含冒號,則文本不會包含在電子郵件中。

這個我在網上看到的每個例子似乎表明這是沒有問題的。任何想法可能是什麼原因呢?

這工作:UTL_SMTP.write_data(l_mail_conn, 'test');

這不會發送:UTL_SMTP.write_data(l_mail_conn, 'test:');

也不:UTL_SMTP.write_data(l_mail_conn, 'test' || ':');

回答

1

它可能會得到解釋爲header

而不是寫自己,看看在郵政編碼PLCODEBREW

+0

我很確定這是原因。在「真實」標題之後,添加一個空行 - 「UTL_SMTP.write_data(l_main_conn,'')' – 2010-02-05 01:05:41

+0

沒有任何運氣的空行;仍然拒絕用冒號發送任何文本。 要試試UTL_MAIL。 – abbott 2010-02-10 01:31:20

+0

UTL_MAIL包就像一個魅力。在帖子的背景下處理這件事的正確方法是什麼? – abbott 2010-02-11 03:45:05

0

我無法獲得UTL_SMTP的工作 - 看起來像UTL_SMTP正文中的任何冒號被解釋爲標題,我無法找到逃避它們的方法。

我能夠使用Oracle在10g中引入的UTL_MAIL包,它工作得很好。只有必要的配置是將oracle中的smtp_out_server變量設置爲郵件服務器的郵件服務器(包括端口號)。只需要一個方法調用 - 在PL/SQL中實現更清晰 - 還允許您更好地控制特定的電子郵件字段(例如Subject),並且還可以處理附件。

1

我也有這個問題。 Apreciating你已經升級到UTL_MAIL - 我的調查結果是爲那些誰願意或必須留在UTL_SMTP。

如果您確保您的SMS正文與模式'aaa:...'不匹配,那麼utl_smtp.write_data將不會將其解釋爲標題。如果你的手機短信的身體確實符合這種模式,那麼在你的消息前加一個空格,或者你可能只想用分號等來代替冒號......你的選擇。

您可以使用以下方法截取並解決問題。

..... 
/* 999999999 is just an indicitive integer above and beyond the max length of an sms */ 
    IF (INSTR(p_message,':') < NVL(INSTR(p_message,' '),999999999) 
     AND INSTR(p_message,':') != 0) 
    THEN p_message := ' '||p_message; 
    END IF; 

utl_smtp.write_data(l_mail_conn, p_message); 
..... 
相關問題