Гость
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Blob в base64 и перебор длины строки / 3 сообщений из 3, страница 1 из 1
08.02.2020, 19:40
    #39924263
Blob в base64 и перебор длины строки
Братцы, такое дело. Отправляю аттачами всякое из PL/SQL
Блобы в бэйз64 преобразую так

FOR i IN 0 .. TRUNC((DBMS_LOB.getlength(p_attach_blob) - 1 )/l_step) LOOP
UTL_SMTP.write_data(l_mail_conn, UTL_RAW.cast_to_varchar2(UTL_ENCODE.base64_encode(DBMS_LOB.substr(p_attach_blob, l_step, i * l_step + 1))));
END LOOP;

В итоге в составе письма колоночка с base64 ровненькая такая шириной 64 символа, а вот некоторые строки выстреливают в сотню.
размер l_step на это не влияет.

Ну и как результат

SPAM assasin: -2.019 BASE64_LENGTH_79_INF base64 encoded email part uses line length greater than 79 characters

Караул! Есть идеи?
...
Рейтинг: 0 / 0
08.02.2020, 21:05
    #39924282
Vadim Lejnin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Blob в base64 и перебор длины строки
Саша Сплинтер
Братцы, такое дело. Отправляю аттачами всякое из PL/SQL
Блобы в бэйз64 преобразую так

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
 

FOR i IN 0 .. TRUNC((DBMS_LOB.getlength(p_attach_blob) - 1 )/l_step) 
LOOP
      UTL_SMTP.write_data(l_mail_conn,  
           UTL_RAW.cast_to_varchar2(
                UTL_ENCODE.base64_encode(
                     DBMS_LOB.substr(p_attach_blob, l_step, i * l_step + 1)
                )
           )
   );
END LOOP;



В итоге в составе письма колоночка с base64 ровненькая такая шириной 64 символа, а вот некоторые строки выстреливают в сотню.
размер l_step на это не влияет.

Ну и как результат
Код: plsql
1.
SPAM assasin: -2.019 BASE64_LENGTH_79_INF base64 encoded email part uses line length greater than 79 characters


Караул! Есть идеи?



21705811

lf в конце блока

И да,

HOWTO :: Как правильно задавать вопросы
Как мне оформить свое сообщение?

1) Полная постановка задачи (без сокращений)
2) Подготовьте тестовые данные, лучше в виде with
например (не ваш случай):

Код: plsql
1.
2.
3.
4.
5.
with tbl(col1,col2,col3) as (
select 1,'name1',to_date('11.02.1921','DD.MM.YYYY') from dual union all
select 2,'name2',to_date('11.02.1922','DD.MM.YYYY') from dual union all
)
select col2 from tbl...



2) Покажите что сделали, и что получили (не в пересказе)


3) Старайтесь не использовать screenshot, научитесь копировать и оформлять текст[/quot]
...
Рейтинг: 0 / 0
09.02.2020, 10:42
    #39924339
Blob в base64 и перебор длины строки
Благодарен вам за ответ и справедливые замечания!

Оказалось достаточно коррективы || UTL_TCP.crlf, как в этом посте и сказано!

FOR i IN 0 .. TRUNC((DBMS_LOB.getlength(p_attach_blob) - 1 )/l_step) LOOP
UTL_SMTP.write_data(l_mail_conn, UTL_RAW.cast_to_varchar2(UTL_ENCODE.base64_encode(DBMS_LOB.substr(p_attach_blob, l_step, i * l_step + 1))) || UTL_TCP.crlf);
END LOOP;
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Blob в base64 и перебор длины строки / 3 сообщений из 3, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]