Ir para conteúdo
fabissilva

SendMail PL/SQL Gmail

Recommended Posts

desenvolvi em PL / SQL uma procedure que envia email que está funcionando perfeitamente. Porém foi mudado o servidor de email para Gmail, que requer autenticação e o tipo de conexão é SSL. Poderiam me ajudar com essas alterações?
A versão do banco de dados é o 11.


CREATE OR REPLACE PROCEDURE PRC_JUN_SEND_MAIL
(
TO_NAME VARCHAR2,
SUBJECT VARCHAR2,
MESSAGE VARCHAR2
)
IS
L_BODY VARCHAR2(32767);

L_MAILHOST VARCHAR2(64) := ''smtp.gmail.com'';
P_USERNAME_ VARCHAR2(50) := ''admin@jun.net'';
P_PASSWORD_ VARCHAR2(50) := ''***********'';
L_DE VARCHAR2(64) := ''Remetente'';
L_FROM VARCHAR2(64) := ''admin@jun.net'';
l_port VARCHAR(7) := ''587'';
L_MAIL_CONN UTL_SMTP.CONNECTION;


BEGIN
L_MAIL_CONN := UTL_SMTP.OPEN_CONNECTION(L_MAILHOST,l_port);
Dbms_Output.Put_Line (''apos conectar'');
UTL_SMTP.HELO(L_MAIL_CONN, L_MAILHOST);

Dbms_Output.Put_Line (''hello'');
UTL_SMTP.COMMAND (L_MAIL_CONN, ''AUTH LOGIN'');
Dbms_Output.Put_Line (''AUTH LOGIN'');
UTL_SMTP.COMMAND (L_MAIL_CONN, UTL_RAW.CAST_TO_VARCHAR2(
UTL_ENCODE.BASE64_ENCODE(UTL_RAW.CAST_TO_RAW(P_USERNAME_))));
UTL_SMTP.COMMAND (L_MAIL_CONN, UTL_RAW.CAST_TO_VARCHAR2( UTL_ENCODE.BASE64_ENCODE(UTL_RAW.CAST_TO_RAW(P_PASSWORD_))));
UTL_SMTP.MAIL(L_MAIL_CONN, L_FROM);
UTL_SMTP.RCPT(L_MAIL_CONN, TO_NAME);

UTL_SMTP.OPEN_DATA(L_MAIL_CONN);

UTL_SMTP.WRITE_RAW_DATA( L_MAIL_CONN, UTL_RAW.CAST_TO_RAW(''FROM:'' ||L_DE||''<''|| L_FROM|| ''>'' || UTL_TCP.CRLF));
UTL_SMTP.WRITE_RAW_DATA( L_MAIL_CONN, UTL_RAW.CAST_TO_RAW(''TO:'' ||TO_NAME||UTL_TCP.CRLF));
UTL_SMTP.WRITE_RAW_DATA( L_MAIL_CONN, UTL_RAW.CAST_TO_RAW(''SUBJECT:'' ||SUBJECT||UTL_TCP.CRLF));
UTL_SMTP.WRITE_RAW_DATA( L_MAIL_CONN, UTL_RAW.CAST_TO_RAW(''CONTENT-TYPE: TEXT/HTML; CHARSET=ISO-8859-1''||UTL_TCP.CRLF));
UTL_SMTP.WRITE_DATA(L_MAIL_CONN, '' ''||UTL_TCP.CRLF);

UTL_SMTP.WRITE_RAW_DATA(L_MAIL_CONN, UTL_RAW.CAST_TO_RAW(UTL_TCP.CRLF||MESSAGE));

UTL_SMTP.CLOSE_DATA(L_MAIL_CONN);

UTL_SMTP.QUIT(L_MAIL_CONN);
END;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora

  • Conteúdo Similar

    • Por 4Unknow
      Boa tarde pessoal, como vocês estão?
      Estou com uma bronca aqui que, mudei de host, e meu sistema de feedback não envia mais os e-mails por que algumas funções estão desativadas pelo host:

      "A função mail() do PHP é desativada por padrão em todos os nossos servidores. Isso porque é uma função perigosa que pode ser usada por códigos maliciosos para disparar mensagens de spam em massa pela sua hospedagem. Isso gera problemas tanto para seu site, quanto para o servidor como um todo.  Para disparar e-mails você precisa usar SMTP autenticado. Usando o protocolo SMTP você utiliza uma conta de e-mail existente em sua hospedagem para enviar suas mensagens de forma autenticada e segura. "

      Mas como não tenho conhecimento não sei como usar via SMTP.
      Meu arquivo que dispara é este abaixo:

       
      <?php $mail = $_POST['email']; $to = "feedback@roboeverest.app";/* SEU EMAIL */ $subject = "Feedback | Robô Everest"; $headers = "De: Feedback | Robô Everest <naoresponda@roboeverest.app>"; $message = "DETALHES\n"; $message .= "\nPrimeiro Nome: " . $_POST['firstname']; $message .= "\nSegundo Nome: " . $_POST['lastname']; $message .= "\nE-mail: " . $_POST['email']; $message .= "\nIdade: " . $_POST['age']; $message .= "\nGênero: " . $_POST['gender']; $message .= "\nTermos e condições aceitos: " . $_POST['terms']. "\n"; $message .= "\nComo você avalia sua satisfação geral com nossos serviços prestados? " . $_POST['question_1']. "\n"; $message .= "\nComo você ficou sabendo da nossa empresa?\n" ; foreach($_POST['question_2'] as $value) { $message .= "- " . trim(stripslashes($value)) . "\n"; }; $message .= "\nVocê pensa em sugerir nossa empresa para um amigo ou conhecido? " . $_POST['question_3']; if( isset( $_POST['additional_message'] ) && $_POST['additional_message']) { $message .= "\nMensagem Adicional: " . $_POST['additional_message']; } //Receive Variable $sentOk = mail($to,$subject,$message,$headers); //Confirmation page $user = "$mail"; $usersubject = "Obrigado"; $userheaders = "De: feedback@roboeverest.app\n"; /*$usermessage = "Thank you for your time. Your quotation request is successfully submitted.\n"; WITH OUT SUMMARY*/ //Confirmation page WITH SUMMARY $usermessage = "Obrigado pelo seu tempo. Sua solicitação foi enviada com sucesso. Nós responderemos em breve.\n\nABAIXO UM RESUMO\n\n$message"; mail($user,$usersubject,$usermessage,$userheaders); ?>  
      Sou muito leigo, gostaria de fazer envia via SMTP. É difícil de mais?
      Grato se alguém puder me ajudar ou me dar uma luz.
      Abraço.
    • Por gustavopinent
      Olá! Esse erro ocorre em um php simples rodando em um servidor compartilhado Locaweb: SSL certificate problem: unable to get local issuer certificate. O php faz uma requisição ao site do Cep Aberto para consulta de endereço informando o CEP (https://www.cepaberto.com/api/v3/cep?cep=95020520)
       
      Olhei o php.ini e não tem nenhuma menção ao arquivo de certificados. Então peguei alguns tutoriais, baixei o arquivo "cacert.pem", coloquei lá e defini o curl no próprio php, ficou assim:
      $ch = curl_init($url); curl_setopt($ch, CURLOPT_HTTPHEADER, ['Authorization: Token token="' . $token . '"']); curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); curl_setopt($ch, CURLOPT_CAINFO, $cacert); curl_setopt($ch, CURLOPT_CAPATH, $cacert); $res = curl_exec($ch); if($res===FALSE) { $Res["erro"] = "curl"; $Res["msg"] = "Execução CURL falhou!"; $Res["descr"] = curl_error($ch); } else { $Res["dados"] = json_decode($res); $Res["http"] = curl_getinfo($ch, CURLINFO_HTTP_CODE); $Res["erro"] = ($Res["http"]==200)? "OK" : "http" ; $Res["msg"] = ($Res["http"]==200)? "" : "Erro HTTP ".$Res["http"] ; } Onde $cacert é o endereço do arquivo "cacert.pem", verificado antes por is_file. Mas o erro é o mesmo, como se eu nada tivesse feito. Tem que configura o Apache? Não sei como configurar o Apache, será que posso? Desabilitar o SSL do php é uma opção que não tentei ainda, dizem que não é aconselhável...
       
      O PHP é o 5.6 (pretendo ir pro 7.4 em breve) e o servidor é CENTOS 5.11 compartilhado, hospedagem Locaweb.
       
      Alguma ideia? 
    • Por asacap1000
      Salve galera estou com uma consulta, e preciso buscar a diferença entre datas, e em alguns casos são vários dias.
      Preciso que nesta consulta ele me retorne em dias, horas limitando a 23h minutos e segundos..
      A consulta que fiz foi essa:
       
      abs(trunc((AK1.DATA_FINAL - AK1.DATA_INICIAL))) AS dias, abs(trunc(24 * (AK1.DATA_FINAL - AK1.DATA_INICIAL))) AS horas, abs(trunc((MOD(MOD(AK1.DATA_FINAL - AK1.DATA_INICIAL, 1) * 24, 1) * 60))) AS minutos, abs(trunc((MOD((MOD(MOD(AK1.DATA_FINAL - AK1.DATA_INICIAL, 1) * 24, 1) * 60), 1) * 60))) AS segundos, ou essa aqui
       
      LPAD(TRUNC(( (AK1.DATA_FINAL - AK1.DATA_INICIAL) * 86400 / 3600)), 3, '0') ||':' || LPAD(TRUNC(MOD( (AK1.DATA_FINAL - AK1.DATA_INICIAL) * 86400 , 3600 ) / 60 ), 2, '0') || ':'|| LPAD(TRUNC(MOD(MOD( (AK1.DATA_FINAL - AK1.DATA_INICIAL) * 86400, 3600 ), 60)), 2, '0') calculado,  e nessa duas consultas ele me traz o total de horas o que complica.
      DIAS  HORAS  MINUTOS  SEGUNDOS  CALCULADO 0 6 1 10 006:01:11 0 0 31 28 000:31:28 0 1 5 8 001:05:09 0 0 41 2 000:41:02 0 4 59 53 004:59:53 0 0 41 6 000:41:06 0 4 59 20 004:59:20 0 0 56 1 000:56:01 0 0 26 31 000:26:31 0 6 10 3 006:10:03 0 0 40 1 000:40:01 0 4 59 53 004:59:53 0 6 3 27 006:03:27 0 6 3 7 006:03:07 0 1 5 57 001:05:58 10 250 28 21 250:28:21 10 250 18 37 250:18:37 0 4 58 42 004:58:43  
       
      Alguem poderia me dar uma força
       
    • Por Cícero Antônio
      Olá pessoal,
       
      Desculpa se esse não for o forum correto pra esse tópico. 
       
      Preciso configurar meu site de HTTP para o HTTPS e atualmente utilizo o seguinte .htaccess:
       
      RewriteEngine On RewriteCond %{SCRIPT_FILENAME} !-f RewriteCond %{SCRIPT_FILENAME} !-d RewriteRule ^(.*)$ index.php?url=$1  
      Minha dúvida é que preciso configurar essas diretrizes, mantendo na url amigável o apontamento  para a variável URL com o certificado SSL.
       
      Na internet encontrei tutorias que configuraram no modo geral, e não apontando para uma variável que será tratada com o GET.
       
      Alguém poderia me orientar?
       
       
       
       
    • Por gcors88
      Prezados, desenvolvi um gatilho onde este tem comunicação com outra tabela, uma é a coleta_sinal_vital, e onde o gatilho foi criado é na table  itcoleta_sinal_vital ( esta possui uma fk da primeira), a questão é que dentro do gatilho realizo um select na primeira tabela para consultar o valor inserido em uma coluna da primeira tabela, faço essa consulta baseada nessa fk que esta sendo inserida ou seja where = :new.cd_coleta_sinal_vital, a questão é que no momento em que esse select é executado ele não retorna dado nenhum, acredito que isto ocorre porque a inserção em ambas as tabelas é feito de forma simultânea, pois se comparado posteriormente o valor da coluna sempre é inserido, gostaria de saber se existe alguma forma de aplicar uma espera ou atraso neste gatilho para que ele possa capturar este valor sem problemas, grato!
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.