Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Oracle > как к отправляемому через smtp сервер письму прикр


Автор: dron000 4.11.2006, 05:17
Использую пакет dbms_ , вот проблема как к отправляемому через smtp сервер письму прикреплять файлы?

Автор: Paradox 7.11.2006, 11:28
написать процедуру на java например и дергать ее из Оракла

Автор: dron000 8.11.2006, 14:25
Не знаю Java  но зато уже знаю как создавать и прикреплять текстовые-вот только как открывать файлы с диска!...
Код
--PROCEDURE SEND_MAIL IS
DECLARE  
  mail_conn utl_smtp.connection;
  crlf VARCHAR2(2) := CHR(13) || CHR(10);
  mesg VARCHAR2(8000);
  smtpUser varchar2(256) := 'soap_maker';
  smtpPassword varchar2(256) := '********';



BEGIN
  mail_conn := utl_smtp.open_connection('smtp.mail.ru', 25);
  utl_smtp.helo(mail_conn, 'smtp.mail.ru');
  
  -------AUTHORIZATION-----------
  utl_smtp.command(mail_conn, 'AUTH LOGIN');
  utl_smtp.command(
      mail_conn
    , utl_raw.cast_to_varchar2(
        utl_encode.base64_encode(utl_raw.cast_to_raw(smtpUser))
      )
  );
  utl_smtp.command(
      mail_conn
    , utl_raw.cast_to_varchar2(
        utl_encode.base64_encode(utl_raw.cast_to_raw(smtpPassword))
      )
  );
  
  
  
  
  -----------------
  utl_smtp.mail(mail_conn, '[email protected]'); -- Àäðåñ ïîëó÷àòåëÿ
  utl_smtp.rcpt(mail_conn, '[email protected]'); -- Àäðåñ îòïðàâèòåëÿ
  
  mesg :=
  'From: "Ot_kogo" <[email protected]>' || crlf ||
  'To: [email protected]' || crlf ||
  'Subject: TEST' || crlf || -- òåìà ïèñüìà
  'Date: ' || TO_CHAR( SYSDATE, 'dd Mon yy hh24:mi:ss' ) || crlf ||
  'MIME-Version: 1.0' || crlf ||
  'Content-Type: multipart/mixed;' || crlf ||
  '        boundary="----=_NextPart_000_0001_01C33A55.695A42A0"' || crlf ||
  crlf ||
  '------=_NextPart_000_0001_01C33A55.695A42A0' || crlf ||
  'Content-Type: text/plain;' || crlf ||
  '        charset="us-ascii"' || crlf ||
  'Content-Transfer-Encoding: 7bit' || crlf ||
  crlf ||
  'Tekst pisma...' || crlf || -- Ñàì òåêñò ïèñüìà
  crlf ||
  '------=_NextPart_000_0001_01C33A55.695A42A0' || crlf ||
  'Content-Type: text/plain;' || crlf ||
  '        name="test.txt"' || crlf || -- èìÿ ôàéëà (âëîæåíèå)
  'Content-Transfer-Encoding: 7bit' || crlf ||
  'Content-Disposition: attachment;' || crlf ||
  '        filename="c:\test.txt"' || crlf || -- èìÿ ôàéëà (âëîæåíèå)
  crlf ||
  'Soderzhimoe faila...' || crlf || -- Ñîäåðæèìîå ôàéëà
  crlf ||
  '------=_NextPart_000_0001_01C33A55.695A42A0--' || crlf;
  
  utl_smtp.data(mail_conn, mesg);
  utl_smtp.quit(mail_conn);
  
END;

Добавлено @ 14:26 
....Да ...совсем забыл возникает хрень с русскими буквами-на почту приходят каракулями.

Автор: LSD 8.11.2006, 15:06
Цитата(dron000 @  8.11.2006,  14:25 Найти цитируемый пост)
вот только как открывать файлы с диска!

Используй UTL_FILE.

Автор: LSD 10.11.2006, 16:50
http://www.oracle.com/technology/sample_code/tech/pl_sql/htdocs/Utl_Smtp_Sample.html пример использования UTL_SMTP с авторизацией, аттачментами и т.п.

Автор: dron000 11.11.2006, 23:18
Да это я уже все видел и пробовал-работает,но там загрузка атачментов НЕ С ДИСКА!!!-меня именно этот момент интерсует,желательно чтобы размер подгруж. атачмента был побольше или не ограничен.

Автор: LSD 12.11.2006, 02:56
Идем в поиск, забиваем UTL_FILE, и находим следующие темы:
http://forum.vingrad.ru/topic-57338.html
http://asktom.oracle.com/pls/ask/f?p=4950:8:::::F4950_P8_DISPLAYID:744825627183

Автор: dron000 13.11.2006, 12:41
Честно говоря почитав по ссылкам я еще больше запутался.Ты не мог бы написать фрагмент прикрепления файла с диска и его отправки вместе...

Автор: dron000 21.11.2006, 17:58
Использую пакет dbms_ , вот проблема как к отправляемому через smtp сервер письму прикреплять большие файлы с диска? 

Автор: batigoal 22.11.2006, 09:19

M
batigoal
dron000, ни к чему поднимать темы таким образом.

Если у ког-нибудь есть возможность - помогут. Никто не станет писать за тебя код.

Автор: dron000 22.11.2006, 14:02
Да если бы, мне не нужен код-мне нужна функция которая могла бы передавать большие объекты (blob) или способ передачи их другим образом,а то вот там умничают а мне бы реально помоч.

Автор: 3x3 22.11.2006, 14:40
Цитата(dron000 @ 22.11.2006,  14:02)
Да если бы, мне не нужен код-мне нужна функция которая могла бы передавать большие объекты (blob) или способ передачи их другим образом,а то вот там умничают а мне бы реально помоч.

Попроси администратора ОС написать скрипт, который будет вытаскивать данные из базы, оформлять их соответствующим образом и слать по почте. 

Зачем делать это изнутри базы данных? Если нужно, что бы письма уходили асинхронно (по событию в базе), используй UTL_FILE для создания нового файла с заданием (внутри, например, пиши ID записи которую внешняя программа должна обработать). А дальше дело админа системы - настроить систему слушать каталог на предмет появлений новых файлов с заданиями и запускать программу  отправки почты по их появлении. 

Нормально должно быть три каталога: в первый оракл кладёт по событию файлик. Из него файлик достаёт слушающий процесс и на время обработки помещает во второй каталог. По завершении отправки, файлик перемещается в третий каталог. Таким образом, просто просмотрев содержимое каталогов всегда можно посмотреть что у тебя "скомандовано" к отправке, что находится в процессе отправки, что уже отправлено. Когда это произошло выясняется по датам создания файлов. Удобно контролировать и разруливать ситуации когда кто-то почему-то не получил почту, а они случаются всегда.

Чем это лучше?
Во-первых все занимаются своим делом в пределах своей компетенции: базоданщики базой данных, системщики - системой
Во-вторых это просто дешевле, нормальный админ и так уже знает более чем один подход к отправке почты из скрипта, выбор готовых решений для ОС побольше чем для конкретной БД.
В-третьих, если отправка происходит по событию, не придётся тормозить транзакцию на время отправки почты, но лишь на время создания маленького файлика на диске.



Автор: dron000 22.11.2006, 22:31
Да про это я в курсе и скрипт под вин или майлер на другом языке написал бы уже давно,но задача стоит именно так.

Автор: 3x3 22.11.2006, 23:43
Цитата(dron000 @ 22.11.2006,  22:31)
Да про это я в курсе и скрипт под вин или майлер на другом языке написал бы уже давно,но задача стоит именно так.

Тебе шашечки или что бы ехать?

Автор: dron000 29.11.2006, 14:21
Шашечки!

Автор: 3x3 1.12.2006, 03:42
Цитата(dron000 @ 29.11.2006,  14:21)
Шашечки!

Тогда юзайте вышепосоветованное.


Но подумайте о распределении ролей:

1. Ситстемный администратор
2. Админ БД
3. Разработчик БД

Когда отлаженная система вдруг перестанет отправлять почту, как определишь кого беспокоить?
Кто за что отвечает?
Сколько времени займет \\\"делегирование ответственности\\\" туда-сюда и обратно?

В предложенной схеме всё просто: 

Разработчик знает как сформировать письмо и имеет договоренность с ДБА как заявить о своём желании письмо отправить.
ДБА знает как сделать это безопасно для базы и имеет договорённость с сисадмином, куда складывать \\\"заявки\\\".
Сисадмин ведает доставкой почты и знает как отправлять почту в его виртуальной реальности.

В общем случае на каждой роли может быть более одного человека, работающие параллельно или последовательно (ну те же сисадмины на разных уровнях по пути к интернет могут быть разные). 


А если всем процессом отправки почты заведует исключительно сама база?

В какой-то момент по соображениям безопасности админ, который заведует внешним прокси запретит, скажем, коннекты из интранет по портам SMTP. А у тебя девелоперы заточили трафик через внешний SMTP-сервер (ну я утрирую, но даже и так бывает). При этом, о предпринятых мерах безопасности знают админы на уровне того внешнего прокси, через который в мир лазают все филиалы со всех континентов, и только девелоперы знают, что почта ходит через внешний SMTP, но они давно уволились. А промежуточные уровни никогда и не слышали, ни про какую почту из базы, и про саму базу знать не знают, а если бы и знали - ни за что бы не подумали, что она сама по себе испускает какие-то почтовые сообщения, поскольку функционально для другого предназначена.

В результате, по жалобе на то, что почта перестала ходить, кому-то год придётся разгребать это хозяйство что бы просто понять почему это случилось. И выродится это всё равно в то, что кто-то это всё переделает на правильный лад. 


Вы же не ожидаете, что телефон вдруг начнет показывать вам телевизионные передачи? В принципе это, конечно,  возможно. Но люди предпочитают другие, более подходящие, девайсы для просмотра телепередач. Так же и с базой - в принципе почту отправлять из неё, конечно, можно. smile

Автор: dron000 12.12.2006, 11:08
Да при чем здесь это все??Есть конкретная задача - ты многого не знаеш и пытаешся насоветовать в организационных моментах которых уже не изменить просто так,рамки таковы!-если бы можно было взять и все так просто перераспределить и переделать то наверно бы никто ни у кого ничего не спрашивал!!!!!!!!!!!!!!!!!!!!!!!!!!!!!Как можно этого не понимать??

Добавлено @ 11:11 
Мы и есть разработчики администраторы и соправодители в одном лице.

Автор: 3x3 12.12.2006, 20:34
Цитата(dron000 @ 12.12.2006,  11:08)
Да при чем здесь это все??Есть конкретная задача - ты многого не знаеш и пытаешся насоветовать 

Ну так возьми и просвети меня.

Цитата

...в организационных моментах которых уже не изменить просто так,рамки таковы!-если бы можно было взять и все так просто перераспределить и переделать то наверно бы никто ни у кого ничего не спрашивал!!!!!!!!!!!!!!!!!!!!!!!!!!!!!Как можно этого не понимать??

Добавлено @ 11:11 
Мы и есть разработчики администраторы и соправодители в одном лице.


1.
Тебе переписать вышенаписанное на одно лицо? Типа "Когда отлаженная сложная система вдруг перестанет отправлять почту, как определишь о какой её части беспокоиться? Какая её часть за что отвечает?..." и т.д.?

2. 
"Мы" в одном лице не бывает. Когда лиц более одного - это много лиц.  

3. 
Даже одно лицо в одном лице себя таки бывает в состоянии забыть что у него куда запихано и где при каких изменениях сломается.

4.
Да и плоха та база, которая не мечтает обрасти целым штатом сотрудников smile

Автор: dron000 19.12.2006, 11:34
Ладно,хорошо-допустим  я согласен,но как начет того самого скрипта для отправки писем с вложениями-речь то как раз о нем!??

Автор: 3x3 21.12.2006, 19:50
Цитата(dron000 @ 19.12.2006,  11:34)
Ладно,хорошо-допустим  я согласен,но как начет того самого скрипта для отправки писем с вложениями-речь то как раз о нем!??

Ну тогда рассказывай то много, чего мы не знаем: на чем написанный и под какую операционную систему скрипт/утиль нужен? 

Перечисли в одну строчку, что бы мне было удобнее забить это в google smile

Автор: dron000 22.12.2006, 14:50
Спасибо,я уже зделал.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)