oracle – PLSQL发送带附件的电子邮件?

oracle – PLSQL发送带附件的电子邮件?,第1张

概述我们有一个表格,文件保存为BLOB 我写了一个代码,通过电子邮件将这些文件作为附件! 到目前为止一切正常,但文件(EXCEL,PDF,……有什么)是程序无法读取的,只有文本文件和excel会打开但是在一些错误消息之后,PDF根本都没有被打开! 这是有问题的代码的一部分! utl_smtp.write_data( l_connection, '--'|| l_boundary || utl_tcp. 我们有一个表格,文件保存为BLOB

我写了一个代码,通过电子邮件将这些文件作为附件!

到目前为止一切正常,但文件(EXCEL,pdf,……有什么)是程序无法读取的,只有文本文件和excel会打开但是在一些错误消息之后,pdf根本都没有被打开!

这是有问题的代码的一部分!

utl_smtp.write_data( l_connection,'--'|| l_boundary || utl_tcp.crlf);utl_smtp.write_data( l_connection,'Content-Type: application/octet-stream' || utl_tcp.crlf);utl_smtp.write_data( l_connection,'Content-disposition: attachment; filename="' || V_name || '"' || utl_tcp.crlf);utl_smtp.write_data( l_connection,'Content-transfer-encoding: base64' || utl_tcp.crlf );utl_smtp.write_data( l_connection,utl_tcp.crlf );   v_length := dbms_lob.getlength(V_BLOB_CONTENT);     while v_offset < v_length loop       dbms_lob.read( V(i).BLOB_CONTENT,v_buffer_size,v_offset,v_raw );       utl_smtp.write_raw_data( l_connection,utl_encode.base64_encode(v_raw) );       utl_smtp.write_data( l_connection,utl_tcp.crlf );       v_offset := v_offset + v_buffer_size;end loop while_loop;     utl_smtp.write_data( l_connection,utl_tcp.crlf );

有什么建议?

解决方法 这是我用来做的那个程序

PROCEDURE StreamAttachmentToConn( p_conn       IN OUT utl_smtp.connection,p_boundary   IN raw,p_filename   IN VARCHAR2,p_fileData   IN BLOB) ParaLLEL_ENABLE  AS      l_len       integer := 0 ;      l_IDx       integer := 1 ;      l_buff_size integer := 57 ;      l_raw       raw(57) ;  BEGIN              -- Attachment            utl_smtp.write_data( p_conn,'--' || p_boundary || utl_tcp.crlf );            utl_smtp.write_data( p_conn,'Content-Type: application/octet-stream' || utl_tcp.crlf );            utl_smtp.write_data( p_conn,'Content-disposition: attachment; ' || utl_tcp.crlf );            utl_smtp.write_data( p_conn,' filename="' || p_filename || '"' || utl_tcp.crlf );            utl_smtp.write_data( p_conn,'Content-transfer-encoding: base64' || utl_tcp.crlf );            utl_smtp.write_data( p_conn,utl_tcp.crlf );            -- Loop through the blob            -- chuck it up into 57-byte pIEces            -- and base64 encode it and write it into the mail buffer            l_len := dbms_lob.getlength(p_fileData);            -- force reinit on this may change            l_buff_size := 57 ;            l_IDx := 1;            while l_IDx < l_len loop              dbms_lob.read( p_fileData,l_buff_size,l_IDx,l_raw );              utl_smtp.write_raw_data( p_conn,utl_encode.base64_encode(l_raw) );              utl_smtp.write_data( p_conn,utl_tcp.crlf );              l_IDx := l_IDx + l_buff_size;            end loop;  END StreamAttachmentToConn;

我用它来为一封电子邮件添加多个附件.对我来说就像一个冠军.

一件事,p_boundary传入as

l_boundary raw(32) := sys_guID();

我看到你已经有了一个l_boundary,这就是你应该使用的.

这是基于http://christopherbeck.wordpress.com/category/plsql/和http://www.oracle-base.com/articles/misc/EmailFromOraclePLSQL.php#attachment
.

然后在你的代码中,只传递你的smtp连接,l_boundary(即RAW sys_guID或你正在使用的任何东西,文件的名称(因为它将出现在电子邮件附件中)和BLOB.

*编辑 – >附加信息 *

我们的假设是相同的:

–> assume v_offset starts with 1
–> v_buffer_size assume 57

但是我注意到有一个命令,你必须遵循它才能使它工作(特别是,将附件放在身体后面的END旁边!

>连接LOGIC
>添加所有收件人
>标题LOGIC:“FROM”,主题
>身体逻辑(正文等)
>附件
>然后在附件关闭电子邮件后(这是我的附件之后的具体内容:

utl_smtp.write_data( l_conn,utl_tcp.crlf );-- Close Emailutl_smtp.write_data( l_conn,'--' || l_boundary || '--' || utl_tcp.crlf );utl_smtp.write_data( l_conn,utl_tcp.crlf || '.' || utl_tcp.crlf );utl_smtp.close_data( l_conn );utl_smtp.quit( l_conn );
总结

以上是内存溢出为你收集整理的oracle – PL / SQL发送带附件的电子邮件?全部内容,希望文章能够帮你解决oracle – PL / SQL发送带附件的电子邮件?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/1167188.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-01
下一篇 2022-06-01

发表评论

登录后才能评论

评论列表(0条)

保存