5 Replies Latest reply on Mar 14, 2019 4:48 PM by Amin Chavarria

    Configurar servidor de correo Office365 en la nube

    Amin Chavarria

      Hola, saben cómo se configura el correo de office365 en la nube para que desde pl/sql se puedan enviar correos electrónicos?

       

      He tratado lo siguiente sin hacerlo funcionar:

       

      1. set parametro smtp_out_server=smtp.office365.com:587

       

       

      saludos

        • 1. Re: Configurar servidor de correo Office365 en la nube
          L. Fernigrini

          Que error te da al querer usarlo? Que version / edicion de Oracle?

           

          Como lo utilizas?

          • 2. Re: Configurar servidor de correo Office365 en la nube
            Amin Chavarria

            Hola gracias por responder, la pruebas que he realizado son en RDBMS 11gr2 (11.2.0.2 y 11.2.0.4) y 12cR1 (12.1.0.2.0), sobre Windows y AIX.

             

            SQL> declare

            2 l_connection utl_smtp.connection;

            3 begin

            4 l_connection := utl_smtp.open_connection(

            5 host => 'smtp.office365.com',

            6 port => 587,

            7 wallet_path => 'file:c:\oracle\wallet2',

            8 wallet_password => 'mcs38rpu',

            9 secure_connection_before_smtp => false);

            10 utl_smtp.ehlo(l_connection, 'smtp.office365.com');

            11 utl_smtp.starttls(l_connection);

            12 utl_smtp.auth(l_connection, 'pruebasti@domain.com', 'Abcd1234');

            13 end;

            14 /

            declare

            *

            ERROR en lÝnea 1:

            ORA-29278: error transitorio de SMTP: 421 Service not available

            ORA-06512: en "SYS.UTL_SMTP", lÝnea 54

            ORA-06512: en "SYS.UTL_SMTP", lÝnea 138

            ORA-06512: en "SYS.UTL_SMTP", lÝnea 197

            ORA-06512: en lÝnea 4

             

            Ahorita estoy probando el enviar un correo desde telnet:

             

            telnet smtp.office365.com 587

            Trying...

            Connected to SAT-efz.ms-acdc.office.com.

            Escape character is '^]'.

            220 SN2PR01CA0031.outlook.office365.com Microsoft ESMTP MAIL Service ready at Fri, 1 Feb 2019 17:38:36 +0000

            helo smtp.office365.om

            250 SN2PR01CA0031.outlook.office365.com Hello [187.174.164.77]

            mail from: pruebasti@ilusion.com.mx

            530 5.7.57 SMTP; Client was not authenticated to send anonymous mail during MAIL FROM [SN2PR01CA0031.prod.exchangelabs.com]

            Connection closed.

             

            saludos

            • 3. Re: Configurar servidor de correo Office365 en la nube
              bcarrizo

              Hola Amin...!!!

               

              Lo que observo,  el problema pasa por el SMTP y no por la base de datos.

               

               

              Lo que adjuntas por la prueba con telnet:

               

              Esto indica que te estás conectando al punto final de envío del cliente SMTP (smtp.office365.com), que no se puede usar para el envío directo del email.

              Para el envío directo, usa el punto final de MX para  Office 365, que termina con "mail.protection.outlook.com". Por lo tanto, deja que tu administrador verifique el registro MX.

               

              Además, verifica si el puerto SMTP es 25 / TLS.

               

              Saludos...

              • 4. Re: Configurar servidor de correo Office365 en la nube
                Amin Chavarria

                Es correcto, la nueva política es la autenticación es con usuario y contraseña puerto 587 por el tema de office35 en la nube, pero mi pregunta es,  desde oracle database cómo configurar esto? Entiendo perfecto que antes era el envio de manera directa sin autenticación por parte del servidor de correos, pero ahora ya no.

                • 5. Re: Configurar servidor de correo Office365 en la nube
                  Amin Chavarria

                  -update-

                  1. Se ha resuelto el problema, para las bases de datos 11.2.0.2 no está soportado el protocolo TLS (Doc ID 2033910.1), para Oracle 11g XE no está soportado porque no se pueden crear un wallet, solo a partir del nuevo Oracle 18c XE que ya habilitaron alguna de las características de seguridad que incluye la creación de un wallet.

                   

                  2. Se debe crear un wallet y adjuntar dos certificados de seguridad provistos por outlook.com utilizando la herramienta openssl

                   

                  3. El parámetro smtp_out_server solo debe configurarse cuando exista un servidor de correo On Premise y no en Cloud (office365) para la empresa.

                   

                   

                  El código PL/SQL que a mí me funcionó es el siguiente:

                   

                  DECLARE

                  c utl_smtp.connection;

                  crlf VARCHAR2(2):=chr(13)||chr(10);

                  BEGIN

                  c := utl_smtp.open_connection(

                  host => 'smtp.office365.com',

                  port => 587,

                  wallet_path => 'file:C:\Oracle\product\11.2.0\dbhome_1\owm\wallets\admindb',

                  wallet_password => 'mcs38rpu',                                                -------------------------> contraseña del wallet

                  secure_connection_before_smtp => FALSE);                              --------------------------> Dato obligatorio, si es TRUE marca error porque ya estamos usando un certificado en el wallet

                  UTL_SMTP.EHLO(c, 'smtp.office365.com');

                  UTL_SMTP.STARTTLS(c);

                  UTL_SMTP.EHLO(c, 'smtp.office365.com');

                  UTL_SMTP.AUTH(

                  c => c,

                  username => 'pruebasti@dominio.com',     ----------> usuario de office 365, se registro como .com y no .com.mx

                  password => 'Abcd1234',                         -----------> contraseña del usuario en office 365

                  schemes => utl_smtp.all_schemes);

                   

                  utl_smtp.mail(c, 'pruebasti@dominio.com.mx');     -----------------> Dato obligatorio

                  utl_smtp.write_DATA(c,'Subject: Titulo' ||crlf);                                                   

                  utl_smtp.rcpt(c, 'achavarria@domnio.com.mx'); -----------------> Dato obligatorio

                  utl_smtp.open_data(c);

                   

                  --MAIL HEADER

                  utl_smtp.write_DATA(c,'Date: ' || to_char(sysdate, 'DD-MON-YYYY hh:mi:ss AM') || crlf);

                  utl_smtp.write_DATA(c,'From: pruebasti@dominio.com.mx' || crlf );                     ------------------------> Dato obligatorio

                  utl_smtp.write_DATA(c,'Subject: Titulo' ||crlf);                                                   

                  utl_smtp.write_DATA(c,'To: achavarria@dominio.com.mx' || crlf);                         ------------------------> Dato obligatorio

                  --MAIL BODY

                  utl_smtp.write_DATA(c,'MIME-Version: 1.0'|| crlf );

                  utl_smtp.write_DATA(c,'Content-Type: multipart/mixed;'|| crlf );

                  utl_smtp.write_DATA(c,' boundary="-----SECBOUND"'|| crlf ||crlf );

                  utl_smtp.write_DATA(c,'-------SECBOUND'|| crlf );

                  utl_smtp.write_DATA(c,'Content-Type: text/plain;'|| crlf);

                  utl_smtp.write_DATA(c,'Content-Transfer_Encoding: 7bit'|| crlf);

                  utl_smtp.write_DATA(c,null|| crlf);

                  utl_smtp.write_DATA(c,null|| crlf);

                  utl_smtp.write_DATA(c,null|| crlf);

                  utl_smtp.write_DATA(c,'Inicia contenido del email de pruebas'|| crlf);

                  utl_smtp.write_DATA(c,'Segunda linea del email de pruebas' || crlf);

                  utl_smtp.write_data(c, utl_tcp.CRLF ||'Tercera linea del email de pruebas.');

                  utl_smtp.close_data(c);

                  utl_smtp.quit(c);

                  END;

                  /

                   

                   

                  Gracias a todos por sus respuestas!