powered by simpleCommunicator - 2.0.30     © 2024 Programmizd 02
Map
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Передача письма с вложением. Готовое решение
25 сообщений из 274, страница 6 из 11
Передача письма с вложением. Готовое решение
    #38295993
chameleon82
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
kruptДобрый день.
Подскажите, как отправить письмо с картинкой в теле письма, а не как вложение?


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

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
 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

Извиняюсь за пред сообщение, ктрл+ентер случайно нажал, не дописав )
...
Рейтинг: 0 / 0
Передача письма с вложением. Готовое решение
    #38296031
chameleon82
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А вообще чтобы правильно вложить изображение, необходимо дописать пакет на наличие идентификатора у вложения,
Код: plsql



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

Код: plsql



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

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

ну а чтобы не отображалось как вложение, допилить чтобы
Код: plsql
1.
Content-Disposition: inline;

или вообще отстуствовало данное свойство
...
Рейтинг: 0 / 0
Передача письма с вложением. Готовое решение
    #38296123
krupt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
chameleon82,

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

Добавил поле inline в типе attach_row
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
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, например:
Код: plsql
1.
2.
3.
4.
5.
6.
 PROCEDURE ADD_ATTACHMENT ( dirname IN varchar2
                          , filename IN varchar2
                          , mimetype IN varchar2 DEFAULT 'text/plain'
                          , name IN varchar2 DEFAULT NULL
                          , pinline BOOLEAN := FALSE
                           );



В процедуре Send сделал следующее
Код: 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.
    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 );

            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;

            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
...



Вроде работает, вот только проблема. Все вложения идут в строке поочереди, как сделать чтобы они были в разных строках?
...
Рейтинг: 0 / 0
Передача письма с вложением. Готовое решение
    #38296128
krupt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
chameleon82,

Не видел, что вы уже написали про inline :)
...
Рейтинг: 0 / 0
Передача письма с вложением. Готовое решение
    #38296163
krupt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
chameleon82,

Отправку делаю так:
Код: plsql
1.
2.
  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');
...
Рейтинг: 0 / 0
Передача письма с вложением. Готовое решение
    #38296260
chameleon82
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
kruptchameleon82,

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

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


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

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

Код: 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.
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
...
Рейтинг: 0 / 0
Передача письма с вложением. Готовое решение
    #38296296
krupt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
chameleon82,

Подскажите на счет
kruptВсе вложения идут в строке поочереди, как сделать чтобы они были в разных строках?
...
Рейтинг: 0 / 0
Передача письма с вложением. Готовое решение
    #38297236
chameleon82
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
kruptchameleon82,

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

не совсем понял вопрос.
Для переноса строки в html используется тег <br>
...
Рейтинг: 0 / 0
Передача письма с вложением. Готовое решение
    #38297256
chameleon82
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
LimonFXИзвиняюсь. Работает всё, просто комп без выхода в интернет был))
Но нашел другую странность, аутлук 2007 и выше почему-то письма с вложением принимает без вложения

проверил на аутлук 2010, все работает корректно. с последней версией пакета также корректно отображаются и вложения и встроенные изображения.
...
Рейтинг: 0 / 0
Передача письма с вложением. Готовое решение
    #38365012
Фотография May12
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
chameleon82, я почитала и поняла, что Ваш пакет может работать с прикрепленными к входящим письмам файлами. Это верное понимание или нужно вчитаться?
...
Рейтинг: 0 / 0
Передача письма с вложением. Готовое решение
    #38365603
chameleon82
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
May12,

да, все верно, пример получения вложений во входящей почте описан в комментариях в пакете
...
Рейтинг: 0 / 0
Передача письма с вложением. Готовое решение
    #38365758
chameleon82
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добавил примеры с пояснениями на GIT
...
Рейтинг: 0 / 0
Передача письма с вложением. Готовое решение
    #38366740
Фотография May12
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
chameleon82, спасибо, но у меня как всегда не работает.
История стирания ногтей по локти:
восхищаясь тем, что на свете есть такие люди как Вы, я взяла Ваш пакет, откомпилировала и хотела послать письмо себе, процедура отработала, но письма не пришло. Меня насторожили вот эти строчки из Вашего примера:

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



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

Причем пример от Кайта у меня отработал корректно (без вложения, правда). Но предвкушая какие фишечки несет в себе Ваш пакет я бы хотела, чтобы он у меня заработал. вот и пишу к Вам...
...
Рейтинг: 0 / 0
Передача письма с вложением. Готовое решение
    #38367031
chameleon82
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
May12,

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


Попробуйте отправить через локалхост, обычно на оракле уже крутится почтовый демон.
Возможно эксчендж проверяет соответствие отправителя, укажите в параметре mailfrom реальный почтовый ящик.
Если не помогло - попросите почтового администратора разобрать логи.
...
Рейтинг: 0 / 0
Передача письма с вложением. Готовое решение
    #38367189
Фотография May12
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
chameleon82, сделала с
Код: plsql
1.
MAIL_PKG.SET_AUTH (); 


письмо пришло, потом закоментировала и все работает с локал хостом.
Спасибо и добра Вам.
...
Рейтинг: 0 / 0
Передача письма с вложением. Готовое решение
    #38370516
Фотография May12
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
chameleon82, здравствуйте. Пытаюсь забрать почту (посчитать количество писем) с сервера, получаю такую ошибку:
Код: plaintext
1.
2.
3.
4.
5.
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; расскоментирован, но подробнее описание ошибки не вижу.
...
Рейтинг: 0 / 0
Передача письма с вложением. Готовое решение
    #38370561
chameleon82
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
May12chameleon82, здравствуйте. Пытаюсь забрать почту (посчитать количество писем) с сервера, получаю такую ошибку:
Код: plaintext
1.
2.
3.
4.
5.
Error at line 1
ORA-29260: ошибка сети: не соединен
ORA-06512: на  "MAYA.MAIL_PKG", line 522
ORA-06512: на  line 28
ORA-29260: ошибка сети: TNS:нет прослушивателя 


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


May12MAIL_PKG.DEBUG := TRUE; расскоментирован, но подробнее описание ошибки не вижу.
DBMS_OUTPUT включите и смотрите его, там весь процесс общения с сервером, но ввиду ошибки выше общение еще даже не начиналось
...
Рейтинг: 0 / 0
Передача письма с вложением. Готовое решение
    #38370623
Фотография May12
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
chameleon82Какая версия оракла?
10.2. указывать разрешение по доступу это как тут написано?


chameleon82DBMS_OUTPUT включите
Ясно.
...
Рейтинг: 0 / 0
Передача письма с вложением. Готовое решение
    #38370668
Фотография May12
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
May12,

не, там про 11 написано. сорри.
...
Рейтинг: 0 / 0
Передача письма с вложением. Готовое решение
    #38370759
Фотография May12
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Видимо, мне не забрать почту. =(
...
Рейтинг: 0 / 0
Передача письма с вложением. Готовое решение
    #38370770
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
May12Видимо, мне не забрать почту. =(возможно данный пакет умеет забирать почту только через попу, а на эксчендже доступ к ней не проходит через порты.
...
Рейтинг: 0 / 0
Передача письма с вложением. Готовое решение
    #38371014
Фотография May12
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-2-,
авторвозможно данный пакет умеет забирать почту только через попу,

да, через pop3. А на эксчендже IMAP и надо админов просить что-то сделать чтобы почту забирать через pop3.
что же делать...
...
Рейтинг: 0 / 0
Передача письма с вложением. Готовое решение
    #38371772
chameleon82
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
May12-2-,
авторвозможно данный пакет умеет забирать почту только через попу,

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

Да, до IMAP еще руки не дошли, только с POP3 пока работает
...
Рейтинг: 0 / 0
Передача письма с вложением. Готовое решение
    #38371775
chameleon82
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
May12что же делать...
Настройте пересылку на ящик, к которому есть доступ по pop
...
Рейтинг: 0 / 0
Передача письма с вложением. Готовое решение
    #38372464
Фотография May12
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
chameleon82, по телнету 110 порт открывается. выполняю код:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
 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 лога общения с сервером не выводит. уже близко. помогите, молю.
...
Рейтинг: 0 / 0
25 сообщений из 274, страница 6 из 11
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Передача письма с вложением. Готовое решение
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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