Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / UTL_SMTP отправка вложения (разбивает по 1000 символов) / 4 сообщений из 4, страница 1 из 1
10.07.2018, 15:48
    #39672144
mserjo
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
UTL_SMTP отправка вложения (разбивает по 1000 символов)
Всем добрый день.

Подскажите, пожалуйста, может кто знает или сталкивался с такой ситуацией:
отправляю вложение с помощью UTL_SMTP.write_raw_data, в итоге файл приходит разбитый по 1000 символов в каждой строке, хотя исходный файл без такой разбивки.
может это какая-то настройка оракла устанавливает максимальную длину строки вложения? или какие-то ограничения в самом UTL_SMTP ?

Оракл 11.2.0.4.0
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
declare
    Subject IN VARCHAR2 := 'Test';
    Message IN VARCHAR2 := 'Test message';
    ToEmail IN VARCHAR2 := 'test02@mail.com';
    Attachment IN CLOB;
    FilenameAttachment IN VARCHAR2;
    FromEmail IN VARCHAR2 := 'test01@mail.com';
    FromName IN VARCHAR2 := 'TEST';
    Priority IN INTEGER := 3;
    ContentType IN VARCHAR2 := 'application/excel;';
    con UTL_SMTP.connection;
    AttachmentLength PLS_INTEGER;
    amount BINARY_INTEGER := 30000;
    BUFFER VARCHAR2(32000);
    offset PLS_INTEGER := 1;
    MIME_BOUNDARY  VARCHAR2(50) := '=====Boundary======';
begin
    -- здесь Attachment вычитывает файл DBMS_LOB.LOADCLOBFROMFILE

    -- setup mail header
    con := UTL_SMTP.OPEN_CONNECTION('localhost', 25);
    UTL_SMTP.helo(con, SYS_CONTEXT('USERENV', 'DB_DOMAIN'));
    UTL_SMTP.Mail(con, LOWER(FromEmail));
    UTL_SMTP.rcpt(con, LOWER(ToEmail));
    UTL_SMTP.open_data(con);

    UTL_SMTP.write_data(con, 'From: "'||FromName||'" <'||LOWER(FromEmail)||'>'||UTL_TCP.CRLF);
    UTL_SMTP.write_data(con, 'To: <'||LOWER(ToEmail)||'>'||UTL_TCP.CRLF);
    UTL_SMTP.write_data(con, 'Subject: '||Subject||UTL_TCP.CRLF);
    UTL_SMTP.write_data(con, 'X-Priority: '||Priority||UTL_TCP.CRLF);

    UTL_SMTP.write_data(con, 'Mime-Version: 1.0' || UTL_TCP.CRLF);
    UTL_SMTP.write_data(con, 'Content-Type: '||MIME_MIXED||' boundary="'||MIME_BOUNDARY||'"' || UTL_TCP.CRLF);
    UTL_SMTP.write_data(con, '--'||MIME_BOUNDARY || UTL_TCP.CRLF); 
    UTL_SMTP.write_data(con, 'Content-type: text/plain' || UTL_TCP.CRLF); 

    -- Mail Body
    UTL_SMTP.write_data(con, UTL_TCP.CRLF);
    UTL_SMTP.write_raw_data(con, UTL_RAW.cast_to_raw(Message));
    UTL_SMTP.write_data(con, UTL_TCP.CRLF);

    -- put footer to end of mail
    UTL_SMTP.write_data(con, UTL_TCP.CRLF || UTL_TCP.CRLF);
    UTL_SMTP.write_data(con, 'Message from User001 sent at '||TO_CHAR(LOCALTIMESTAMP, 'yyyy-mm-dd hh24:mi:ss'));
    UTL_SMTP.write_data(con, UTL_TCP.CRLF);

    -- Mail Attachment
    UTL_SMTP.write_data(con, UTL_TCP.CRLF);
    UTL_SMTP.write_data(con, '--'||MIME_BOUNDARY || UTL_TCP.CRLF);
    UTL_SMTP.write_data(con, 'Content-Type: '||ContentType||' name="'||FilenameAttachment||'"'|| UTL_TCP.CRLF);
    UTL_SMTP.write_data(con, 'Content-Disposition: attachment; filename="'||FilenameAttachment||'"'|| UTL_TCP.CRLF);
    UTL_SMTP.write_data(con, UTL_TCP.CRLF);

    AttachmentLength := DBMS_LOB.GETLENGTH(Attachment);
    plog.dolog('SENDMAIL_PKG.SendMail: AttachmentLength='||AttachmentLength);
    LOOP
        EXIT WHEN offset > AttachmentLength;
        DBMS_LOB.READ(Attachment, amount, offset, BUFFER);
        plog.dolog('SENDMAIL_PKG.SendMail: BUFFER='||BUFFER);
        UTL_SMTP.write_raw_data(con, UTL_RAW.cast_to_raw(BUFFER));
        offset := offset + amount;
    END LOOP;

    UTL_SMTP.write_data(con, UTL_TCP.CRLF);
    UTL_SMTP.write_data(con, '--'||MIME_BOUNDARY||'--' || UTL_TCP.CRLF);

    CloseMail(con);
end;
...
Рейтинг: 0 / 0
11.07.2018, 16:24
    #39672659
Kompromiss
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
UTL_SMTP отправка вложения (разбивает по 1000 символов)
Насколько я знаю, это не проблема Oracle, а требование SMTP-протокола.
Файлы при передаче обычно кодируют в base64.
...
Рейтинг: 0 / 0
11.07.2018, 16:31
    #39672660
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
UTL_SMTP отправка вложения (разбивает по 1000 символов)
...
Рейтинг: 0 / 0
18.07.2018, 10:55
    #39675499
mserjo
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
UTL_SMTP отправка вложения (разбивает по 1000 символов)
спасибо за ответы
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / UTL_SMTP отправка вложения (разбивает по 1000 символов) / 4 сообщений из 4, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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