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

Откуда: Russia, Новосибирск
Сообщений: 252
krupt
Добрый день.
Подскажите, как отправить письмо с картинкой в теле письма, а не как вложение?


Полагаю, Вы имели ввиду нечто такое:

 BEGIN
	 MAIL_PKG.ADD_ATTACHMENT( ... , 'name' => 'mypicture.jpg'
							);
	 MAIL_PKG.SEND( ....
				  , message => '<html> <body> Моя картинка <img src="mypicture.jpg"></body></html>'
				  , mailfrom => 'no-reply@yourserver.ru'

	              );
	END;


хотя как вложение оно также будет присутствовать. чтобы этого избежать, можно конвертировать бинарник картинки в base64 и складывать сразу в текст письма, хотя не все клиенты смогут отобразить. По другим решениям надо покурить smtp

Извиняюсь за пред сообщение, ктрл+ентер случайно нажал, не дописав )
13 июн 13, 12:16    [14427480]     Ответить | Цитировать Сообщить модератору
 Re: Передача письма с вложением. Готовое решение  [new]
chameleon82
Member

Откуда: Russia, Новосибирск
Сообщений: 252
А вообще чтобы правильно вложить изображение, необходимо дописать пакет на наличие идентификатора у вложения,
Content-ID: <part1.08000907.01030003@domain.ru>


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

 <img src="cid:part1.08000907.01030003@domain.ru">  


вот только как формируются метки у такого идентификатора надо покурить

контент-ид положить после:
utl_smtp.write_data(v_Mail_Conn, 'Content-Transfer-Encoding: base64'|| crlf );

ну а чтобы не отображалось как вложение, допилить чтобы
Content-Disposition: inline;
или вообще отстуствовало данное свойство
13 июн 13, 12:32    [14427591]     Ответить | Цитировать Сообщить модератору
 Re: Передача письма с вложением. Готовое решение  [new]
krupt
Member

Откуда: Екатеринбург
Сообщений: 20
chameleon82,

Внес изменения в Ваш код.

Добавил поле inline в типе attach_row
type attach_row is record ( dirname varchar2(30)
                           , filename varchar2(30)
                           , name varchar2(30)
                           , mimetype varchar2(30)
                           , blobloc blob
                           , clobloc clob
                           , attachtype varchar2(30)
                           , inline BOOLEAN := FALSE
                           );

Добавил параметр pinline во все процедуры Add_attachment, например:
 PROCEDURE ADD_ATTACHMENT ( dirname IN varchar2
                          , filename IN varchar2
                          , mimetype IN varchar2 DEFAULT 'text/plain'
                          , name IN varchar2 DEFAULT NULL
                          , pinline BOOLEAN := FALSE
                           );


В процедуре Send сделал следующее
    IF MAIL_PKG.attachments.count>0 THEN
      FOR x IN 1 .. MAIL_PKG.attachments.count LOOP
          utl_smtp.write_data(v_Mail_Conn, '--'|| boundary || crlf );
          -- HOTFIX
          IF message IS NOT NULL OR x!=1 THEN
            utl_smtp.write_data(v_Mail_Conn, 'Content-Type: '||MAIL_PKG.attachments(x).mimetype||';'|| crlf );
            utl_smtp.write_data(v_Mail_Conn, ' name="');
            utl_smtp.write_raw_data(v_Mail_Conn,utl_raw.cast_to_raw(MAIL_PKG.attachments(x).name));
            utl_smtp.write_data(v_Mail_Conn, '"' || crlf);
            utl_smtp.write_data(v_Mail_Conn, 'Content-Transfer-Encoding: base64'|| crlf );
[b]
            IF Attachments(x).InLine THEN
              utl_smtp.write_data(v_Mail_Conn, 'Content-Disposition: inline;'|| crlf );
            ELSE
                  utl_smtp.write_data(v_Mail_Conn, 'Content-Disposition: attachment;'|| crlf );
            END IF;
[/b]
            utl_smtp.write_data(v_Mail_Conn, ' filename="' || MAIL_PKG.ENCODE(MAIL_PKG.attachments(x).name) || '"' || crlf);
          ELSE
           utl_smtp.write_data(v_Mail_Conn, 'Content-Type: '||MAIL_PKG.attachments(x).mimetype||'; charset="utf-8"'|| crlf );
           utl_smtp.write_data(v_Mail_Conn, 'Content-Transfer-Encoding: base64'|| crlf );
          END IF;
          utl_smtp.write_data(v_Mail_Conn, crlf );
          IF MAIL_PKG.attachments(x).attachtype = 'FILE' THEN
...


Вроде работает, вот только проблема. Все вложения идут в строке поочереди, как сделать чтобы они были в разных строках?
13 июн 13, 13:17    [14427862]     Ответить | Цитировать Сообщить модератору
 Re: Передача письма с вложением. Готовое решение  [new]
krupt
Member

Откуда: Екатеринбург
Сообщений: 20
chameleon82,

Не видел, что вы уже написали про inline :)
13 июн 13, 13:20    [14427881]     Ответить | Цитировать Сообщить модератору
 Re: Передача письма с вложением. Готовое решение  [new]
krupt
Member

Откуда: Екатеринбург
Сообщений: 20
chameleon82,

Отправку делаю так:
  mail_pkg.Add_Attachment( 'REPORTS', 'logo.jpg', 'image/jpeg', 'logo.jpg', TRUE);
  mail_pkg.Send( '1@mail.ru', 'Test attach', 'Some <b>bold</b> message!<br>', 'Sender', 'text/html');
13 июн 13, 13:36    [14427991]     Ответить | Цитировать Сообщить модератору
 Re: Передача письма с вложением. Готовое решение  [new]
chameleon82
Member

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

Внес изменения в Ваш код.

Добавил поле inline в типе attach_row


Вроде работает, вот только проблема. Все вложения идут в строке поочереди, как сделать чтобы они были в разных строках?


Я нашел минутку, решил сам покурить ))

DECLARE
 vClob CLOB :=  UTL_RAW.CAST_TO_VARCHAR2(UTL_ENCODE.base64_decode(UTL_RAW.CAST_TO_RAW(
  'R0lGODlhbgAeAPQAAPFTfP7y9f3j6vBFce0oW/vV3/m4yfR/nfBTe+43Zvebs/Jih/Nwku0oWviq' 
||'vvrF0/epvf3w9PFhhvzi6e42ZfR+nPvU3vNvkfaasu9EcPm3yPWMp/aNqPrG1OwaUP///yH/C01T'
||'T0ZGSUNFOS4wGAAAAAxtc09QTVNPRkZJQ0U5LjAgJPn1cgAh/wtNU09GRklDRTkuMBgAAAAMY21Q'
||'UEpDbXAwNzEyAAAAA0gAc7wALAAAAABuAB4AAAX/4CeOY6Asiad6BKAIZCzPdG3feH4LzOr/i4Ju'
||'SCwac5yf8ncIHJ/Q6CwAWFpXA6d0y9UFBtewJ9stm2NVcZh8bm+TVgpirsrM7wjVwc1/CpQXDzIZ'
||'FTN5Hh19ikM9Kw2CMhYeEzITKwA2CgALBiQBHByJHwYcAKYAHDAiBaCqI6ypIgqgQiICoFofDgun'
||'B50fJgymCxwGAT8YIxEPzA95EMwYlB8VPrUycCqiHx0qHCJpTCJw2+PaIisJI92I4EqYX+8OPg0j'
||'Gg1XFCIR+Ct7M2AI6FnnzZ0HU2DOkYux8IMPUewSFVDR4pSDDwconkK1wAeCERLCJPuA4ceAKXrA'
||'/6gTwe7bhzQjFBRsOKKhD0zczsn0cBGNClciUqzIMMJCPyUNIoigoGTGPA8GMnpQ1dIgCRWYaJpr'
||'59AHjIgftIroyDOGkmkfIoRUUugDhCVARTQKYEBFz6ovVYyo6+GbWJsHVTDI2Q6Ogg6IOzjhe/Ca'
||'Egkx7v2YduhHuaAe1B3zMJiwyzSgDggsfI4E4FI/wWbz4VKqYCdLJCgtevSCiAdWLv/hLEIly4J5'
||'lfz7W9pbS9VLFKxLyGLikgYaSLxVYUHEBSvXRDxV8hV4GgBCO4ctXbN43w8pCPBNJDaGgtHgr8ge'
||'UUeEJSsyGilRjhfmbgJaEMdVQU+RxR55NBQwGvlZVtiGjgcNzMHUEifFIFACifG1gGdWYQQcHL+U'
||'N+B56D00Hlc2JLSTFRvQp4YH/7wiGAnpcRicCAEIREB3YxiQ2CfmubRaIuwM4CNiMNxSTFQqJLAb'
||'hBtIcAcEI0ynRnYf7KTcCI0U0J9eW3U22kOn4ThmIjm+Q9gPFzXiYCRHrYENC0DxZYAAAm3ZUYXA'
||'BLQKg5kVwFctAoW4UwJaFAAoAXsIwJwHnNiiQnQyQBBnGJctoukMGVFQwQbQYFDBhC9uuOmpNTz6'
||'4g+IouqqDPGs+gMBWL76aqyyBmrrrp64VmouvAbbQThXAJBpsMHeQqwKAxxQK7KbhgAAOw=='
)) )
;
 v_id varchar2(25);
BEGIN
     
     MAIL_PKG.ADD_ATTACHMENT( vClob
                             ,'image.gif'
                             ,'image/gif'
                             , disposition => MAIL_PKG.DISPOSITION_INLINE
                            );
     v_id := MAIL_PKG.LAST_ATTACHMENT_ID;

     MAIL_PKG.SEND( mailto => 'A Ivanov <a.ivanov@yourcompany.ru>'
                  , subject => 'Письмо с логотипом'
                  , message => 'Я летаю авиакомпанией  <img src="cid:'|| v_id || '">'                  
                  , mailfrom => 'Уведомление <no-reply@yourcompany.ru>'
                  , mimetype => 'text/html'
                  );
END;


Изменения выложил в GIT
13 июн 13, 14:26    [14428416]     Ответить | Цитировать Сообщить модератору
 Re: Передача письма с вложением. Готовое решение  [new]
krupt
Member

Откуда: Екатеринбург
Сообщений: 20
chameleon82,

Подскажите на счет
krupt
Все вложения идут в строке поочереди, как сделать чтобы они были в разных строках?
13 июн 13, 14:43    [14428600]     Ответить | Цитировать Сообщить модератору
 Re: Передача письма с вложением. Готовое решение  [new]
chameleon82
Member

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

Подскажите на счет
krupt
Все вложения идут в строке поочереди, как сделать чтобы они были в разных строках?


не совсем понял вопрос.
Для переноса строки в html используется тег <br>
14 июн 13, 05:21    [14431546]     Ответить | Цитировать Сообщить модератору
 Re: Передача письма с вложением. Готовое решение  [new]
chameleon82
Member

Откуда: Russia, Новосибирск
Сообщений: 252
LimonFX
Извиняюсь. Работает всё, просто комп без выхода в интернет был))
Но нашел другую странность, аутлук 2007 и выше почему-то письма с вложением принимает без вложения


проверил на аутлук 2010, все работает корректно. с последней версией пакета также корректно отображаются и вложения и встроенные изображения.
14 июн 13, 07:32    [14431595]     Ответить | Цитировать Сообщить модератору
 Re: Передача письма с вложением. Готовое решение  [new]
May12
Member

Откуда: ТУЛЫП
Сообщений: 877
chameleon82, я почитала и поняла, что Ваш пакет может работать с прикрепленными к входящим письмам файлами. Это верное понимание или нужно вчитаться?
13 авг 13, 16:39    [14703493]     Ответить | Цитировать Сообщить модератору
 Re: Передача письма с вложением. Готовое решение  [new]
chameleon82
Member

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

да, все верно, пример получения вложений во входящей почте описан в комментариях в пакете
14 авг 13, 09:03    [14705841]     Ответить | Цитировать Сообщить модератору
 Re: Передача письма с вложением. Готовое решение  [new]
chameleon82
Member

Откуда: Russia, Новосибирск
Сообщений: 252
Добавил примеры с пояснениями на GIT
14 авг 13, 10:55    [14706340]     Ответить | Цитировать Сообщить модератору
 Re: Передача письма с вложением. Готовое решение  [new]
May12
Member

Откуда: ТУЛЫП
Сообщений: 877
chameleon82, спасибо, но у меня как всегда не работает.
История стирания ногтей по локти:
восхищаясь тем, что на свете есть такие люди как Вы, я взяла Ваш пакет, откомпилировала и хотела послать письмо себе, процедура отработала, но письма не пришло. Меня насторожили вот эти строчки из Вашего примера:

  -- Устанавливаем почтовый сервер для отправки почты, отличный от localhost:25
     MAIL_PKG.SET_MAILSERVER ('localhost',25);
     -- Устанавливаем данные для авторизации на почтовом сервере
     MAIL_PKG.SET_AUTH ('a.nekrasov','password'); 


вместо localhost написала адрес exchange сервера. ну и дальше по сути и руководствуясь здравым смыслом.
Запустила, процедура, повторюсь, отработала успешно но ничего не пришло. Должна быть какая-то "дружба" (или любовь) между сервером Oracle и сервером электронной почты?

Причем пример от Кайта у меня отработал корректно (без вложения, правда). Но предвкушая какие фишечки несет в себе Ваш пакет я бы хотела, чтобы он у меня заработал. вот и пишу к Вам...
14 авг 13, 19:47    [14709771]     Ответить | Цитировать Сообщить модератору
 Re: Передача письма с вложением. Готовое решение  [new]
chameleon82
Member

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

Попробуйте не указывать авторизацию, в большинстве случаев она не требуется (Например, в примере Т.Кайта ее нет). Если она установлена в сессии, то сбросить ее можно так:
     MAIL_PKG.SET_AUTH (); 

Попробуйте отправить через локалхост, обычно на оракле уже крутится почтовый демон.
Возможно эксчендж проверяет соответствие отправителя, укажите в параметре mailfrom реальный почтовый ящик.
Если не помогло - попросите почтового администратора разобрать логи.
15 авг 13, 08:19    [14711030]     Ответить | Цитировать Сообщить модератору
 Re: Передача письма с вложением. Готовое решение  [new]
May12
Member

Откуда: ТУЛЫП
Сообщений: 877
chameleon82, сделала с
MAIL_PKG.SET_AUTH (); 

письмо пришло, потом закоментировала и все работает с локал хостом.
Спасибо и добра Вам.
15 авг 13, 11:09    [14711687]     Ответить | Цитировать Сообщить модератору
 Re: Передача письма с вложением. Готовое решение  [new]
May12
Member

Откуда: ТУЛЫП
Сообщений: 877
chameleon82, здравствуйте. Пытаюсь забрать почту (посчитать количество писем) с сервера, получаю такую ошибку:
Error at line 1
ORA-29260: ошибка сети: не соединен
ORA-06512: на "MAYA.MAIL_PKG", line 522
ORA-06512: на line 28
ORA-29260: ошибка сети: TNS:нет прослушивателя

Пробовала и с локал хостом и с явным указанием exchange сервера (+ пароль и логин). Это от того что нет "дружбы" между почтовым сервером ораклом (ну помимо кривизны рук)?

MAIL_PKG.DEBUG := TRUE; расскоментирован, но подробнее описание ошибки не вижу.
19 авг 13, 12:22    [14724877]     Ответить | Цитировать Сообщить модератору
 Re: Передача письма с вложением. Готовое решение  [new]
chameleon82
Member

Откуда: Russia, Новосибирск
Сообщений: 252
May12
chameleon82, здравствуйте. Пытаюсь забрать почту (посчитать количество писем) с сервера, получаю такую ошибку:
Error at line 1
ORA-29260: ошибка сети: не соединен
ORA-06512: на "MAYA.MAIL_PKG", line 522
ORA-06512: на line 28
ORA-29260: ошибка сети: TNS:нет прослушивателя


Какая версия оракла? С 10-ой версии необходимо указывать разрешения по доступу в ACL-листах


May12
MAIL_PKG.DEBUG := TRUE; расскоментирован, но подробнее описание ошибки не вижу.

DBMS_OUTPUT включите и смотрите его, там весь процесс общения с сервером, но ввиду ошибки выше общение еще даже не начиналось
19 авг 13, 12:44    [14725047]     Ответить | Цитировать Сообщить модератору
 Re: Передача письма с вложением. Готовое решение  [new]
May12
Member

Откуда: ТУЛЫП
Сообщений: 877
chameleon82
Какая версия оракла?

10.2. указывать разрешение по доступу это как тут написано?


chameleon82
DBMS_OUTPUT включите

Ясно.
19 авг 13, 13:23    [14725322]     Ответить | Цитировать Сообщить модератору
 Re: Передача письма с вложением. Готовое решение  [new]
May12
Member

Откуда: ТУЛЫП
Сообщений: 877
May12,

не, там про 11 написано. сорри.
19 авг 13, 13:47    [14725486]     Ответить | Цитировать Сообщить модератору
 Re: Передача письма с вложением. Готовое решение  [new]
May12
Member

Откуда: ТУЛЫП
Сообщений: 877
Видимо, мне не забрать почту. =(
19 авг 13, 14:59    [14725950]     Ответить | Цитировать Сообщить модератору
 Re: Передача письма с вложением. Готовое решение  [new]
-2-
Member

Откуда:
Сообщений: 15330
May12
Видимо, мне не забрать почту. =(
возможно данный пакет умеет забирать почту только через попу, а на эксчендже доступ к ней не проходит через порты.
19 авг 13, 15:10    [14726020]     Ответить | Цитировать Сообщить модератору
 Re: Передача письма с вложением. Готовое решение  [new]
May12
Member

Откуда: ТУЛЫП
Сообщений: 877
-2-,
автор
возможно данный пакет умеет забирать почту только через попу,


да, через pop3. А на эксчендже IMAP и надо админов просить что-то сделать чтобы почту забирать через pop3.
что же делать...
19 авг 13, 17:39    [14727065]     Ответить | Цитировать Сообщить модератору
 Re: Передача письма с вложением. Готовое решение  [new]
chameleon82
Member

Откуда: Russia, Новосибирск
Сообщений: 252
May12
-2-,
автор
возможно данный пакет умеет забирать почту только через попу,


да, через pop3. А на эксчендже IMAP и надо админов просить что-то сделать чтобы почту забирать через pop3.
что же делать...


Да, до IMAP еще руки не дошли, только с POP3 пока работает
20 авг 13, 12:27    [14730033]     Ответить | Цитировать Сообщить модератору
 Re: Передача письма с вложением. Готовое решение  [new]
chameleon82
Member

Откуда: Russia, Новосибирск
Сообщений: 252
May12
что же делать...

Настройте пересылку на ящик, к которому есть доступ по pop
20 авг 13, 12:30    [14730060]     Ответить | Цитировать Сообщить модератору
 Re: Передача письма с вложением. Готовое решение  [new]
May12
Member

Откуда: ТУЛЫП
Сообщений: 877
chameleon82, по телнету 110 порт открывается. выполняю код:
 set dbms_output on;
 
 declare
 
 BEGIN
       
       MAIL_PKG.DEBUG := TRUE;
 
       MAIL_PKG.SET_MAILSERVER ('тут и ip пробовала и доменное имя');
       MAIL_PKG.SET_AUTH ('maya@company.ua','pass');
 
       MAIL_PKG.MAIL_CONNECT;
      
       DBMS_OUTPUT.PUT_LINE('Total mails count:'||mail_pkg.mailbox.count);
       
       MAIL_PKG.MAIL_DISCONNECT;

    EXCEPTION WHEN OTHERS THEN
      
      MAIL_PKG.MAIL_DISCONNECT;
    END;


процедура отрабатывает, но количества писем не возвращает, в dbms_output лога общения с сервером не выводит. уже близко. помогите, молю.
20 авг 13, 18:46    [14732518]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 2 3 4 5 [6] 7 8 9 10 11   вперед  Ctrl      все
Все форумы / Oracle Ответить