Многочисленные проблемы с вложениями в PL / SQL с использованием пакета utl_smtp - PullRequest
0 голосов
/ 03 августа 2010

Я использую код по этой ссылке для отправки вложений в почтовые уведомления нашей системы;

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

Проблема в том, что второе вложение имеет проблему с кодировкой. Так что, если я отправлю текстовый файл, текст в текстовом файле будет все перемешано .. Как первые 23 символа напечатаны правильно, так и есть текстовый массив, как 'B • Ú] \ ÈØ] \ ‹[ÝH затем он продолжается с текстом, и то же самое происходит после 23 символов снова ...

Для первого вложения я печатаю границу 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) );

Затем я запускаю цикл while, который я взял из ссылки (также скопировал ниже), а затем после цикла я сбрасываю переменную v_offset, затем я помещаю тот же код выше для второй границы вложения. Затем я закрываю границы MIME в конце с

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

Есть идеи, почему возникает эта проблема?

Цикл 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;

1 Ответ

4 голосов
/ 04 августа 2010

Я только что нашел решение ...

Переменная v_buffer_size модифицировалась в процедуре dbms_lob.read (), поэтому, прежде чем прикреплять новый файл, мне просто пришлось сбросить его на 57 вместе с установкой v_offset в 1 ..

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...