powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Отправка почты через Офис365
18 сообщений из 18, страница 1 из 1
Отправка почты через Офис365
    #39945760
Добрый день, коллеги!!!
На новом сервере нужно настроить отправку почты из БД Oracle (пакет utl_smtp) через почтовый сервер smtp.office365.com:587
Сам сертификат с Офис365 скачал:
$openssl s_client -connect smtp.office365.com:587 -starttls smtp
А вот настроить wallet пакетом OWM (Oracle Wallet Manager) не получается. -:(

Буду очень рад Вашей помощи!!!
...
Рейтинг: 0 / 0
Отправка почты через Офис365
    #39945764
Фотография Vadim Lejnin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexander Starshinin,

Лазарь Каганович"У каждой аварии ошибки есть имя номер, фамилия и должность сообщение и контекст"


Если хотите, чтобы Вам помогли, задайте вопрос правильно:


Студентам, желающим помощи
HOWTO :: Как правильно задавать вопросы
Как мне оформить свое сообщение?


1) Полная постановка задачи (без сокращений)
2) Подготовьте тестовые данные, лучше в виде with
например (не ваш случай):

Код: plsql
1.
2.
3.
4.
5.
6.
with tbl(col1,col2,col3) as (
select 1,'name1',to_date('11.02.1921','DD.MM.YYYY') from dual union all
select 2,'name2',to_date('11.02.1922','DD.MM.YYYY') from dual union all
select 2,'name2',to_date('11.02.1922','DD.MM.YYYY') from dual
)
select col2 from tbl...



2) Покажите что сделали, и что получили (не в пересказе)


3) Старайтесь не использовать screenshot, научитесь копировать и оформлять текст


В этом случае Вам обязательно помогут
...
Рейтинг: 0 / 0
Отправка почты через Офис365
    #39945770
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Отправка почты через Офис365
    #39945775
Вячеслав, спасибо за Ваш ответ и ссылку! Я конечно уже читал эту документацию. Но настроить увы пока не получается...(((
В том числе перечитал документацию по ссылке: https://docs.oracle.com/cd/B14098_01/core.1012/b13995/wallets.htm

Вопрос - если у Вас есть опыт настройки Oracle Wallet Manager, то можем с Вами связаться по скайпу и на конкретике все обсудить?
Буду очень рад Вашей помощи!!!
...
Рейтинг: 0 / 0
Отправка почты через Офис365
    #39945779
Спасибо, Вадим за Ваш ответ!!!
Мне это все понятно конечно. Готов и буду рад на конкретике все обсудить. Например, по скайпу -:)
Мои контактные данные доступны в профиле на форуме.

Пример отправки почты:
DECLARE
c utl_smtp.connection;
l_mailhost VARCHAR2 (64) := 'smtp.office365.com';
l_from VARCHAR2 (64) := 'avs@mobilesol.ru';
l_to VARCHAR2 (64) := 'avs@mobilesol.ru';
l_subject VARCHAR2 (64) := 'utl_smtp test';
crlf varchar2(2) := UTL_TCP.CRLF;
vEhlo_Mes varchar2(3000);
vReplies utl_smtp.replies;
vReply utl_smtp.reply;
BEGIN
c := utl_smtp.open_connection(
host => l_mailhost,
port => 587,
wallet_path => 'file:/home/oracle/wallets/',
wallet_password => 'Test1234!',
secure_connection_before_smtp => FALSE);

vEhlo_Mes := 'utl_smtp.ehlo';
vReplies := utl_smtp.ehlo(c,'mobilesol.ru');
vReply := UTL_SMTP.STARTTLS(c,secure_host => 'outlook.com');
UTL_SMTP.EHLO(c, 'oracle');

utl_smtp.command( c, 'AUTH LOGIN');
utl_smtp.command( c, 'хеш на логин');
utl_smtp.command( c, 'хеш на пароль');

UTL_SMTP.mail (c, l_from);
UTL_SMTP.rcpt (c, l_to);
UTL_SMTP.open_data (c);
UTL_SMTP.write_data (c, 'Date: ' || TO_CHAR (SYSDATE, 'DD-MON-YYYY HH24:MI:SS') || crlf);
UTL_SMTP.write_data (c, 'From: ' || l_from || crlf);
UTL_SMTP.write_data (c, 'Subject: ' || l_subject || crlf);
UTL_SMTP.write_data (c, 'To: ' || l_to || crlf);
UTL_SMTP.write_data (c, 'message test' || crlf);
UTL_SMTP.close_data (c);
UTL_SMTP.quit (c);
exception
when others then
begin
dbms_output.put_line('Code=' || To_Char(vReply.code) || 'Text - ' || vReply.text);
dbms_output.put_line('Error =' || sqlcode || 'Text - ' || sqlerrm);
end;
END;
/


Результат:
Error =-29024Text - ORA-29024: Certificate validation failure
...
Рейтинг: 0 / 0
Отправка почты через Офис365
    #39945783
SQL*Plus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexander Starshinin
Спасибо, Вадим за Ваш ответ!!!
Мне это все понятно конечно. Готов и буду рад на конкретике все обсудить. Например, по скайпу -:)
Мои контактные данные доступны в профиле на форуме.

Пример отправки почты:
Код: 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.
39.
40.
41.
42.
43.
44.
45.
DECLARE
  c utl_smtp.connection;
  l_mailhost    VARCHAR2 (64) := 'smtp.office365.com';
  l_from        VARCHAR2 (64) := 'avs@mobilesol.ru';
  l_to          VARCHAR2 (64) := 'avs@mobilesol.ru';
  l_subject     VARCHAR2 (64) := 'utl_smtp test';
  crlf varchar2(2) := UTL_TCP.CRLF;
  vEhlo_Mes     varchar2(3000);
  vReplies           utl_smtp.replies;
  vReply             utl_smtp.reply;
BEGIN
  c := utl_smtp.open_connection(
            host => l_mailhost,
            port => 587,
            wallet_path => 'file:/home/oracle/wallets/',
            wallet_password => 'Test1234!',
            secure_connection_before_smtp => FALSE);

  vEhlo_Mes := 'utl_smtp.ehlo';
  vReplies := utl_smtp.ehlo(c,'mobilesol.ru');
  vReply := UTL_SMTP.STARTTLS(c,secure_host => 'outlook.com');
  UTL_SMTP.EHLO(c, 'oracle');

  utl_smtp.command( c, 'AUTH LOGIN');
  utl_smtp.command( c, 'хеш на логин');
  utl_smtp.command( c, 'хеш на пароль');  
 
  UTL_SMTP.mail (c, l_from);
  UTL_SMTP.rcpt (c, l_to);
  UTL_SMTP.open_data (c);
  UTL_SMTP.write_data (c, 'Date: ' || TO_CHAR (SYSDATE, 'DD-MON-YYYY HH24:MI:SS') || crlf);
  UTL_SMTP.write_data (c, 'From: ' || l_from || crlf);
  UTL_SMTP.write_data (c, 'Subject: ' || l_subject || crlf);
  UTL_SMTP.write_data (c, 'To: ' || l_to || crlf);
  UTL_SMTP.write_data (c, 'message test' || crlf);
  UTL_SMTP.close_data (c);
  UTL_SMTP.quit (c);
exception
when others then
 begin
    dbms_output.put_line('Code=' || To_Char(vReply.code) || 'Text - ' || vReply.text);
    dbms_output.put_line('Error =' || sqlcode || 'Text - ' || sqlerrm);    
 end;   
END;
/ 



Результат:
Код: plsql
1.
Error =-29024Text - ORA-29024: Certificate validation failure

Для оформления кода на данном форуме используйте, пожалуйста тэг SRC.
...
Рейтинг: 0 / 0
Отправка почты через Офис365
    #39945785
SQL*Plus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexander Starshinin
Спасибо, Вадим за Ваш ответ!!!
Мне это все понятно конечно. Готов и буду рад на конкретике все обсудить. Например, по скайпу -:)
Мои контактные данные доступны в профиле на форуме .

Вадим!
Сообщите вопрошающему ваш ценник
и реквизиты для оплаты очных консультаций.
...
Рейтинг: 0 / 0
Отправка почты через Офис365
    #39945864
Мутаген
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Многократно обсуждали такие темы https://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1309387&msg=21828368

В частности версия СУБД нужна актуальная для работы с современными вариантами TLS. 9i не подойдёт, 11g тоже
...
Рейтинг: 0 / 0
Отправка почты через Офис365
    #39945875
Версия базы:
Oracle Database 12c Standard Edition Release 12.2.0.1.0 - 64bit Production
То, что пакет utl_smtp корректно работает только с версиями 11.2.0.4 и выше я в курсе.
...
Рейтинг: 0 / 0
Отправка почты через Офис365
    #39945932
Мутаген, спасибо за Ваш ответ!
Не вижу по ссылке информации как правильно создать wallet, чтобы все работало(((
...
Рейтинг: 0 / 0
Отправка почты через Офис365
    #39945955
Фотография Vadim Lejnin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexander Starshinin,

автор...
Не вижу по ссылке информации как правильно создать wallet, чтобы все работало(((
...


Например так:

How to Send Emails from APEX to an External Source Using Gmail’s SMTP

Там про APEX, но APEX использует тот же UTL_SMTP


Дополнительно, в wallet нужно положить сертификат office
“Sending secure E-Mails out of the database: SSL/TLS + UTL_SMTP + OpenSSL + ACL + Wallet”
авторThis is great documentation! Seriously it was near perfect for my environment.

Here my additions.

At the steps in “SSL certificates & Oracle Wallet”

1. To get the certificate, I’m using this website
https://whatsmychaincert.com/?smtp.office365.com

Enter the domain of the smtp server (ie. smtp.office365.com or smtp.gmail.com) in the box and click “Generate Chain”

2. Instead of using “owm”, i’m using the command line tool “orapki”, see this website for detail
https://blog.pythian.com/oracle-and-amazon-simple-email-service/

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
$ mkdir -p $ORACLE_HOME/owm/wallets/oracle

$ orapki wallet create -wallet $ORACLE_HOME/owm/wallets/oracle/office365

** Remember the password you set

$ orapki wallet add -wallet $ORACLE_HOME/owm/wallets/oracle/office365 -trusted_cert -cert outlook.com.chain.crt

$ orapki wallet display -wallet $ORACLE_HOME/owm/wallets/oracle/office365

-- At the step “Final test”
-- I have to send the ehlo twice… that part, I don’t understand so it’s like this

UTL_SMTP.EHLO(c, ‘oracle.ninja’);
UTL_SMTP.STARTTLS(c);
UTL_SMTP.EHLO(c, ‘oracle.ninja’);

utl_smtp.command( c, ‘AUTH LOGIN’);
utl_smtp.command( c, ‘ZGVqYW5Ab3JhY2xlLm5pbmph’);
utl_smtp.command( c, ‘ZHVtbXkxMjM=’);
...
Рейтинг: 0 / 0
Отправка почты через Офис365
    #39945966
Спасибо, Вадим!
Сделал все как Вы написали.
$ mkdir -p $ORACLE_HOME/owm/wallets/oracle

$ orapki wallet create -wallet $ORACLE_HOME/owm/wallets/oracle/office365

** Remember the password you set

$ orapki wallet add -wallet $ORACLE_HOME/owm/wallets/oracle/office365 -trusted_cert -cert outlook.com.chain.crt

$ orapki wallet display -wallet $ORACLE_HOME/owm/wallets/oracle/office365

Вот что отображается на выходе:
$ orapki wallet add -wallet /home/oracle/smdb/wallets/office365 -trusted_cert -cert Office365_1.cer
Oracle PKI Tool : Version 12.2.0.1.0
Copyright (c) 2004, 2016, Oracle and/or its affiliates. All rights reserved.

Enter wallet password:
Operation is successfully completed.
[oracle@smorclin wallets]$ orapki wallet display -wallet /home/oracle/smdb/wallets/office365
Oracle PKI Tool : Version 12.2.0.1.0
Copyright (c) 2004, 2016, Oracle and/or its affiliates. All rights reserved.

Enter wallet password:
Requested Certificates:
User Certificates:
Trusted Certificates:
Subject: CN=outlook.com,O=Microsoft Corporation,L=Redmond,ST=Washington,C=US

Но ошибка в процедуре, что я привел в качестве примера все такая же -:(
ORA-29024: Certificate validation failure
...
Рейтинг: 0 / 0
Отправка почты через Офис365
    #39946080
Фотография Vadim Lejnin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexander Starshinin,

Путь поправили?
Код: plsql
1.
2.
3.
4.
...
wallet_path => 'file:/home/oracle/wallets/',
...
orapki .... $ORACLE_HOME/owm/wallets/oracle/office365
...
Рейтинг: 0 / 0
Отправка почты через Офис365
    #39946087
Я не использовал переменную среды $ORACLE_HOME, а wallet создал путем полного указания папки для его создания:
$orapki wallet create -wallet /home/oracle/smdb/wallets/office365

И в команде соединения с сервером указал полный путь wallet_path

c := utl_smtp.open_connection(
host => l_mailhost,
port => 587,
wallet_path => 'file:/home/oracle/smdb/wallets/office365/',
wallet_password => 'Test1234!',
secure_connection_before_smtp => FALSE);

Ошибка возникает при выполнении команды UTL_SMTP.STARTTLS(c,secure_host => 'outlook.com');
...
Рейтинг: 0 / 0
Отправка почты через Офис365
    #39946099
Мутаген
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Vadim Lejnin

Дополнительно, в wallet нужно положить сертификат office
Не office, а от центра сертификации (CA). В данном случае этот https://dl.cacerts.digicert.com/DigiCertGlobalRootCA.crt.pem (DigiCert Global Root CA). У автора по ссылке работает потому что он всю цепь (chain) сертификации вставляет в валлет.
Vadim Lejnin
автор
Код: plsql
1.
2.
-- At the step “Final test”
-- I have to send the ehlo twice… that part, I don’t understand so it’s like this


Потому что после starttls начинается новая сессия протокола SMTP. Потому и EHLO второй раз делать надо. Там даже возможности сервера анонсируются разные. Например, smtp от офиса365 не предлагает аутентификацию в нешифрованной сессии.

Ну и всё это имеет небольшое значение, поскольку Microsoft собирается запретить SMTP auth в пользу хипстерского OAuth
...
Рейтинг: 0 / 0
Отправка почты через Офис365
    #39946155
Мутаген
Vadim Lejnin

Дополнительно, в wallet нужно положить сертификат office
Не office, а от центра сертификации (CA). В данном случае этот https://dl.cacerts.digicert.com/DigiCertGlobalRootCA.crt.pem (DigiCert Global Root CA). У автора по ссылке работает потому что он всю цепь (chain) сертификации вставляет в валлет.
Vadim Lejnin
пропущено...
Потому что после starttls начинается новая сессия протокола SMTP. Потому и EHLO второй раз делать надо. Там даже возможности сервера анонсируются разные. Например, smtp от офиса365 не предлагает аутентификацию в нешифрованной сессии.

Ну и всё это имеет небольшое значение, поскольку Microsoft собирается запретить SMTP auth в пользу хипстерского OAuth


Сертификат скачал и установил. Но ошибка к сожалению все такая же-:(
не могу понять пока почему корневой сертификат в OWM находится в стадии [Empty]
Может быть основная причина как раз в этом???
...
Рейтинг: 0 / 0
Отправка почты через Офис365
    #39946238
Мутаген
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
наоборот, сертификат от outlook.com надо удалить из валлета
...
Рейтинг: 0 / 0
Отправка почты через Офис365
    #39946255
Мутаген
наоборот, сертификат от outlook.com надо удалить из валлета


Удалил из валлета то, что Вы написали и все ОТЛИЧНО заработало!!!
Большое спасибо Вам!!! Я очень рад Вашей помощи!!!
...
Рейтинг: 0 / 0
18 сообщений из 18, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Отправка почты через Офис365
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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