Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 2 3 4 5 6 7 8 [9] 10 11   вперед  Ctrl      все
 Re: Передача письма с вложением. Готовое решение  [new]
-2-
Member

Откуда:
Сообщений: 12878
Asmodeus
З.Ы. Какое, однако, забавное "пи" используется. :-)
Со школы уже столько "пи" прошло..., что девятка из памяти выпала.
6 фев 14, 14:46    [15528877]     Ответить | Цитировать Сообщить модератору
 Re: Передача письма с вложением. Готовое решение  [new]
orawish
Member

Откуда: Гадюкино-2 (City)
Сообщений: 15360
-2-
Asmodeus
З.Ы. Какое, однако, забавное "пи" используется. :-)
Со школы уже столько "пи" прошло..., что девятка из памяти выпала.

acos(-1) надёжнее
6 фев 14, 14:48    [15528891]     Ответить | Цитировать Сообщить модератору
 Re: Передача письма с вложением. Готовое решение  [new]
LordOfOrder
Member

Откуда:
Сообщений: 11
chameleon82, во-первых, спасибо Вам большое за этот пакет. Очень сильно помог в работе и сэкономил уйму времени!
Во-вторых, хочу сообщить о проблемах:
1) Отправляем на почту вложением файл xlxs. Я получал такое письмо на yandex-е, и получалось так, что ContentTransferEncoding принимал значение null, поэтому на диск сохранялась всякая херня.
Я не стал особо копаться и заморачиваться и тупо прописал это в коде:
 IF hdr_entity = 'Content-Type' THEN
   extract_value(MAILBOX(mail_id).attachments(MAILBOX(mail_id).attachments.last).boundary,answer,'boundary');                       
   extract_value(MAILBOX(mail_id).attachments(MAILBOX(mail_id).attachments.last).charset,answer,'charset');
------------------- Моя вставка
 IF INSTR(answer, 'APPLICATION') > 0 THEN
   MAILBOX(mail_id).attachments(MAILBOX(mail_id).attachments.last).ContentTransferEncoding := 'base64';
 END IF;
------------------- Моя вставка

Если вы скажете, куда отослать, то я пошлю вам это письмо.

2) Вторая ошибка гораздо серьезнее.

автор
----ALT--pUggPsmc1392604312
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: base64

CgrQodGD0LHRgdC40LTQuNC4INCx0Y7QtNC20LXRgtC90YvQvCDRg9GH0YDQtdC20LTQtdC90LjR
j9C8INC90LAg0YDQtdCw0LvQuNC30LDRhtC40Y4g0LTQvtC/0L7Qu9C90LjRgtC10LvRjNC90YvR
hSDQvNC10YDQvtC/0YDQuNGP0YLQuNC5LCDQvdCw0L/RgNCw0LLQu9C10L3QvdGL0YUg0L3QsCDR
gdC90LjQttC10L3QuNC1INC90LDQv9GA0Y/QttC10L3QvdC+0YHRgtC4INC90LAg0YDRi9C90LrQ
tSDRgtGA0YPQtNCwINGB0YPQsdGK0LXQutGC0L7QsiDQoNCkIC0gOTEwOTMxCi0tIApNaXNoYSBN
aXNoYQ==


Смотрите, кодировка utf-8. Когда код доходит до вызова функции CONVERT при парсинге строки при попытке положить данные в CLOB:
CONVERT(UTL_RAW.cast_to_varchar2(UTL_ENCODE.base64_decode(UTL_RAW.cast_to_raw(
'CgrQodGD0LHRgdC40LTQuNC4INCx0Y7QtNC20LXRgtC90YvQvCDRg9GH0YDQtdC20LTQtdC90LjR'
))), 'CL8MSWIN1251', 'UTF8')

, то происходит ошибка. Потому что идет разрыв в символах. Если убрать в конце 'R' или добавить 'j9' из начала новой строки, то все пройдет хорошо. Сам метод конвертации по-частям ущербен. Нужно сначала собирать все в одну кучу, а потом одной операцией конвертить.
17 фев 14, 12:52    [15576618]     Ответить | Цитировать Сообщить модератору
 Re: Передача письма с вложением. Готовое решение  [new]
chameleon82
Member

Откуда: Russia, Новосибирск
Сообщений: 251
LordOfOrder
chameleon82, во-первых, спасибо Вам большое за этот пакет. Очень сильно помог в работе и сэкономил уйму времени!

Спасибо )
LordOfOrder
1) Отправляем на почту вложением файл xlxs. Я получал такое письмо на yandex-е, и получалось так, что ContentTransferEncoding принимал значение null

любопытно. но вложение не всегда в base64. чтобы понять причину, нужны все заголовки

LordOfOrder
Если вы скажете, куда отослать, то я пошлю вам это письмо.

приложите заголовки сюда или само письмо во вложении к сообщению на форуме.

LordOfOrder
2) Вторая ошибка гораздо серьезнее.

Да, конвертировать по частям не есть хорошо, но тут ограничение на 32к символов, а вложения зачастую намного больше. Проблема в том, что не все байты символа всегда в строку входят, это, конечно, бага. Создам на гите issue на это.

ПыСы: чтение почты пакетом все еще пока в экспериментальном состоянии :)
17 фев 14, 14:28    [15577291]     Ответить | Цитировать Сообщить модератору
 Re: Передача письма с вложением. Готовое решение  [new]
LordOfOrder
Member

Откуда:
Сообщений: 11
1) По первой ошибке - см. Приложение. Я еще раз проверил - да, без моей вставки не работает.
2) Еще одна проблема - на некоторых письмах может возникать ошибка в блоке:
IF ascii(substr(answer,0,1)) NOT IN (9,32) THEN
  hdr_entity := substr(answer,1,instr(answer,':')-1);
  MAILBOX(mail_id).attachments(MAILBOX(mail_id).attachments.last).HDR(hdr_entity):='';                                    
  hdr_entity_value := substr(answer,instr(answer,':')+2);
ELSE 


Вот здесь hdr_entity может принимать значение null, потому что в строке может не находиться символ ":", соответственно возникает ошибка присвоения значения null-ключу. Я тупо обернул инструкцию: nvl(hdr_entity, '?') и не стал заморачиваться. Вот как это может произойти:

автор
MIME-Version: 1.0
Content-Type: multipart/mixed;
boundary="----------0B5176249399AFBB7"

------------0B5176249399AFBB7
Content-Type: text/plain; charset=windows-1251
Content-Transfer-Encoding: quoted-printable

=C7=E4=F0=E0=E2=F1=F2=E2=F3=E9=F2=E5, .



---------- =CF=E5=F0=E5=F1=FB=EB=E0=E5=EC=EE=E5 =EF=E8=F1=FC=EC=EE --------=
--
=CE=F2: =D3=E3=EB=EE=E2 =CC=E8=F5=E0=E8=EB <uglov@minfin-a=
ltai.ru>
=CA: svod@parusaltai.ru
=C0 =F2=E0=EA=E6=E5 =EA: =20
=C2=F0=E5=EC=FF =F1=EE=E7=E4=E0=ED=E8=FF: Fri, 14 Feb 2014 13:16:09 +0=
700
=D2=E5=EC=E0: =C7=E0=FF=E2=EA=E0 =F1=E2=EE=E4=FB =B9140214/2
=CF=F0=E8=EA=F0=E5=EF=EB=E5=ED=ED=FB=E5 =F4=E0=E9=EB=FB: =C7=E0=FF=E2=EA=E0=
.xlsx

=C7=E4=F0=E0=E2=F1=F2=E2=F3=E9=F2=E5, .


Вот на строчке "ltai.ru>" оно и крашится.

К сообщению приложен файл (mail1.txt - 16Kb) cкачать
18 фев 14, 07:14    [15580192]     Ответить | Цитировать Сообщить модератору
 Re: Передача письма с вложением. Готовое решение  [new]
LordOfOrder
Member

Откуда:
Сообщений: 11
Если это поможет, то по 2 ошибке письмо:
1) Пересылаемое
2) Приходит на почту на сервисе https://vhost5.sibdc.ru/webmail

Кхм...неужто выходит так, что по строчкам вообще не стоит делать разбор? Или "=" - это знак переноса строки? Тогда Вам придется запилить обработку переноса?
18 фев 14, 07:19    [15580194]     Ответить | Цитировать Сообщить модератору
 Re: Передача письма с вложением. Готовое решение  [new]
AntonG
Member

Откуда: Иркутск
Сообщений: 38
Добрый день,
я тоже заинтересован в процессе получения почты, поэтому вот моя исправленная/дополненная версия

переписана процедура get_mail

1. исправлена проблема построчной конвертации
2. добавлена возможность перезаписывать вложения когда в одном почтовом сообщении содержится несколько частей, содержащих одну и ту же информацию например в text/plain и text/html

К сообщению приложен файл (MAIL_PKG.pck - 42Kb) cкачать
18 фев 14, 07:27    [15580200]     Ответить | Цитировать Сообщить модератору
 Re: Передача письма с вложением. Готовое решение  [new]
chameleon82
Member

Откуда: Russia, Новосибирск
Сообщений: 251
Vadim Romanenko
Привет всем!

Для того, чтоб не испытывать проблем, как у May12, я бы категорически предложил всем переменным типа varchar2 выдать размер с запасом. Например, в текущем варианте под папку отдается 30 символов. Люди, ну чем Вы думаете?? Под имя файла 256, под имя папки - 30 :) Да кто в Оракле трясется сегодня над каждым байтом??? Тем более в пакете, тем более, когда это имя и папка не хранится в БД? Сегодня ОЗУ считается гигабайтами, а не килобайтами!


sys.obj$.name (который Вы видите через all_directories) = varchar2(30) ни больше, ни меньше. Это алиас, а не полный путь, обратите на это внимание
20 фев 14, 06:20    [15595120]     Ответить | Цитировать Сообщить модератору
 Re: Передача письма с вложением. Готовое решение  [new]
Bios852
Member

Откуда:
Сообщений: 1
chameleon82,

Помогите. Скопировал пакет, скомпилировал нормально. При попытке отправить письмо все время ругается на utl_smtp.Mail(v_Mail_Conn, sndr.rcptmail); в процедуре send, пишет Syntax error. Почему? Версия Oracle 8 или 9 точно не помню сейчас нет возможности посмотреть.
2 июл 14, 18:05    [16251396]     Ответить | Цитировать Сообщить модератору
 Re: Передача письма с вложением. Готовое решение  [new]
jan2ary
Member

Откуда: Киев
Сообщений: 1548
Тут Javamail API упоминался, на всякий случай оставлю это здесь
Sending Mails Through Java Stored Procedure Fails After Database Upgrade to 11.2.0.4 (Doc ID 1631194.1)
8 июл 14, 12:59    [16274669]     Ответить | Цитировать Сообщить модератору
 Re: Передача письма с вложением. Готовое решение  [new]
chameleon82
Member

Откуда: Russia, Новосибирск
Сообщений: 251
Bios852,

пакет работает на версии оракла 9 и выше
23 июл 14, 13:02    [16346214]     Ответить | Цитировать Сообщить модератору
 Re: Передача письма с вложением. Готовое решение  [new]
igor_gar
Member

Откуда:
Сообщений: 3
При использовании пакета с отправкой почты без атача, при вызове пакета возвращает ошибку: ORA-06531: Reference to uninitialized collection. Версия Oracle 11.2.0.4.

Изучение проблемы указало на строки кода:
 type attach_list is table of attach_row;
 attachments attach_list;


Переписание строк на следующие решило проблему:

type attach_list is table of attach_row;
 attachments attach_list := attach_list();
30 июл 14, 15:41    [16377661]     Ответить | Цитировать Сообщить модератору
 Re: Передача письма с вложением. Готовое решение  [new]
Egoza
Guest
Добрый день!
У меня Oracle 11.2.0.4. Для кодирования заголовков использую UTL_ENCODE.MIMEHEADER_ENCODE (encoding - base64). При длине заголовка более 46 символов процедура разбивает заголовок на несколько строк, вот только не совсем верно - перед каждой новой частью нет проблема - как результат, почтовый сервер неверно разбирает MIME-заголовoк. Взял процедуру ENCODE из пакета PKG_MAIL - верно разбивается заголовок и почтовый сервер его верно воспринимает. Не смог понять, почему разбиение строки в ENCODE сделано на 24 символа. Разъясните, пожалуйста, почему для типов кодирования base64 и quoted-printable encode выбраны именно такие константы. И может кто знает, как научить работать верно UTL_ENCODE.MIMEHEADER_ENCODE ?
28 сен 14, 14:44    [16630817]     Ответить | Цитировать Сообщить модератору
 Re: Передача письма с вложением. Готовое решение  [new]
chameleon82
Member

Откуда: Russia, Новосибирск
Сообщений: 251
Egoza, подбиралось экспериментальным путем. Стоит помнить, что длина строки письма не должна превышать 76 символов, в противном случае почтовые клиенты могут неправильно обрабатывать полученный текст
30 сен 14, 11:29    [16637614]     Ответить | Цитировать Сообщить модератору
 Re: Передача письма с вложением. Готовое решение  [new]
Egoza
Guest
chameleon82, спасибо за пояснение.
30 сен 14, 13:20    [16638244]     Ответить | Цитировать Сообщить модератору
 Re: Передача письма с вложением. Готовое решение  [new]
Snezhanka
Member

Откуда: Россия
Сообщений: 2
почему именно 76 символов? не помню про это ограничение
2 окт 14, 02:52    [16647886]     Ответить | Цитировать Сообщить модератору
 Re: Передача письма с вложением. Готовое решение  [new]
Вячеслав Любомудров
Member

Откуда: Владивосток
Сообщений: 17112
Snezhanka
почему именно 76 символов? не помню про это ограничение
Это не совсем ограничение
Скорее правило хорошего тона
http://tools.ietf.org/html/rfc2822#section-2.3
2 окт 14, 03:05    [16647890]     Ответить | Цитировать Сообщить модератору
 Re: Передача письма с вложением. Готовое решение  [new]
AG#
Member

Откуда: Российская Федерация
Сообщений: 2305
NO-WS-CTL = %d1-8 / ; US-ASCII control characters
%d11 / ; that do not include the
%d12 / ; carriage return, line feed,
%d14-31 / ; and white space characters
%d127

text = %d1-9 / ; Characters excluding CR and LF
%d11 /
%d12 /
%d14-127 /
obs-text

specials = "(" / ")" / ; Special characters used in
"<" / ">" / ; other parts of the syntax
"[" / "]" /
":" / ";" /
"@" / "\" /
"," / "." /
DQUOTE

No special semantics are attached to these tokens. They are simply
single characters.
2 окт 14, 05:47    [16647957]     Ответить | Цитировать Сообщить модератору
 Re: Передача письма с вложением. Готовое решение  [new]
AG#
Member

Откуда: Российская Федерация
Сообщений: 2305
AG#,

No special semantics are attached to these tokens. They are simply
single characters.
2 окт 14, 05:49    [16647958]     Ответить | Цитировать Сообщить модератору
 Re: Передача письма с вложением. Готовое решение  [new]
chameleon82
Member

Откуда: Russia, Новосибирск
Сообщений: 251
Исправлена ошибка с получателями, стоявшими в копии письма, спасибо пользователю llocust Git
24 ноя 14, 12:46    [16895774]     Ответить | Цитировать Сообщить модератору
 Re: Передача письма с вложением. Готовое решение  [new]
May12
Member

Откуда: ТУЛЫП
Сообщений: 877
Ребят, а у вас на группы рассылки нормально письма ходят? у меня ошибка:
 ORA-29279: Постоянная ошибка SMTP: 550 5.1.1 User unknown
17 сен 15, 13:15    [18160507]     Ответить | Цитировать Сообщить модератору
 Re: Передача письма с вложением. Готовое решение  [new]
chameleon82
Member

Откуда: Russia, Новосибирск
Сообщений: 251
May12, проверьте пользователей в рассылке, такая ошибка возникает, когда ящика одного из пользователей в рассылке не существует.
18 сен 15, 06:16    [18163774]     Ответить | Цитировать Сообщить модератору
 Re: Передача письма с вложением. Готовое решение  [new]
6eper
Member

Откуда:
Сообщений: 8
chameleon82,

Пытаюсь подключиться к серверу для получения количества писем:
MAIL_PKG2.SET_MAILSERVER ('server_ip_address');
MAIL_PKG2.SET_AUTH ('mail_user','mail_password');
MAIL_PKG2.MAIL_CONNECT('POP3');

При выполнении процедуры MAIL_CONNECT выдает ошибку:
14:07:22 ORA-20000: -ERR [AUTH] You must use stronger authentication such as AUTH or APOP to connect to this server

Помогите ее обойти, плиз
15 фев 16, 15:14    [18818471]     Ответить | Цитировать Сообщить модератору
 Re: Передача письма с вложением. Готовое решение  [new]
Ljucius11
Member

Откуда:
Сообщений: 3
Всех приветствую, есть вопрос, может тут подскажут.
использую пакет UTL_SMTP почта успешно отправляется.
используя функцию Reply := Utl_Smtp.Close_Data(V_Mail_Conn); получаю ИД почтового уведомления которое мне прислал Почтовый сервер.

Вопрос: Как по данному ИД средствами PL/SQL запросить у почтового сервера статус доставки данного уведомления.

Вопросы типо а зачем и кому это нужно прошу не задавать, так как с этим проблема и я лучше промолчу.
Скажу кратко НАДО.

Благодарен за ответ.
25 фев 16, 19:38    [18864375]     Ответить | Цитировать Сообщить модератору
 Re: Передача письма с вложением. Готовое решение  [new]
bounce message
Guest
Ljucius11
и я лучше промолчу
поздно метаться, уже сказал.
25 фев 16, 19:46    [18864389]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 2 3 4 5 6 7 8 [9] 10 11   вперед  Ctrl      все
Все форумы / Oracle Ответить