{"id":56,"date":"2020-02-27T01:04:19","date_gmt":"2020-02-27T01:04:19","guid":{"rendered":"http:\/\/168.138.249.13\/?p=56"},"modified":"2020-08-06T03:31:45","modified_gmt":"2020-08-06T03:31:45","slug":"enviando-e-mail-no-oracle-usando-ssl-tls","status":"publish","type":"post","link":"https:\/\/adrianotanaka.com.br\/index.php\/2020\/02\/27\/enviando-e-mail-no-oracle-usando-ssl-tls\/","title":{"rendered":"Enviando e-mail no Oracle usando SSL\/TLS."},"content":{"rendered":"\n<p>Atualmente criptografar os dados trafegados \u00e9 uma coisa fundamental, inclusive a Oracle&nbsp;<a href=\"https:\/\/oracle-base.com\/blog\/2015\/06\/27\/native-network-encryption-not-part-of-advanced-security-option\/\">liberou o uso de algumas funcionalidades de criptografia para vers\u00f5es n\u00e3o Enterprise<\/a>&nbsp;, e a criptografia de e-mail est\u00e1 implementada nos grandes fornecedores de tecnologia.<\/p>\n\n\n\n<p>Ent\u00e3o preparei o seguinte tutorial de como se configurar uma Wallet, importar os certificados e tamb\u00e9m um exemplo bem \u00fatil de como enviar o e-mail.<\/p>\n\n\n\n<p>Vamos utilizar o Gmail para testes e voc\u00ea precisa ativar o acesso \u00e0 aplicativos menos seguros sen\u00e3o mesmo com as credenciais corretas o login n\u00e3o vai ser poss\u00edvel:<\/p>\n\n\n\n<figure class=\"wp-block-embed\"><div class=\"wp-block-embed__wrapper\">\nhttps:\/\/support.google.com\/accounts\/answer\/6010255?p=lsa_blocked&#038;hl=pt-BR&#038;visit_id=637184509838379444-493512541&#038;rd=1\n<\/div><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"baixando-o-certificado\">Baixando o certificado<\/h2>\n\n\n\n<p>O primeiro passo para isso \u00e9 baixar o certificado que vai ser utilizado para a autentica\u00e7\u00e3o segura no servi\u00e7o de e-mail. Usando o Google Chrome, basta acessar o site (nesse caso o Gmail) e clicar no cadeado na barra de navega\u00e7\u00e3o (1) e ap\u00f3s isso clicar no campo certificado(2):<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/i.imgur.com\/xbJuRTh.png\" alt=\"enter image description here\"\/><\/figure>\n\n\n\n<p>Na janela que abrir, clique em Caminho de certifica\u00e7\u00e3o (1), depois clique no certificado root (o primeiro de cima para baixo) e por fim use a op\u00e7\u00e3o Exibir certificado (2):<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/i.imgur.com\/Ma4rLQ5.png\" alt=\"enter image description here\"\/><\/figure>\n\n\n\n<p>Na janela que se abrir, clique na aba detalhes e depois Copiar para arquivo e siga os passos apresentados para salvar o certificado na sua m\u00e1quina, copie o arquivo gerado para o servidor de banco de dados.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"criando-a-wallet\">Criando a Wallet<\/h2>\n\n\n\n<p>Para essa autentica\u00e7\u00e3o, precisamos passar o certificado do passo anterior nas nossas chamadas e para isso vamos criar uma wallet seguindo os passos:<\/p>\n\n\n\n<p>Criar a Wallet:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&#91;oracle@db-orig email_ssl]$ orapki wallet create -wallet $PWD\/wallet_email -pwd Oracle123 -auto_login\nOracle PKI Tool Release 19.0.0.0.0 - Production\nVersion 19.3.0.0.0\nCopyright (c) 2004, 2019, Oracle and\/or its affiliates. All rights reserved.\n\nOperation is successfully completed.\n<\/code><\/pre>\n\n\n\n<p>Adicionar o certificado \u00e0 Wallet:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&#91;oracle@db-orig email_ssl]$ orapki wallet add -wallet $PWD\/wallet_email\/ewallet.p12 -trusted_cert -cert gmail.com.cer -pwd Oracle123\nOracle PKI Tool Release 19.0.0.0.0 - Production\nVersion 19.3.0.0.0\nCopyright (c) 2004, 2019, Oracle and\/or its affiliates. All rights reserved.\n\nOperation is successfully completed.\n<\/code><\/pre>\n\n\n\n<p>Listar os certificados presentes em uma Wallet:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&#91;oracle@db-orig email_ssl]$ orapki wallet display -wallet $PWD\/wallet_email\/ -pwd Oracle123\nOracle PKI Tool Release 19.0.0.0.0 - Production\nVersion 19.3.0.0.0\nCopyright (c) 2004, 2019, Oracle and\/or its affiliates. All rights reserved.\n\nRequested Certificates: \nUser Certificates:\nTrusted Certificates: \nSubject:        CN=GlobalSign,O=GlobalSign,OU=GlobalSign Root CA - R2\n&#91;oracle@db-orig email_ssl]$  #### Dica: \u00c9 importante lembrar o caminho e a senha utilizada na Wallet pois vamos aponta-los no nosso envio de email.\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"criando-uma-acl\">Criando uma ACL<\/h2>\n\n\n\n<p>Precisamos criar uma ACL que \u00e9 o recurso que controla as conex\u00f5es de rede de um determinado usu\u00e1rio.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>begin\n  dbms_network_acl_admin.create_acl (\n    acl         => 'acl_gmail.xml',\n    description => 'Libera conexao ao GMAIL',\n    principal   => 'USUARIO_QUE_ENVIA_EMAIL',\n    is_grant    => TRUE,\n    privilege   => 'connect',\n    start_date  => null,\n    end_date    => null\n  );\n \n  dbms_network_acl_admin.add_privilege (\n    acl        => 'acl_gmail.xml',\n    principal  => 'USUARIO_QUE_ENVIA_EMAIL',\n    is_grant   => TRUE,\n    privilege  => 'resolve',\n    start_date => null,\n    end_date   => null\n  );\n \n  dbms_network_acl_admin.assign_acl (\n    acl        => 'acl_gmail.xml',\n    host       => '*.gmail.com',\n    lower_port => 587,\n    upper_port => 587\n  );\n  commit;\nend;\n\/\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"testando-a-nossa-conex\u00e3o\">Testando a nossa conex\u00e3o<\/h2>\n\n\n\n<p>Para testar nossa conex\u00e3o, podemos utilizar a package UTL_HTTP da seguinte forma:<\/p>\n\n\n\n<p>Sem apontar a Wallet e tentando se conectar no servidor:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>SQL> SELECT UTL_HTTP.REQUEST('https:\/\/gmail.com') FROM DUAL;\nSELECT UTL_HTTP.REQUEST('https:\/\/gmail.com') FROM DUAL\n       *\nERROR at line 1:\nORA-29273: HTTP request failed\nORA-06512: at \"SYS.UTL_HTTP\", line 1530\nORA-29024: Certificate validation failure\nORA-06512: at \"SYS.UTL_HTTP\", line 380\nORA-06512: at \"SYS.UTL_HTTP\", line 1470\nORA-06512: at line 1\n<\/code><\/pre>\n\n\n\n<p>Apontando a Wallet criada:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>SQL> select utl_http.request('https:\/\/gmail.com',NULL,'file:\/home\/oracle\/email_ssl\/wallet_email','Oracle123') from dual;\n\nUTL_HTTP.REQUEST('HTTPS:\/\/GMAIL.COM',NULL,'FILE:\/HOME\/ORACLE\/EMAIL_SSL\/WALLET_EMAIL','ORACLE123')\n------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------\n\n&lt;!DOCTYPE html>\n&lt;html lang=\"pt\">\n  &lt;head>\n  &lt;meta charset=\"utf-8\">\n  &lt;meta content=\"width=300, initial-scale=1\" name=\"viewport\">\n  &lt;meta name=\"description\" content=\"O Gmail e um e-mail intuitivo, eficiente e util. S?o 15 GB de armazenamento, acesso em dispositivos moveis e menos spam.\">\n  &lt;meta name=\"google-site-verification\" content=\"LrdTUW9psUAMbh4Ia074-BPEVmcpBxF6Gwf0MSgQXZs\">\n  &lt;title>Gmail&lt;\/title>\n  &lt;style>\n  @font-face {\n  font-family: 'Open Sans';\n  font-style: normal;\n  font-weight: 300;\n  src: local('Open Sans Light'), local('OpenSans-Light'), url(\/\/fonts.gstatic.com\/s\/opensans\/v15\/mem5YaGs126MiZpBA-UN_r8OUuhs.ttf) format('truetype');\n}\n@font-face {\n  font-family: 'Open Sans';\n  font-style: normal;\n  font-weight: 400;\n  src: local('Open Sans'), local('OpenSans'), url(\/\/fonts.gstatic.com\/s\/opensans\/v15\/mem8YaGs126MiZpBA-UFVZ0e.ttf) format('truetype');\n<\/code><\/pre>\n\n\n\n<p>}<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\"><p>Cortei o resultado para ocupar menos espa\u00e7o.<\/p><\/blockquote>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"c\u00f3digo-para-enviar-e-mails-no-oracle-usando-ssl\">C\u00f3digo para enviar e-mails no Oracle usando SSL:<\/h3>\n\n\n\n<p>Abaixo um pequeno c\u00f3digo de exemplo de como utilizar o que foi apresentado aqui nesse tutorial:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">DECLARE <br>&nbsp; &nbsp; c &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;utl_smtp.connection; <br>&nbsp; &nbsp; l_mailhost VARCHAR2 (64) := 'smtp.gmail.com'; -- Seu servidor de e-mail <br>&nbsp; &nbsp; l_from &nbsp; &nbsp; VARCHAR2 (64) := 'adriano.tanakaa@gmail.com'; &nbsp; &nbsp; -- Conta que est\u00e1 mandando o e-mail <br>&nbsp; &nbsp; l_to &nbsp; &nbsp; &nbsp; VARCHAR2 (64) := 'adriano.tanakaa@gmail.com'; &nbsp; &nbsp; -- Conta que vai receber o e-mail <br>&nbsp; &nbsp; l_subject &nbsp;VARCHAR2 (64) := 'Mensagem de teste '; &nbsp;-- Titulo do e-mail<br>&nbsp; &nbsp; crlf &nbsp; &nbsp; &nbsp; VARCHAR2(2) := utl_tcp.crlf; <br>&nbsp; &nbsp; corpo_mail VARCHAR2(32767); <br>&nbsp; &nbsp; l_boundary VARCHAR2(50) := '----=*#abc1234321cba#*='; <br>&nbsp; &nbsp; &nbsp; &nbsp; <br>BEGIN <br>&nbsp; &nbsp; c := utl_smtp.Open_connection(host =&gt; l_mailhost, port =&gt; 587, <br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; wallet_path =&gt; 'file:\/home\/oracle\/email_ssl\/wallet_email', <br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; wallet_password =&gt; 'Oracle123', <br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;secure_connection_before_smtp =&gt; FALSE <br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;); <br><br>&nbsp; &nbsp; utl_smtp.Ehlo(c, 'smtp.gmail.com'); <br>&nbsp; &nbsp; utl_smtp.Starttls(c); <br>&nbsp; &nbsp; utl_smtp.Ehlo(c, 'smtp.gmail.com'); <br>&nbsp; &nbsp; utl_smtp.Auth(c, 'EMAIL', 'SENHA', utl_smtp.all_schemes); <br>&nbsp; &nbsp; utl_smtp.Mail (c, l_from); <br>&nbsp; &nbsp; utl_smtp.Rcpt (c, l_to); <br>&nbsp; &nbsp; utl_smtp.Open_data (c); <br>&nbsp; &nbsp; utl_smtp.Write_data (c, 'Date: ' <br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; || To_char (SYSDATE, 'DD-MON-YYYY HH24:MI:SS') <br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; || crlf); <br>&nbsp; &nbsp; utl_smtp.Write_data (c, 'From: ' <br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; || l_from <br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; || crlf); <br><br>&nbsp; &nbsp; utl_smtp.Write_data (c, 'Subject: ' <br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; || l_subject <br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; || SYSDATE <br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; || crlf); <br><br>&nbsp; &nbsp; utl_smtp.Write_data (c, 'To: ' <br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; || l_to <br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; || crlf); <br><br>&nbsp; &nbsp; utl_smtp.Write_data(c, 'MIME-Version: 1.0' <br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;|| utl_tcp.crlf); <br><br>&nbsp; &nbsp; utl_smtp.Write_data(c, 'Content-Type: multipart\/alternative; boundary=\"' <br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;|| l_boundary <br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;|| '\"' <br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;|| utl_tcp.crlf <br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;|| utl_tcp.crlf); <br><br>&nbsp; &nbsp; utl_smtp.Write_data(c, 'Content-Type: text\/html; charset=\"iso-8859-1\"' <br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;|| utl_tcp.crlf <br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;|| utl_tcp.crlf); <br><br>&nbsp; &nbsp; utl_smtp.Write_data (c, '' <br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; || crlf); <br><br>&nbsp; &nbsp; corpo_mail := '&lt;html&gt; &nbsp; &nbsp; &lt;head&gt; &nbsp; &nbsp; &nbsp; &lt;title&gt;Voc\u00ea pode usar HTML em seus e-mails !!!&lt;\/title&gt; &nbsp; &nbsp; &lt;\/head&gt; &nbsp; &nbsp; &lt;body&gt; &nbsp; &nbsp; &nbsp;&lt;b&gt; Voc\u00ea pode colocar um texto em negrito&lt;\/b&gt; &lt;br&gt; &nbsp; &nbsp; &nbsp;&lt;i&gt; italico&lt;\/i&gt;&lt;br&gt; &nbsp; &nbsp; &nbsp;Entre outros ! &nbsp; &nbsp; &lt;\/body&gt; &nbsp; &lt;\/html&gt;'; <br><br>&nbsp; &nbsp; utl_smtp.Write_raw_data (c, utl_raw.Cast_to_raw (utl_tcp.crlf || corpo_mail)); <br><br>&nbsp; &nbsp; utl_smtp.Close_data (c); <br><br>&nbsp; &nbsp; utl_smtp.Quit (c); <br>EXCEPTION <br>&nbsp; &nbsp; WHEN utl_smtp.transient_error <br>&nbsp; &nbsp; &nbsp; &nbsp; OR <br>&nbsp; &nbsp; &nbsp; &nbsp; utl_smtp.permanent_error <br>&nbsp; &nbsp; &nbsp; &nbsp; THEN <br>&nbsp; &nbsp; &nbsp; utl_smtp.Quit(c); <br><br>&nbsp; &nbsp; &nbsp; Raise_application_error(-20001, 'Falha ao enviar e-mail devido ao seguite erro: ' <br>&nbsp; &nbsp; &nbsp; || SQLERRM); <br>&nbsp; &nbsp; WHEN OTHERS THEN <br>&nbsp; &nbsp; &nbsp; NULL; <br>END; <br><br>\/ <\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Atualmente criptografar os dados trafegados \u00e9 uma coisa fundamental, inclusive a Oracle&nbsp;liberou o uso de algumas funcionalidades de criptografia para vers\u00f5es n\u00e3o Enterprise&nbsp;, e a criptografia de e-mail est\u00e1 implementada nos grandes fornecedores de tecnologia. Ent\u00e3o preparei o seguinte tutorial de como se configurar uma Wallet, importar os certificados e tamb\u00e9m um exemplo bem \u00fatil [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"material-hide-sections":[],"footnotes":""},"categories":[6,1],"tags":[5,4,3],"class_list":["post-56","post","type-post","status-publish","format-standard","hentry","category-oracle","category-uncategorized","tag-banco-de-dados","tag-database","tag-oracle"],"_links":{"self":[{"href":"https:\/\/adrianotanaka.com.br\/index.php\/wp-json\/wp\/v2\/posts\/56","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/adrianotanaka.com.br\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/adrianotanaka.com.br\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/adrianotanaka.com.br\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/adrianotanaka.com.br\/index.php\/wp-json\/wp\/v2\/comments?post=56"}],"version-history":[{"count":1,"href":"https:\/\/adrianotanaka.com.br\/index.php\/wp-json\/wp\/v2\/posts\/56\/revisions"}],"predecessor-version":[{"id":57,"href":"https:\/\/adrianotanaka.com.br\/index.php\/wp-json\/wp\/v2\/posts\/56\/revisions\/57"}],"wp:attachment":[{"href":"https:\/\/adrianotanaka.com.br\/index.php\/wp-json\/wp\/v2\/media?parent=56"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/adrianotanaka.com.br\/index.php\/wp-json\/wp\/v2\/categories?post=56"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/adrianotanaka.com.br\/index.php\/wp-json\/wp\/v2\/tags?post=56"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}