powered by simpleCommunicator - 2.0.30     © 2024 Programmizd 02
Map
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Передача письма с вложением. Готовое решение
25 сообщений из 274, страница 9 из 11
Передача письма с вложением. Готовое решение
    #38551936
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AsmodeusЗ.Ы. Какое, однако, забавное "пи" используется. :-)Со школы уже столько "пи" прошло..., что девятка из памяти выпала.
...
Рейтинг: 0 / 0
Передача письма с вложением. Готовое решение
    #38551941
Фотография orawish
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-2-AsmodeusЗ.Ы. Какое, однако, забавное "пи" используется. :-)Со школы уже столько "пи" прошло..., что девятка из памяти выпала.
acos(-1) надёжнее
...
Рейтинг: 0 / 0
Передача письма с вложением. Готовое решение
    #38562843
LordOfOrder
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
chameleon82, во-первых, спасибо Вам большое за этот пакет. Очень сильно помог в работе и сэкономил уйму времени!
Во-вторых, хочу сообщить о проблемах:
1) Отправляем на почту вложением файл xlxs. Я получал такое письмо на yandex-е, и получалось так, что ContentTransferEncoding принимал значение null, поэтому на диск сохранялась всякая херня.
Я не стал особо копаться и заморачиваться и тупо прописал это в коде:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
 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:
Код: plsql
1.
2.
3.
CONVERT(UTL_RAW.cast_to_varchar2(UTL_ENCODE.base64_decode(UTL_RAW.cast_to_raw(
'CgrQodGD0LHRgdC40LTQuNC4INCx0Y7QtNC20LXRgtC90YvQvCDRg9GH0YDQtdC20LTQtdC90LjR'
))), 'CL8MSWIN1251', 'UTF8')


, то происходит ошибка. Потому что идет разрыв в символах. Если убрать в конце 'R' или добавить 'j9' из начала новой строки, то все пройдет хорошо. Сам метод конвертации по-частям ущербен. Нужно сначала собирать все в одну кучу, а потом одной операцией конвертить.
...
Рейтинг: 0 / 0
Передача письма с вложением. Готовое решение
    #38563033
chameleon82
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
LordOfOrderchameleon82, во-первых, спасибо Вам большое за этот пакет. Очень сильно помог в работе и сэкономил уйму времени!

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

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

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

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

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

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

ПыСы: чтение почты пакетом все еще пока в экспериментальном состоянии :)
...
Рейтинг: 0 / 0
Передача письма с вложением. Готовое решение
    #38563840
LordOfOrder
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1) По первой ошибке - см. Приложение. Я еще раз проверил - да, без моей вставки не работает.
2) Еще одна проблема - на некоторых письмах может возникать ошибка в блоке:
Код: plsql
1.
2.
3.
4.
5.
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>" оно и крашится.
...
Рейтинг: 0 / 0
Передача письма с вложением. Готовое решение
    #38563842
LordOfOrder
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если это поможет, то по 2 ошибке письмо:
1) Пересылаемое
2) Приходит на почту на сервисе https://vhost5.sibdc.ru/webmail

Кхм...неужто выходит так, что по строчкам вообще не стоит делать разбор? Или "=" - это знак переноса строки? Тогда Вам придется запилить обработку переноса?
...
Рейтинг: 0 / 0
Передача письма с вложением. Готовое решение
    #38563843
AntonG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день,
я тоже заинтересован в процессе получения почты, поэтому вот моя исправленная/дополненная версия

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

1. исправлена проблема построчной конвертации
2. добавлена возможность перезаписывать вложения когда в одном почтовом сообщении содержится несколько частей, содержащих одну и ту же информацию например в text/plain и text/html
...
Рейтинг: 0 / 0
Передача письма с вложением. Готовое решение
    #38566964
chameleon82
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Vadim RomanenkoПривет всем!

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


sys.obj$.name (который Вы видите через all_directories) = varchar2(30) ни больше, ни меньше. Это алиас, а не полный путь, обратите на это внимание
...
Рейтинг: 0 / 0
Передача письма с вложением. Готовое решение
    #38686082
Bios852
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
chameleon82,

Помогите. Скопировал пакет, скомпилировал нормально. При попытке отправить письмо все время ругается на utl_smtp.Mail(v_Mail_Conn, sndr.rcptmail); в процедуре send, пишет Syntax error. Почему? Версия Oracle 8 или 9 точно не помню сейчас нет возможности посмотреть.
...
Рейтинг: 0 / 0
Передача письма с вложением. Готовое решение
    #38690329
jan2ary
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тут Javamail API упоминался, на всякий случай оставлю это здесь
Код: plaintext
Sending Mails Through Java Stored Procedure Fails After Database Upgrade to 11.2.0.4 (Doc ID 1631194.1)
...
Рейтинг: 0 / 0
Передача письма с вложением. Готовое решение
    #38703815
chameleon82
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Bios852,

пакет работает на версии оракла 9 и выше
...
Рейтинг: 0 / 0
Передача письма с вложением. Готовое решение
    #38709198
igor_gar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
При использовании пакета с отправкой почты без атача, при вызове пакета возвращает ошибку: ORA-06531: Reference to uninitialized collection . Версия Oracle 11.2.0.4.

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



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

Код: plsql
1.
2.
type attach_list is table of attach_row;
 attachments attach_list := attach_list();
...
Рейтинг: 0 / 0
Передача письма с вложением. Готовое решение
    #38759815
Egoza
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день!
У меня 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 ?
...
Рейтинг: 0 / 0
Передача письма с вложением. Готовое решение
    #38761671
chameleon82
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Egoza, подбиралось экспериментальным путем. Стоит помнить, что длина строки письма не должна превышать 76 символов, в противном случае почтовые клиенты могут неправильно обрабатывать полученный текст
...
Рейтинг: 0 / 0
Передача письма с вложением. Готовое решение
    #38761894
Egoza
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
chameleon82, спасибо за пояснение.
...
Рейтинг: 0 / 0
Передача письма с вложением. Готовое решение
    #38764156
Snezhanka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
почему именно 76 символов? не помню про это ограничение
...
Рейтинг: 0 / 0
Передача письма с вложением. Готовое решение
    #38764158
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Snezhankaпочему именно 76 символов? не помню про это ограничениеЭто не совсем ограничение
Скорее правило хорошего тона
http://tools.ietf.org/html/rfc2822#section-2.3
...
Рейтинг: 0 / 0
Передача письма с вложением. Готовое решение
    #38764192
AG#
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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.
...
Рейтинг: 0 / 0
Передача письма с вложением. Готовое решение
    #38764193
AG#
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AG#,

No special semantics are attached to these tokens. They are simply
single characters.
...
Рейтинг: 0 / 0
Передача письма с вложением. Готовое решение
    #38815045
chameleon82
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Исправлена ошибка с получателями, стоявшими в копии письма, спасибо пользователю llocust Git
...
Рейтинг: 0 / 0
Передача письма с вложением. Готовое решение
    #39053829
Фотография May12
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ребят, а у вас на группы рассылки нормально письма ходят? у меня ошибка:
Код: plaintext
 ORA-29279: Постоянная ошибка SMTP: 550 5.1.1 User unknown
...
Рейтинг: 0 / 0
Передача письма с вложением. Готовое решение
    #39054606
chameleon82
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
May12, проверьте пользователей в рассылке, такая ошибка возникает, когда ящика одного из пользователей в рассылке не существует.
...
Рейтинг: 0 / 0
Передача письма с вложением. Готовое решение
    #39171415
6eper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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

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

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

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

Благодарен за ответ.
...
Рейтинг: 0 / 0
Передача письма с вложением. Готовое решение
    #39179281
bounce message
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ljucius11и я лучше промолчупоздно метаться, уже сказал.
...
Рейтинг: 0 / 0
25 сообщений из 274, страница 9 из 11
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Передача письма с вложением. Готовое решение
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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