[RESOLVIDO] - Envio de e-mail

Olá pessoal,

Estou tentando enviar um e-mail a partir de um formulário, da seguinte forma:

sc_mail_send({Email_SMTP}, {Email_Usuario}, {Usuario_Senha}, {Usuario_Email}, {Email_Destino}, {Email_Assunto}, {Email_Mensagem}, "H", "", "", {Email_Porta}, {Email_Conexao}, "");

if ({sc_mail_ok})
{
echo “Enviados {sc_mail_count} e-mail com sucesso !!”;
}
else
{
sc_error_message({sc_mail_erro});
};

Só que está me retornando o seguinte erro:

Fatal error: Uncaught exception 'Swift_TransportException' with message 'Failed to authenticate on SMTP server with username "ilano@mdierp.com.br" using 2 possible authenticators' in /home/mdierpco/public_html/scriptcase/prod/third/swift/classes/Swift/Transport/Esmtp/AuthHandler.php:181 Stack trace: #0 /home/mdierpco/public_html/scriptcase/prod/third/swift/classes/Swift/Transport/EsmtpTransport.php(333): Swift_Transport_Esmtp_AuthHandler->afterEhlo(Object(Swift_SmtpTransport)) #1 /home/mdierpco/public_html/scriptcase/prod/third/swift/classes/Swift/Transport/AbstractSmtpTransport.php(118): Swift_Transport_EsmtpTransport->_doHeloCommand() #2 /home/mdierpco/public_html/scriptcase/prod/third/swift/classes/Swift/Mailer.php(79): Swift_Transport_AbstractSmtpTransport->start() #3 /home/mdierpco/public_html/scriptcase/app/contato/CadEmails/CadEmails_apl.php(1422): Swift_Mailer->send(Object(Swift_Message), Array) #4 /home/mdierpco/public_html/scriptcase/app/contato/CadEmails/CadEmails_apl.php(1006): CadEmails_apl->sc_btn_BtnTestaEm in /home/mdierpco/public_html/scriptcase/prod/third/swift/classes/Swift/Transport/Esmtp/AuthHandler.php on line 181

Como posso corrigir isso?

Grato,

Ilano.

“using 2 possible authenticators” geralmente é questão de segurança.
Altera a senha do email utilizado no “Email_SMTP” e tenta enviar novamente.

Deu certo galera!!!

No evento AfterInsert ficou assim:

$para ={Contato_Email};

$sql = "SELECT Email_ID, Usuario_Email, Email_SMTP, ";
$sql .= "Email_Usuario, Usuario_Senha, Email_Contato, ";
$sql .= "Email_Assunto, Email_Mensagem ";
$sql .= "FROM tb_email ";
$sql .= "WHERE Email_Contato = 1 ";

sc_lookup(Ds, $sql);

if (!empty({Ds}))
{
$de = {Ds[0][1]};
$smtp = {Ds[0][2]};
$user = {Ds[0][3]};
$senha = sc_decode({Ds[0][4]});
$de = {Ds[0][1]};
$assunto = “Confirmação de Cadastro - EuRegistro”;
$mensagem = {Ds[0][7]};

try
	{
	sc_mail_send($smtp, $user, $senha, $de, $para, $assunto, $mensagem, 'H', '', 'CCC', '25', '', '');
	
	} catch (Exception $e) {
    	echo $e->getMessage();
	};

};

Galera,

Eu fiz os testes no meu servidor e funcionou perfeitamente, por isso confirmei o sucesso da postagem, contudo, ao levar para o cliente olha só o que aconteceu:

Ocorreu um erro ao enviar e-mail ao cliente: Expected response code 250 but got code “530”, with message "530 5.7.0 Must issue a STARTTLS command first. n32sm4196880qkh.20 - gsmtp "

Isso pode ser alguma questão de segurança no servidor Windows do cliente? Como resolvo isso?

Grato,

Ilano.

No php 5.6 ele passou a verificar conexões com ssl e tls.
Vide:
https://kamihouse.wordpress.com/2015/01/05/verificacao-de-certificado-ssl-com-php-5-6/
http://php.net/manual/pt_BR/migration56.openssl.php
http://php.net/manual/pt_BR/migration56.new-features.php

SSL/TLS improvements ¶

A wide range of improvements have been made to the SSL/TLS support in PHP 5.6. These include enabling peer verification by default, supporting certificate fingerprint matching, mitigating against TLS renegotiation attacks, and many new SSL context options to allow more fine grained control over protocol and verification settings when using encrypted streams.

These changes are described in more detail in the OpenSSL changes in PHP 5.6.x section of this migration guide.

Olha a documentação da macro.
Tem um novo parâmetro ( SSL ) para solucionar este erro.

Olá pessoal,

Primeiro, quero agradecer a atenção e paciência de todos.

Pois é gente, eu vi agora no link Macros Scriptcase a macro SSL que diz:

[size=12pt]Parâmetro para adição das configurações de [b]SSL[/b]. Caso seja necessário adicionar mais de uma configuração, use [b]";"[/b] para separá-las. Ex: $ssl = 'allow_self_signed=false;verify_peer=false';[/size]

Existem outros exemplos para serem passados nesse parâmetro (SSL) da macro sc_mail_send?

E o que significam esses parâmetros allow_self_signed, verify_peer, e outros mais, pois preciso informar ao cliente o significado e a importância de cada um deles.

Aqui tem a explicação:
http://php.net/manual/pt_BR/migration56.openssl.php
http://php.net/manual/pt_BR/migration56.new-features.php

Pessoal,

Tô fazendo o envio na forma abaixo. O problema que mesmo em modo de debug ainda assim não dá mensagem alguma de erro mas também não envia o e-mail.

$mensagem = "Olá ".{CLI_RazaoSocial}.",
"; $mensagem .= "mensagem_de_texto_com_caracteres_em_html";

$smtp = “endereco_do_smtp”;
$usuario = “nome_do_usuario”;
$senha = “senha_do_usuario”;
$de = “email_do_destinatario”;
$para = strMinuscula({CLI_Email}); /* Essa biblioteca strMinuscula já foi testada e funciona perfeitamente*/
$assunto = “Confirmação de Cadastro”;
$porta = “25”;
$tipoconexao = “N”;
$ssl = ‘allow_self_signed=false;verify_peer=false’; /* Esta variável não está sendo usada, e mesmo usada também não fez diferença */

try
  {
  sc_mail_send($smtp, $usuario, $senha, $de, $para, $assunto, $mensagem, 'H', '', 'CCC', $porta, $tipoconexao, '');
  
  } catch (Exception $e) {
       echo $e->getMessage();
   };</blockquote>

Utiliza o código abaixo para verificar se houve erro:
if ({sc_mail_ok}){
echo “Enviados {sc_mail_count} e-mail com sucesso !!”;
}else{
sc_error_message({sc_mail_erro});
}

Olá Ronyan Alves,

Primeiro, quero agradecer sua atenção.

Cara, a mensagem de erro retornada é:

[size=12pt]Array to string conversion Array[/size]
[size=12pt]Address in mailbox given [] does not comply with RFC 2822, 3.6.2.

Undefined variable: porta[/size]

Última mensagem de erro:

[size=12pt]allow_self_signed=false;verify_peer=false Failed to authenticate on SMTP server with username "admin@mdierp.com.br" using 2 possible authenticators[/size]

Olá pessoal,

O problema com o envio de e-mail continua:
Connection could not be established with host smtp.gmail.com [Connection timed out #110]

Criei a biblioteca:

<?php function EnviarEmail($smtp, $usuario, $senha, $de, $para, $assunto, $mensagem, $porta, $tipoconexao, $ssl) { try { /* sc_mail_send(SMTP, Usr, Pw, De, Para, Assunto, Mensagem, Tipo_Mens, Cópias, Tp_Cópias, Porta, Tp_Conexao, Anexo) */ sc_mail_send($smtp, $usuario, $senha, $de, $para, $assunto, $mensagem, 'H', '', 'CCC', $porta, $tipoconexao, '', $ssl); if ({sc_mail_ok}){ echo "
{sc_mail_count} e-mail foi enviado comsucesso!!
"; }else{ sc_error_message({sc_mail_erro}); }
  } catch (Exception $e) {
       echo $e->getMessage();
   };	

};
?>

E no evento OnValidate, foi inserido o código abaixo:

$smtp = {SMTP}; $usuario = {Usuario}; $senha = {Senha}; $de = {Email}; $para = "ilanocaldas@gmail.com"; $assunto = {Assunto}; $mensagem = {Mensagem}; $porta = {Porta}; $tipoconexao = {Conexao}; $autoassnado = {ausoassinado}; $pares = {verificapares}; $senha2 = sc_encode({Senha}); $id = [mailID];

$sql = "UPDATE tb_email SET
Usuario_Email = ‘$de’,
Email_SMTP = ‘$smtp’,
Email_Usuario = ‘$usuario’,
Usuario_Senha = ‘$senha2’,
Email_Porta = ‘$porta’,
Email_Conexao = ‘$tipoconexao’,
Email_Autoassinado = ‘$autoassnado’,
Email_Verificapares = ‘$pares’
WHERE Email_ID = $id
";

sc_exec_sql ($sql);

preencheCampos();

$ssl = “allow_self_signed=$autoassnado;verify_peer=$pares”;

EnviarEmail($smtp, $usuario, $senha, $de, $para, $assunto, $mensagem, $porta, $tipoconexao, $ssl);

Existe algo de errado? Em um outro cliente, utilizo a mesma biblioteca e não tive problemas. O que pode estar acontecendo com esse caso? No Outlook o cliente tem essa conta configurada e funciona tranquilamente. Estou precisando de ajuda urgente, pois já estou com esse problema com esse cliente há muito tempo e já está ficando uma situação chata.

Não existe um firewall bloqueando esta conexão?

Para envios pelo GMAIL, utilizo os seguintes:

$smtp =“smtp.gmail.com”;
$usr = "email@gmail.com";
$psw = “senha”;
$de = "email@gmail.com";
$assunto = “Seu assunto”;
$tmsg = “H”;
$tcopia = “BCC”;
$porta = “465”;
$tconexao = “S”;
$ecopia = "copia@gmail.com";

Olá João Carlos TR,

E onde e como fica a questão da criptografia, o tal parâmetro ssl ($ssl = ‘allow_self_signed=false;verify_peer=false’;)?

Eu não tenho certeza, mas o envio pelo Gmail já é criptografado, ou seja com o SSL.

Segundo a documentação é o último parâmetro:
sc_mail_send(SMTP, Usr, Pw, De, Para, Assunto, Mensagem, Tipo_Mens, Cópias, Tp_Cópias, Porta, Tp_Conexao, Anexo, SSL)

Esta macro tem por finalidade o envio de e-mail.
Parâmetro
Descrição
SMTP Endereço do servidor SMTP (string ou variável contendo o Endereço do servidor SMTP).
Usr Usuário do servidor SMTP (string ou variável contendo o Usuário do servidor SMTP).
Pw Senha do servidor SMTP (string ou variável contendo a Senha do servidor SMTP).
De E-mail de origem (string ou variável contendo o E-mail de origem).
Para Lista de e-mails que devem receber cópia da mensagem , podendo ser uma string ou variável contendo um ou mais e-mail’s, separados por “;”, ou uma variável contendo um array de e-mail’s.
Assunto Título da mensagem (string ou variável contendo o título da mensagem).
Mensagem Mensagem a ser enviada (string ou variável contendo a mensagem).
Tipo_Mens Tipo do texto da mensagem a ser enviada, sendo: “T” para somente texto ou “H” para texto e/ou html.
Cópias Lista de e-mails que devem receber cópia da mensagem, podendo ser uma string ou variável contendo um ou mais e-mail’s, separados por “;”, ou uma variável contendo um array de e-mail’s.
Tp_Cópias Tipo de cópias a serem enviadas: CCC para cópias visíveis e BCC para cópias ocultas. Se omitido, o Scriptcase assumirá o valor default: BCC.
Porta Porta utilizada pelo servidor de e-mail. Utilize a porta 465 para segurança com SSL, a porta 587 para segurança com TLS ou a porta 25 como porta sem segurança. Se omitido, o Scriptcase assumirá o valor default: 25
Tp_conexao Indicativo para conexão segura. Utilize S para SSL, T para TLS ou N para não segura. Se omitido, o Scriptcase assumirá o valor default:N.
Anexo Caminho absoluto do arquivo a ser enviado por anexo.
SSL Parâmetro para adição das configurações de SSL. Caso seja necessário adicionar mais de uma configuração, use “;” para separá-las. Ex: $ssl = ‘allow_self_signed=false;verify_peer=false’;

SSL Parâmetro para adição das configurações de SSL. Caso seja necessário adicionar mais de uma configuração, use ";" para separá-las. Ex: $ssl = 'allow_self_signed=false;verify_peer=false';

Pois é, mas e esse parâmetro SSL só tem mesmo esse exemplo? Quais outras informações podem ser passadas nesse parâmetro?