[RESOLVIDO] - Enviar Email usando conta Gmail cobrança de pacote SMS

Tenho um sistema de cobrança em SC 8que envia SMS para posicionar sobre a situação da divida e com isso eu também faço a venda de pacotes de SMS para o meu cliente.
Mudei a forma de negociar esses pacotes e coloquei agora na web a compra desses pacotes pro meu cliente que recebe um email da ferramenta assim que confirma a compra com os dados da mesma.
Porém eu não consigo fazer funcionar na web esse envio de emails. Aqui no ambiente de produção e na ferramenta local funciona muito bem e quando Publico somente dá erros.

Eu estou lutando com isso a 3 semanas e não consigo resolver… ja tirei as variaveis que o sc_lookup() busca substituindo por valores diretos, usei a porta 465 a 587 ja usei smtp.gmail.com e ja substitui pelo IP dando ping nessa porta… Enfim EU NÃO SEI MAIS O QUE FAZER !!!

obs.: estou postando o exemplo abaixo que é o mesmo caso porem é do cadastro de usuário que tem o código mais simples e esta no projeto de implantação de segurança padrão do ScriptCase esta na função PHP send_mail_message() posicionada no onAfterInsert do formulário app_seg_form_edit_user. Após o cadastro envia pro usuário uma mensagem com o link do sistema juntamnte com o seu login e senha.

No momento desse erro estou usando o seguinte:
$var_smtp = ‘smtp.gmail.com’;
$var_usuario = ‘usuario@gmail.com’;
$var_usuario_senha = ‘senha_do_usuario’;
$var_tpmensagem = ‘H’;
$var_porta = ‘465’;
$var_TP_Copias = ‘BCC’;
$var_tp_conexao = ‘S’;
$var_ssl = ‘allow_self_signed=false;verify_peer=false’;

erro:
Fatal error: Uncaught exception ‘Swift_TransportException’ with message ‘Connection could not be established with host smtp.gmail.com [ #0]’ in /home/sys1a1/www/pazbarueri/producao/prod/third/swift/classes/Swift/Transport/StreamBuffer.php:269 Stack trace: #0 /home/sys1a1/www/pazbarueri/producao/prod/third/swift/classes/Swift/Transport/StreamBuffer.php(62): Swift_Transport_StreamBuffer->_establishSocketConnection() #1 /home/sys1a1/www/pazbarueri/producao/prod/third/swift/classes/Swift/Transport/AbstractSmtpTransport.php(113): Swift_Transport_StreamBuffer->initialize(Array) #2 /home/sys1a1/www/pazbarueri/producao/prod/third/swift/classes/Swift/Mailer.php(79): Swift_Transport_AbstractSmtpTransport->start() #3 /home/sys1a1/www/pazbarueri/app_seg_form_edit_users/app_seg_form_edit_users_apl.php(4320): Swift_Mailer->send(Object(Swift_Message), Array) #4 /home/sys1a1/www/pazbarueri/app_seg_form_edit_users/app_seg_form_edit_users_apl.php(3718): app_seg_form_edit_users_apl->send_mail_message() #5 /home/sys1a1/www/pazbarueri/app_seg in /home/sys1a1/www/pazbarueri/producao/prod/third/swift/classes/Swift/Transport/StreamBuffer.php on line 269

meu código função PHP send_mail_message():
// busca os dados de configuração em tbl_configura
sc_lookup(dadosconfig,‘SELECT csi_linksys,csi_email_smtp,csi_email_usuario,csi_email_pswd,
csi_email_tpmsg,csi_email_porta,csi_email_tpcopy,csi_email_tpconexao,csi_email_ssl FROM tbl_configura’);
$var_link = {dadosconfig[0][0]};
$var_smtp = {dadosconfig[0][1]};
$var_usuario = {dadosconfig[0][2]};
$var_usuario_senha = {dadosconfig[0][3]};
$var_tpmensagem = {dadosconfig[0][4]};
$var_porta = {dadosconfig[0][5]};
$var_TP_Copias = {dadosconfig[0][6]};
$var_tp_conexao = {dadosconfig[0][7]};
$var_ssl = {dadosconfig[0][8]};

// traz dados do formulario
$var_senha_temp = [senha_usuario];
$var_login = {login};

// Configuração do texto da mensagem
$mail_msg     = 'Olá ' .{name}.'.    Seja bem vindo(a) ao Sistema. <br>'; 
$mail_msg    .= '<br>'; 																							
$mail_msg    .= 'Seu Login: ' .$var_login.'<br>';
$mail_msg    .= 'Sua Senha: ' .$var_senha_temp.'<br>';
$mail_msg    .= '<br>';
$mail_msg    .= 'Para acessar o Sistema abra esse link: ' .$var_link.'  e depois de acessar preencha com o seu logim e sua senha. <br>';
$mail_msg    .= '<br>';
$mail_msg    .= 'Como essa é uma senha provisória ao acessar o sistema pela primeira vez, você sera direcionado(a) a cadastrar sua Nova Senha Definitiva. <br>';
$mail_msg    .= '<br>';
$mail_msg    .= 'Caso queira que esta senha seja a permanente basta confirmá-la novamente. <br>';
$mail_msg    .= '<br>';
$mail_msg    .= '<br>';
$mail_msg    .= 'Não Responda esse E-mail. <br>';
$mail_msg    .= 'Todos Direitos reservados a: CSi Sistemas de Informática e Web Ltda® <br>';

// parametros
$SMTP					= $var_smtp;
$Usr			         		= $var_usuario;
$Pswd					= $var_usuario_senha;
$De						= $var_usuario;
$Para					= 'suporte@csisistemas.com.br';
$Para					= {email};
$Assunto				        = 'Senha para Novo Usuario';
$Mensagem				= $mail_msg;
$Tipo_Mens				= $var_tpmensagem;
$CCopias				        = '';
$TP_Copias				= $var_TP_Copias;
$Porta					= $var_porta;
$Tp_Conexao				= $var_tp_conexao;
$Anexo					= '';
$SSL					= $var_ssl;

sc_mail_send($SMTP, $Usr, $Pswd, $De, $Para, $Assunto, $Mensagem, $Tipo_Mens, $CCopias, $TP_Copias, $Porta, $Tp_Conexao, $Anexo, $SSL);

// mensagem de confirmação
if ({sc_mail_ok})
{
	//echo "Enviados {sc_mail_count} e-mail com sucesso !!";
	$msg = "Foram Enviado(s) {sc_mail_count} e-mail com sucesso !!";
	sc_alert($msg);
}
else
{
	sc_error_message({sc_mail_erro});
}

meu ambiente de produção:

meu ambiente no servidor de hospedagem KingHost: obs.: mudei o PHP no servidor para 5.6 e minhas funções Ajax pararam de funcionar e então voltei para o 5.5.

minhas permissões na conta Gmail:

Bem eu tentei aqui tudo o que pude imaginar e estou travado nisso. Se alguem puder me ajudar desde de já sou muito grato.

Dá uma olhada aqui no forum que tem alguns itens sobre isso

Pela mensagem: Swift_TransportException’ with message 'Connection could not be established with host smtp.gmail.com [ #0]
A sua aplicação não está nem conseguindo conectar ao gmail.
Ela não consegue estabelecer contato com o smtp.gmail.com
Não vi sua programação.

  1. Mas se ela estiver certa! Pode ser que você tenha atingido um dos limites do gmail para o domínio/ip onde está sendo feito sua publicação.
    Neste caso ele bloqueia o seu acesso por 24 horas.
    Por este motivo funciona corretamente em desenvolvimento e em produção não.
    Você está usando um conta gratuita do gmail para isto?
    Veja exemplos de alguns limites do gmail -> https://support.google.com/a/answer/166852
    Veja que para contas gratuitas o limite de envio é 500 por dia.
    Já para contas pagas o limite é 2000 por dia.
    Da mesma forma o limite de recipientes (CC, BC) é de 500 por dia na gratuita e 2000 na paga.
    Eu não usaria uma conta tão limitada assim para envio em um programa comercial.
  2. Fora a questão dos limites. Os servidores gratuitos dão muito pau com o envio de e-mail pelo php.
    Use um conta num servidor pago e vera que terá menos problemas.
    Isto já foi discutido aqui.
    Leia deste ponto em diante: http://www.scriptcase.com.br/forum/index.php/topic,5861.msg27172.html#msg27172
    A resposta do Wender Bueno ao que eu disse no link indicado foi:
    “Obrigado a todos … Resolvido nao usando contas gratuitas como o Alexandre disse .”
  3. Pode ser que o dns do servidor onde está o app esteja com problemas para resolver o nome smtp.gmail.com
    Espero ter ajudado.

ola Thyago
muito obrigado por responder… vi aqui no grupo varias postagens sua e apliquei cada uma delas e não consegui enviar quando o projeto esta publicado.

Realmente servidor pago para enviar e-mail a diferença é de 1000 a zero, eu usava gmail grátis nos clientes que emitem NFe no inicio era só dor de cabeça e reclamação todo dia, agora é só paz.

Ola Alexandre… mui obrigado por responder… voce conseguiu elucidar pra mim o que eu não conseguia ver.

Bem eu fiz a unica coisa que não tinha feito, segui a sua dica do Alexandre e mudei para usar um email através de uma conta paga… funcionou perfeitamente…
agora fica aqui a dica pra quem quiser correr essa maratona.

Infelizmente com o Gmail não funciona perfeitamente os envios.

Muito obrigado…

obs.: preciso encerrar esse topico como Resolvido… mais eu não sei como fazer…

Djalma,

Altere o título do teu primeiro post e coloque ** RESOLVIDO **

Alguem teria algo ou tutorial para criar um codigo de envio de emails em massa somente com a tabela IdEmail Nome Email ?

Olha! É fácil achar tutoriais sobre enviar e-mail em massa no google.
Veja este: http://wiki.locaweb.com/pt-br/Como_enviar_e-mails_em_grande_quantidade_com_script_PHP

Eu mesmo uso uma solução pronta para isto: O PHPLIST (gratuito) de forma que eu não tenha que descobrir a roda novamente.
Você até pode estudar os fontes do PHPLIST -> https://www.phplist.org
Se considera e-mail em massa 100 e-mails tudo ok.

Mas se for enviar mais de 1000 está preparado para lidar com isto?
Eu irei falar do outro lado de enviar e-mails em massa.
Eu tenho uma lista com mais ou menos 1.000.000 (1 milhão) de e-mails, deve dar um pouco mais que isto.
Estude sobre spamtrap, honeypots, black list, ip reputation, ip rotation, ip reverso e etc.
Estude sobre limite de envio por hora e a capacidade do seu servidor em aguentar o envio.

Por exemplo:
O terra tem limite de recebimento por ip e por hora. Isto muda de forma constante.
Vamos supor para um dos seus ip’s a 13:00 hora ele aceitará somente 500 envios, as 14:00 horas 700 envios e as 15:00 horas 300 envios.
Passou do limite ele bloqueia teu ip. Este bloqueio pode demorar de 1 hora a 24 horas.
Isto irá gerar uma fila no seu servidor que irá provocar sobrecarga e fazer todos os e-mails para o provedor terra e demais chegarem atrasados.
O detalhe é que todos os servidores como gmail, yahoo, hotmail, uol e etc tem este limite.
A solução é colocar um delay entre cada e-mail.

Vide na indicação que fiz: http://wiki.locaweb.com/pt-br/Como_enviar_e-mails_em_grande_quantidade_com_script_PHP
"$quant = 10; //número de mensagens enviadas de cada vez
$sec = 10; //tempo entre o envio de um pacote e outro (em segundos) "

Mas o delay irá fazer sua lista ser entregue num tempo maior.
Exemplo: 56.000 e-mails podem demorar de 24 horas até 72 horas para serem entregues.
De forma a deixar a reputação do seu ip boa.
Se tentar enviar 56000 de uma vez seu ip ficará podre. Seu servidor irá travar e etc.

Alguns provedores até fornecem ferramentas para acompanhar o que acontece com seu ip -> EX: https://postmaster.live.com/snds/

Fora isto terá sempre que sanitizar sua lista.
Porque sanitizar?
Sua lista na primeira hora de envio para o hotmail tem 30 e-mails inválidos.
O hotmail irá considerar seu servidor um spammer e irá bloquear seu envio.
Ou mesmo se você enviar e-mail para um spamtrap ou honeypot também passa a ser bloqueado.
Ou seja, mesmo que sua lista comece com todos os e-mails válidos, pessoas ao longo do tempo deletam suas caixas postais.
Então além de desenvolver o envio terá que desenvolver o tratamento do retorno destes e-mails inválidos, sob penalidade de bloqueio.

E tem muito mais coisas por ai. Não vou ficar falando tudo ou escrevo um livro.

Espero ter ajudado um pouco

PS: Para mais de 20.000 e-mails considere rotacionar entre 5 ip’s.

Se for muito e-mail acho mais legal pegar uma solução pronta para isso, ele faz tudo até gráficos quem abriu os e-mails,
quem recusou, se teve cancelamento, e detalha tudo.

Relaciona mapa do google com e-mail por localização geográfica, ‘para ver as tendências $$’ por região.

E é barato:
https://www.e-goi.com.br/pt_br/email-marketing-crie-e-envie-suas-newsletters/

É legal para você gerenciar e fazer um acompanhamento mensal para seu cliente.

Eu tenho uma cliente e faço isso, todo inicio de mês envio os relatórios/gráficos do movimento do mês, e ganho $$ pra isso, ehehe

Sem falar que algumas coisas passam a ser problema deles. Como ip’s em black list.
Você nem esquenta.

Sim isso mesmo.

Utilizo assim e funciona:

$smtp = "smtp.gmail.com";
$user = "envioauto.esteticface@gmail.com";
$pass = "senhaaqui";
$message = "Mensagem de teste";
$port = 465;

sc_mail_send($smtp, $user, $pass, $user, "contato@camilamoreira.com.br", "Título do E-mail", $message, "HTML", "", "", $port, "S", "");
1 Curtida