Olá pessoal,
Essa semana tive que criar um script para envio de emails através do Gmail porém o servidor que estou hospedado permite apenas o envio autenticado e o Gmail aceita apenas envio autenticado.
Logo a função mail() do php não pode me ajudar em nada, pois ela não faz o envio autenticado
Nesse momento o pear salvou minha pele. Utilizando a biblioteca Pear::Mail consegui realizar esse envio.
http://pear.php.net/package/Mail
O Pear::Mail nos servidores PHP da HostNet já está instalado por padrão, que show =)
Para realizar o envio tanto autenticado bastou utilizar o script abaixo:
<?php // Incluindo arquivo com a classe Mail require_once('Mail.php'); // Destinatário da mensagem $to = "suporte@hostnet.com.br"; // Assunto da mensagem $subject = "Testando envio autenticado pelo Google Apps"; /* Corpo da mensagem Em caso de formulário alterar para a variável $_POST['CAMPO'] */ $body = "Teste efetuado com sucesso!"; // Servidor do Gmail $host = "ssl://smtp.gmail.com"; // Email do Gmail que fará o envio autenticado $username = "noel@noelrocha.com"; // Sua senha do GMAIL $password = 'SECRETA'; $headers = array ('From' => $from, 'To' => $to, 'Subject' => $subject); $smtp = Mail::factory('smtp', array ('host' => $host, 'port' => 465, // SMTPS(para mais detalhes ver /etc/services 'auth' => true, 'debug' => true, // Debug ligado 'username' => $username, 'password' => $password) ); // Efetuando o envio autenticado $mail = $smtp->send($to, $headers, $body); // Verificando se houve erro if (PEAR::isError($mail)) { echo("Error" . $mail->getMessage()); } else { echo("Email enviado com sucesso!!"); } ?>
Caso ocorra o erro abaixo(Debug tem que estar ligado para ver):
DEBUG: Recv: 535-5.7.1 Username and Password not accepted. Learn more at DEBUG: Recv: 535 5.7.1 http://mail.google.com/support/bin/answer.py?answer=14257 DEBUG: Send: RSET DEBUG: Recv: 250 2.1.0 Flushed authentication failure [SMTP: Invalid response code received from server (code: 535, response: 5.7.1 Username and Password not accepted. Learn more at 5.7.1 http://mail.google.com/support/bin/answer.py?answer=14257)] DEBUG: Send: QUIT DEBUG: Recv: 221 2.0.0 mx.google.com closing connection
ou abaixo:
p> authentication failure [SMTP: Invalid response code received from server (code: 535, response: 5.7.1 Username and Password not accepted. Learn more at 5.7.1 http://mail.google.com/support/bin/answer.py?answer=14257 )]
Será necessário acessar o endereço https://www.google.com/accounts/DisplayUnlockCaptcha para contas que sejam do Gmail e https://www.google.com/a/[SEU_DOMINIO_DO_GOOGLE_APPS]/UnlockCaptcha e depois desbloquear o envio de emails sem a utilização de Captcha. Nesse endereço será necessário digitar a sua conta(sem o @ e o domínio) e a senha da mesma.
Caso ocorra o erro abaixo, é porque o servidor que o script está possui proteção na porta 465:
Failed to connect to ssl://smtp.gmail.com:465 [SMTP: Failed to connect socket: Connection refused (code: -1, response: )]
Obs.: Esse procedimento deverá ser realizado para cada novo servidor que o script esteja rodando.
Show de bola.
Ajuda bastante para quem deseja enviar e-mails pelo Google/Gmail nos servidores da Hostnet.
O blog é muito maneiro.
Gostei das suas indicações de livro, acrescentaria apenas: Expressões Regulares — Uma Abordagem Divertida. ( do aurelio.net )
August 21, 2008
Olá,
Estou tentando utiilizar sua solução, porém me da o seguinte erro na hospedagem da hostnet:
Fatal error: Class ‘Mail’ not found in /home/sigafest/www/envia.php on line 27
O que fazer?
Prezado Noel,
Estou utilizando o forum phpbb disponibilizado pela Hostnet em meu site, porém utilizo o MX do Google, saberia quais as alteraçoes que devo efetuar para que funcione o envio de email do forum?
@Patrick:
Se você estiver hospedado na HostNet podem ser 2 coisas:
1. A lib Pear::Mail não está instalada. Acredito que isso seja impossível porque todos os servidores PHP da HostNet tem essa lib instalada.
2. A diretiva include_path(dá para vê-lá com a função get_include_path(http://www.php.net/manual/pt_BR/function.get-include-path.php)) está errada. No seu caso ela deveria ser assim:
.:/usr/share/pear/:/usr/lib/php/
Para configurar ela certinha utilize a função set_include_path()(http://www.php.net/manual/pt_BR/function.set-include-path.php)
@Yuri, Primeiro você tem que desabilitar a captcha pelo procedimento que coloquei acima e depois seguir esse tutorial aqui http://painel.hostnet.com.br/tutoriais/phpbb.html(tem que estar logado no painel para vê-lo).
Esse tutorial é um pouco antigo mas na nova versão do phpbb deve pedir a porta. Se pedir basta digitar 465 e deve marcar a opção SSL ou TLS se também existir esa opção.
November 12, 2008
Noel, verifiquei o retorno que me deu e agradeço muito.
Estou hospedado na hostnet sim, plano PHP+Perl, e utilizei o set include path como me mostrou, mas continua apontando o mesmo erro..
Tem alguma solução?
November 12, 2008
Consegui, agora é o debug:
DEBUG: Recv: 220 mx.google.com ESMTP s8sm833821uge.18 DEBUG: Send: EHLO localhost DEBUG: Recv: 250-mx.google.com at your service, [200.185.126.97] DEBUG: Recv: 250-SIZE 35651584 DEBUG: Recv: 250-8BITMIME DEBUG: Recv: 250-AUTH LOGIN PLAIN DEBUG: Recv: 250 ENHANCEDSTATUSCODES DEBUG: Send: AUTH LOGIN DEBUG: Recv: 334 VXNlcm5hbWU6 DEBUG: Send: c2lnYWZlc3RAc2lnYWZlc3QuY29t DEBUG: Recv: 334 UGFzc3dvcmQ6 DEBUG: Send: c2lnYTI1MTI= DEBUG: Recv: 235 2.7.0 Accepted DEBUG: Send: MAIL FROM: DEBUG: Recv: 555 5.5.2 Syntax error. s8sm833821uge.18 DEBUG: Send: RSET DEBUG: Recv: 250 2.1.5 Flushed s8sm833821uge.18 ErrorFailed to set sender: @localhost [SMTP: Invalid response code received from server (code: 555, response: 5.5.2 Syntax error. s8sm833821uge.18)]DEBUG: Send: QUIT DEBUG: Recv: 221 2.0.0 closing connection s8sm833821uge.18
Sabe o que pode ser?
Patrick, no código acima que coloquei faltou uma chamada para a função include().
Vou atualizar o POST e quando tiver ok eu aviso.
Atualizei o Post, coloquei a parte que inclui o arquivo que contém a classe Mail.
Esse erro que você postou por último aparenta ser devido a configuração das variáveis $to e $from.
$headers = array (’From’ => $from,
‘To’ => $to,
‘Subject’ => $subject)
A variável $to é o destino da mensagem(para onde ela vai) e a variável $from é o endereço de email(quem enviou a mensagem) que está enviando a mensagem. Exemplo de como ficaria:
$headers = array (’From’ => ‘eu_sou_seu_cliente@gmail.com’,
‘To’ => ‘eu_vou_receber_a_mensagem@gmail.com’,
‘Subject’ => ‘teste’);
November 13, 2008
Noel, muito obrigado pela ajuda!!
Consegui resolver e foi muito útil este Post.
Abração!
December 13, 2008
Patrick, ótimo script, testei e funcionou perfeiramente na hostnet, é possível adaptá-lo para indicar o site?
Muito obrigado
É possível. Vou criar uma versão que funcione para indicação de sites.
December 16, 2008
[...] script é baseado no post como enviar emails autenticados pelo gmail/google apps. É altamente recomendado ler tal post antes de cair de mãos na massa no post de [...]
Saudações
A última parte do teu post me ajudou bastante, obrigado.
No meu caso era um firewall do cpanel que tava bloqueando o meu acesso ao gmail
[]’s Anselmo Battisti
May 6, 2009
Quando utilizo o script e acesso o site aparece no navegador:
$from, ‘To’ => $to, ‘Subject’ => $subject); $smtp = Mail::factory(’smtp’, array (’host’ => $host, ‘port’ => 465, ‘auth’ => true, ‘debug’ => false, ‘username’ => $username, ‘password’ => $password) ); // Efetuando o envio autenticado $mail = $smtp->send($to, $headers, $body); // Verificando se houve erro if (PEAR::isError($mail)) { echo(”Error” . $mail->getMessage()); } else { echo(”Email enviado com sucesso!!”); } ?>
O que pode ser o problema?
Desde já agradeço, falta somente adaptar o formulário para poder por o site no ar.
Rafael, isso pode ser por causa de alguma chave ou tag do PHP que deixou de ser copiada ou foi acrescida na linha errada.
Tente copiar novamente o código e qualquer coisa me passe o endereço para eu dar uma olhada assim poderei dizer com exatidão o que está ocorrendo.
June 9, 2009
Noel o meu está dando este erro: Warning: require_once(PEAR.php) [function.require-once]: failed to open stream: No such file or directory in C:\Inetpub\wwwroot\mailphp\Mail.php on line 21
Fatal error: require_once() [function.require]: Failed opening required ‘PEAR.php’ (include_path=’.;C:\php5\pear’) in C:\Inetpub\wwwroot\mailphp\Mail.php on line 21
June 9, 2009
o meu email foi errado
Opa Glauber,
O erro que você me passou é porque o pear(http://pear.php.net/) não está instalado no seu servidor windows. E o Pear é importante porque é nele que possui os comandos para envio de email autenticado.
Nesse endereço tem um tutorial em inglês de como instalar o pear no windows:
http://pear.php.net/manual/pt_BR/installation.getting.php
Se precisar de alguma ajuda é só me falar que eu tento me aventurar no windows para te mostrar como pode ser feito.
Abraços e boa sorte,
Olá Noel, tudo certo. Esse último erro, eu resolvo no meu servidor ? Pois eu não estou sabendo resolver esse último, e não entendi muito bem o que está escrito. Poderia me dar uma mão, só falta isso para fazer funcionar todos os meus formulários, e não são poucos, ou seja, muitos clientes meus estão sem ouvir seus próprios clientes…
Obrigado
Olá Noel, tudo bem?
Terias como me ajudar? Estou no sufoco há uns 20 dias com meu site que não consigo usar o formulário de mail de jeito algum. Eu abro os mails no gmail, e segui seu tutorial. Estou tendo o seguinte erro:
DEBUG: Recv: 220 mx.google.com ESMTP d35sm6479758and.15 DEBUG: Send: EHLO localhost DEBUG: Recv: 250-mx.google.com at your service, [187.16.23.135] DEBUG: Recv: 250-SIZE 35651584 DEBUG: Recv: 250-8BITMIME DEBUG: Recv: 250-AUTH LOGIN PLAIN DEBUG: Recv: 250-ENHANCEDSTATUSCODES DEBUG: Recv: 250 PIPELINING DEBUG: Send: AUTH LOGIN DEBUG: Recv: 334 VXNlcm5hbWU6 DEBUG: Send: aWdvci5rb3Nsb3Zza3lAZW5kc3NvbHV0aW9ucy5jb20= DEBUG: Recv: 334 UGFzc3dvcmQ6 DEBUG: Send: ZGlyZXRvcmlh DEBUG: Recv: 235 2.7.0 Accepted DEBUG: Send: MAIL FROM: DEBUG: Recv: 555 5.5.2 Syntax error. d35sm6479758and.15 DEBUG: Send: RSET DEBUG: Recv: 250 2.1.5 Flushed d35sm6479758and.15 ErrorFailed to set sender: @localhost [SMTP: Invalid response code received from server (code: 555, response: 5.5.2 Syntax error. d35sm6479758and.15)]DEBUG: Send: QUIT DEBUG: Recv: 221 2.0.0 closing connection d35sm6479758and.15
Terias como me ajudar, por favor?!
Desde já agradeço, Igor
August 4, 2009
OLÁ NOEL, E AI TUDO BEM? ESTÁ DE PARABENS EM SEU BLOG..MUITO BOM!!!
Olá Noel;
eu segui este tuto, e estou tendo um problema, fiz conforme disse a questao do $to, $from, e do $subject…
mais esta dando o erro:
DEBUG: Recv: 220 mx.google.com ESMTP 10sm1093856agb.36 DEBUG: Send: EHLO localhost DEBUG: Recv: 250-mx.google.com at your service, [187.16.23.130] DEBUG: Recv: 250-SIZE 35651584 DEBUG: Recv: 250-8BITMIME DEBUG: Recv: 250-AUTH LOGIN PLAIN DEBUG: Recv: 250-ENHANCEDSTATUSCODES DEBUG: Recv: 250 PIPELINING DEBUG: Send: AUTH LOGIN DEBUG: Recv: 334 VXNlcm5hbWU6 DEBUG: Send: cm9kcmlnb21hcnRpbnNqb3JnZTIwMDdAZ21haWwuY29t DEBUG: Recv: 334 UGFzc3dvcmQ6 DEBUG: Send: TmF0YWxpISE= DEBUG: Recv: 235 2.7.0 Accepted DEBUG: Send: MAIL FROM: DEBUG: Recv: 250 2.1.0 OK 10sm1093856agb.36 DEBUG: Send: RCPT TO: DEBUG: Recv: 250 2.1.5 OK 10sm1093856agb.36 DEBUG: Send: DATA DEBUG: Recv: 354 Go ahead 10sm1093856agb.36 DEBUG: Send: From: rodrigomartinsjorge2007@gmail.com To: rodrigomartinsjorge2007@gmail.com Subject: Testando envio autenticado pelo Google Apps recebeu? . DEBUG: Recv: 250 2.0.0 OK 1251246801 10sm1093856agb.36 DEBUG: Send: QUIT DEBUG: Recv: 221 2.0.0 closing connection 10sm1093856agb.36 Email enviado com sucesso!!
pode me ajudar??? estou precisando com urgencia….
att
Rodrigo Martins
necessario verificar:)
Comments RSS TrackBack Identifier URI
Leave a comment






24 Comments