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 中的多个附件问题