oracle添加附件,oracle – PL / SQL发送带附件的电子邮件?

这个PL/SQL过程用于通过UTL_SMTP库将BLOB数据作为附件添加到电子邮件中。它首先定义边界,然后设置内容类型、内容定位、文件名和传输编码。接着,它通过读取BLOB数据并进行Base64编码,逐块写入SMTP连接。此过程适用于需要在Oracle数据库环境中批量发送带有附件的邮件的情况。
摘要由CSDN通过智能技术生成

这是我用来做的那个程序

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,这就是你应该使用的.

然后在你的代码中,只传递你的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 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 );

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值