如果包含冒号,UTL_SMTP.Write_Data不发送任何文本

时间:2010-02-04 17:59:57

标签: oracle plsql

我创建了一个Oracle函数来使用UTL_SMTP包发送电子邮件。

使用方法 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' || ':');

3 个答案:

答案 0 :(得分:1)

可能会被解释为header

不要自己编写,而是查看PLCODEBREW

中包含的邮​​件代码

答案 1 :(得分:1)

我也有这个问题。 您已升级到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);
.....

答案 2 :(得分:0)

我无法让UTL_SMTP正常工作 - 当然看起来UTL_SMTP正文中的任何冒号被解释为标题,我找不到逃脱它们的方法。

我能够使用Oracle在10g中引入的UTL_MAIL包,它运行得非常好。只有必要的配置是将oracle中的smtp_out_server变量设置为邮件服务器的邮件服务器(包括端口号)。只需要一个方法调用 - 在PL / SQL中实现更加清晰 - 并且还允许您更多地控制特定的电子邮件字段(例如,主题)并且也可以处理附件。