utl_smtp 中的邮件正文大小限制

Posted

技术标签:

【中文标题】utl_smtp 中的邮件正文大小限制【英文标题】:mail body size limit in utl_smtp 【发布时间】:2011-12-07 11:20:25 【问题描述】:

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

【问题讨论】:

【参考方案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;

【讨论】:

【参考方案2】:

来自Oracle Documentation:

规则和限制 API 没有限制或范围检查。但是,您应该注意以下尺寸 对 SMTP 的各种元素的限制。发送超过 这些限制可能会导致服务器返回错误。

表 178-5 SMTP 大小限制

元素 |尺寸限制

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

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

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

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

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

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

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

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

更新 无论如何,如果您通过电子邮件发送如此大的数据,那就有问题了。你应该使用另一种解决方案。从数据库读取数据并以友好格式呈现给用户的客户端。 有oracle discoverer,也可以用java,php开发应用……有很多选择……

【讨论】:

如果包含 的文本行的最大总长度超过 1000 个字符怎么办?我不能使用 UTL_SMTP 发送邮件吗?有没有办法发送邮件,即使正文的长度太大>如果有的话请告诉我 1000 个字符似乎是 smtp 限制。恐怕行不通。试试 UTL_MAIL。我会根据一些注意事项更新我的回复。

以上是关于utl_smtp 中的邮件正文大小限制的主要内容,如果未能解决你的问题,请参考以下文章

使用 utl_smtp 包的 PL/SQL 中的多个附件问题

Exchange附件大小的问题~~!!!急

iCloud 邮件附件大小限制

Symfony HttpClient Stream 和 chunk->getContent() 超出正文大小限制

轻轻邮箱超过用户的配额大小限制怎么解决

如何解除 outlook 2016 附件大小的限制