2010-08-03 18 views
0

J'utilise le code de ce lien pour envoyer des pièces jointes dans les notifications par e-mail de notre système;Problèmes de pièces jointes multiples en PL/SQL en utilisant le paquetage utl_smtp

http://www.builderau.com.au/program/oracle/soa/Sending-blob-attachments-in-e-mail-with-utl-smtp/0,339028441,339284536,00.htm

Le problème est que la deuxième pièce jointe est encodant question. Donc, si j'envoie un fichier texte, le texte dans le fichier txt sera tout mashed up .. Comme les 23 premiers caractères sont imprimés correctement, il y a une purée de texte comme 'B • Ú] \ ÈØ] \ <[ÝH Ensuite, il continue avec le texte et la même chose se produit après 23 caractères à nouveau ...

Pour la première pièce jointe, j'imprime la limite MIME;

utl_smtp.write_data(g_mail_conn, chr(13)||chr(10)||chr(13)||chr(10)||'--' || l_boundary || 
       chr(13) || chr(10)); 

utl_smtp.write_data(g_mail_conn, 'Content-Disposition: attachment; filename="test2.txt"' || chr(13) || chr(10)); 
utl_smtp.write_data(g_mail_conn, 'Content-Transfer-Encoding: base64' || chr(13) || chr(10)); 

Puis je cours la boucle while que je pris du lien (copié ci-dessous aussi), puis après la boucle, réinitialiser la variable v_offset, alors je mets le même code ci-dessus pour la deuxième limite pour la pièce jointe .. Puis je ferme les limites MIME à la fin avec

utl_smtp.write_data(g_mail_conn,chr(13) || chr(10) || '--' || l_boundary || '--' || chr(13)); 

Des idées pour lesquelles ce problème se produit?

La boucle While;

<<while_loop>> 
while v_offset < v_length loop 
    dbms_lob.read(p_blob, v_buffer_size, v_offset, v_raw); 
    utl_smtp.write_raw_data(c, utl_encode.base64_encode(v_raw)); 
    utl_smtp.write_data(c, utl_tcp.crlf); 
    v_offset := v_offset + v_buffer_size; 
end loop while_loop; 

Répondre

3

Je viens de trouver la solution ...

La variable v_buffer_size a été modifiée se dans la procédure dbms_lob.read(), donc avant de fixer le nouveau fichier, je viens reconfiguré revenir à 57 avec set v_offset à 1 ..

+0

hmm ... il semble aussi que si vous faites v_buffer_size: = 57 et v_offset: = 1 alors chaque fichier de taille (x * 58) +1 sera tronqué par le dernier caractère – jareeq