在之前的《利用utl_smtp从oracle数据库发送电子邮件》一文中,我们讨论了如何利用utl_smtp代码从oraclepl/sql应用程序中发送超文本模式的电子邮件。本文将继续深入探讨如何利用另外一种方法扩展这个程序包,使之能够在发送的电子邮件中加载二进制大对象(blob)附件。这里以最常用的pdf文件为例,看看如何把存储在数据库中的pdf文件发送给不同的收信人。
首先,需要把方法函数添加到包头说明里,以便其他的程序包能够调用:
接下来把实际的方法函数插入到包体里:
利用utl_smtp从oracle数据库发送带blob附件的电子邮件第2部分:(电脑编程网整理,请尊重作者权益,转载注明出处;)
代码注释
上述代码要求必须为实际上传的blob对象添加一个文件名(filename),而且必须确认该文件名扩展名正确,这样在网络另一端的电子邮件客户才有可能正确地打开这个对象文件。也就是说,在本例中blob对象是一份pdf文件,所以其上传的文件名必须是abc.pdf这种格式才行。
你可能发现,在上面的方法函数中,没有发送主体部分(body)。这里只是为了把大家的视线集中在blob附件的发送上面,所以吧邮件主体部分省略掉。如果你需要发送邮件主体部分,完全可以把包含邮件主体的代码添加进去。
方法函数中奇怪的while loop语句
为了使utl_encode包运行,缓冲区的大小必须是57,这就是为什么我们要使用loop循环执行,并把blob文件截断称57字节大小片断。这个过程把blob对象转换成原始二进制格式,然后把这些57字节长短的片断发送到电子邮件流中,并在每个57字节片断后添加一个行尾符。
只要你掌握了utl_smtp的基础用法,在里面加上一个附件并不成问题,赶快实践一下吧。