utl_smtp中的邮件正文大小限制

时间:2011-12-07 11:20:26

标签: oracle plsql oracle10g plsqldeveloper

我有一个使用utl_smtp发送邮件的程序。 我可以发送的最大邮件正文大小是多少,如果我的邮件正文大小超过此限制,那么我该如何发送呢?

2 个答案:

答案 0 :(得分:1)

只需将其分块发送:

    l_offset  := 1;
    l_amount := 1900;
    utl_smtp.open_data(l_connection);
    while l_offset < dbms_lob.getlength(l_body_html) loop
        utl_smtp.write_data(l_connection,
                            dbms_lob.substr(l_body_html,l_amount,l_offset));
        l_offset  := l_offset + l_amount ;
        l_amount := least(1900,dbms_lob.getlength(l_body_html) - l_amount);
    end loop;

答案 1 :(得分:0)

来自Oracle Documentation

  

规则和限制 API不会施加任何限制或范围检查。但是,您应该了解以下大小   对SMTP的各种元素的限制。发送超过的数据   这些限制可能导致服务器返回错误。

     

表178-5 SMTP大小限制

     

元素|尺寸限制

     

用户|用户名的最大总长度为64个字符。

     

域名|域名或号码的最大总长度为64   字符。

     

路径|反向路径或前向路径的最大总长度为   256个字符(包括标点符号和元素分隔符)。

     

命令行|命令行的最大总长度包括   命令字和512个字符。

     

回复行|回复行的最大总长度包括   回复代码,是512个字符。

     

文字行|包含文本行的最大总长度    是1000个字符(但不包括重复的前导点   透明度。)

     

收件人缓冲区|必须的最大收件人总数   缓冲是100个收件人。

无论如何,我认为如果你的电子邮件正文太大,目的地会拒绝它......

<强>更新 无论如何,如果你通过电子邮件发送如此大的数据,那就错了。你应该使用另一种解决方案。从数据库读取数据并以友好格式将其呈现给用户的客户端。 有oracle发现者,或者你可以使用java或php开发一个应用程序...有很多选项......