oracle – PL / SQL发送带附件的电子邮件?
我们有一个表格,文件保存为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,这就是你应该使用的. 这是基于http://christopherbeck.wordpress.com/category/plsql/和http://www.oracle-base.com/articles/misc/EmailFromOraclePLSQL.php#attachment 然后在你的代码中,只传递你的smtp连接,l_boundary(即RAW sys_guid或你正在使用的任何东西,文件的名称(因为它将出现在电子邮件附件中)和BLOB. *编辑 – >附加信息 * 我们的假设是相同的:
但是我注意到有一个命令,你必须遵循它才能使它工作(特别是,将附件放在身体后面的END旁边! >连接LOGIC utl_smtp.write_data( l_conn,utl_tcp.crlf ); -- Close Email utl_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 ); (编辑:淮安站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |