webARTz - Onde a WEB encontra a ARTE

Cadastre-se no Mercado Livre, clique aqui !!
08 out
PHP: Envio de e-mail com Autenticação SMTP

PHP: Envio de e-mail com Autenticação SMTP

Olá Pessoal, há algum tempo atrás eu escrevi artigos sobre envios de e-mail com o PHP, porém ambos utilizavam a função mail() do próprio PHP, e sabemos que em alguns servidores (hospedagens) os admins bloqueiam o envio com essa função, para evitar envio de e-mails em massa (spam), só permitindo assim o envio com autenticação no servidor SMTP, o que é claro, possibilita o admin ter um controle dos envios feitos.

Bom, a grande maioria dessas hospedagens que tem o sistema de bloqueio a função mail() do PHP oferecem alternativas, com scripts próprios na grande maioria, mas ai vem um problema, se estiver utilizando um script deles, seja qual for, caso precise mudar de hospedagem, seja lá por qual motivo, você terá de mudar todos os scripts que enviam e-mails no site, e isso é um grande problema, ainda mais se o site for grande e tiver muitas páginas que fazem isso. Porém há uma solução para isso, chama-se PHPMailer, que é uma classe open source desenvolvida pela Codeworxtech que permite fazer o envio de e-mails autenticados.

Vamos falar agora do PHPMailer, como disse é uma classe em PHP desenvolvida pela Codeworxtech para trabalhar em praticamente em qualquer ambiente, sempre lembrando que existem alguns pré-requisitos, mas respeitando isso, você poderá fazer envio de e-mails com arquivos anexados, com código HTML ou só texto, multiplos destinatários, envio com cópia, entre outras funções interessantes, e é claro, essa função permite diferentes tipos de envio, no nosso caso aqui vou mostrar como se faz via autenticação no servidor SMTP, mas você pode utilizar inclusive com a função mail() do PHP, sendmail ou QMail.

Bom, vamos ao código, está bem explicado e comentado.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
< ?
require("class.phpmailer.php"); // Chama o arquivo da classe

$mail = new PHPMailer(); // Cria a instância
$mail->SetLanguage("br"); // Define o Idioma
$mail->CharSet = "iso-8859-1"; // Define a Codificação
$mail->IsSMTP(); // Define que será enviado por SMTP
$mail->Host = "smtp.meusite.com.br"; // Servidor SMTP
$mail->SMTPAuth = true; // Caso o servidor SMTP precise de autenticação
$mail->Username = "fulano@meusite.com.br"; // Usuário ou E-mail para autenticação no SMTP
$mail->Password = "12345678"; // Senha do E-mail
$mail->IsHTML(true); // Enviar como HTML
$mail->From = "email@dominio.com.br"; // Define o Remetente
$mail->FromName = "Roberto Carlos"; // Nome do Remetente
$mail->AddAddress("teste@teste.com.br","Teste dos Santos"); // Email e Nome do destinatário

// Estes campos a seguir são opcionais, caso não queira usar, remova-os
$mail->AddReplyTo("email@dominio.com.br","Information"); // E-mail de Resposta
$mail->AddCC("outroemail@dominio.com.br";"Nome"); // Envia Cópia
$mail->AddBCC("meuemail@dominio.com.br";"Nome"); // Envia Cópia Oculta

// Se você quiser anexar aquivos, pode utilizar os comandos abaixo, caso não vá enviar anexos, remova os comandos
$mail->AddAttachment("/var/tmp/file.tar.gz"); // Arquivo Anexo 1
$mail->AddAttachment("/tmp/image.jpg","new.jpg"); // Arquivo Anexo 2

// Configuração de Assuntos e Corpo do E-mail
$mail->Subject = "Assunto do E-mail"; // Define o Assunto
$mail->Body = "Corpo da Mensagem em formato HTML"; // Corpo da mensagem em formato HTML
// Este campo abaixo é Opcional
$mail->AltBody = "Corpo da Mensagem somente Texto, sem formatações"; // Você pode mandar um e-mail somente texto, caso o leitor de e-mails da pessoa não leia no formato HTML

// Fazemos o envio do email
if(!$mail->Send()){
    print "Ocorreu um erro no envio da Mensagem.<br />";
    print "Erro: ".$mail->ErrorInfo;
}else{
    print "Sei e-mail foi enviado com Sucesso !!";
}
?>

.

Bom, para fazer o download dessa classe, basta acessar o endereço a seguir:
http://sourceforge.net/projects/phpmailer/

Se quiser baixar este script, clique aqui.

Categorias:
HTML e CSS PHP

Comentários (26)

Trackbacks/Pingbacks (0)

  • Gustavo escreveu:

    Responder

    Cara, muito bom seu script!
    Apos uma longa pesquisa referente ao assunto, o seu script foi o unico que funcionou 100%, sem nenhuma gambiarra! kkkk
    Valeu mesmo!

    sexta-feira, 17 de setembro de 2010 às 13:45
    • Rodrigo Luis escreveu:

      Olá Gustavo, tudo bem?
      Que bom que este script foi util a você !!

      sexta-feira, 17 de setembro de 2010 às 13:58 www.webartz.com.br
  • André escreveu:

    Responder

    Quanto vc cobra pra executar isso que vc descreveu acima?
    Tenho o site pronto e meus formulários não funcionam.

    Aguardo retorno.

    quinta-feira, 27 de outubro de 2011 às 14:52
  • Rodrigo Luis escreveu:

    Responder

    André, entro em contato contigo via e-mail.

    quinta-feira, 27 de outubro de 2011 às 15:22 www.webartz.com.br
  • Matheus Strik escreveu:

    Responder

    fala rodrigo blz?
    vlw mesmo cara, mas eu queria saber de uma coisinha
    estou desenvolvendo um sisteminha de newsletter, e queria saber se esse sistema de envio é o ideal para não cair como spam.
    Um abraço

    terça-feira, 15 de novembro de 2011 às 18:12
    • Rodrigo Luis escreveu:

      Olá Matheus,
      Bom, respondendo as suas dúvidas, envio de newsletter é um pouco complexo, pois como é feito um envio em bloco de muitos emails, e em geral cada provedor ou serviço de emails (Gmail, Hotmail e afins) tem politicas e regras de spam diferentes, não há uma forma eficaz e funcional para evitar que o mesmo seja categoriazado como spam.
      Sim, esse método de envio autenticado via SMTP pode ser utilizado para newsletters, entretanto não é garantido que o mesmo não caia nas caixas de spam.

      Dica: uma forma de evitar a classificação de spam é fazer os envios unicos dos emails, ou seja, cada e-mail enviado terá apenas 1 destinatário, e não aquelas listas com diversos emails.

      terça-feira, 15 de novembro de 2011 às 22:16 www.webartz.com.br
  • André Luiz escreveu:

    Responder

    Bom dia!

    Há como incluir o recurso CAPTCHA no PHPmailer?

    Tenho o PHPmailer e tentei incluir o recurso captcha, mas ambos não rodam juntos. Pesquisei em alguns fóruns mas sem sucesso.

    Alguma dica?

    terça-feira, 01 de maio de 2012 às 9:52
    • Rodrigo Luis escreveu:

      Olá André,

      Já usei CAPTCHA com o PHPmailer, e funciona sem problemas, pois o processo de verificação do CAPTCHA não interfere no envio de e-mail com o PHPmailer, em virtude da verificação dos caracteres preenchidos ter que vir antes do processo de envio no seu script que executa a ação de enviar e-mail com o PHPmailer.

      Talvez em seus testes ai não funcionou, em virtude de você estar fazendo algo equivocadamente, ou até mesmo como citei, a ordem dos processo, primeiro verifica se o CAPTCHA está correto, para depois executar o processo de envio.

      Espero ter ajudado.

      terça-feira, 01 de maio de 2012 às 10:59 www.webartz.com.br
    • André Luiz escreveu:

      Ajudou sim,

      Realmente, eu acabei incluindo o CAPTCHA após início da sessão do phpmailer.

      Vou acertar isso.

      Obeigado

      terça-feira, 01 de maio de 2012 às 13:10
  • 10ºDiego escreveu:

    Responder

    o me está dando o seguinte erro:
    SMTP Error: Could not connect to SMTP host. Ocorreu um erro no envio da Mensagem.
    Erro: SMTP Error: Could not connect to SMTP host.

    sábado, 16 de junho de 2012 às 13:52
    • 11ºRodrigo Luis escreveu:

      Olá Diego,

      Bom, essa mensagem de erro indica que o script não está conseguindo conectar no endereço SMTP que você colocou.

      Pode ser que esteja digitado algo erro no endereço, verifique isso.

      Pode ser também que o usuário e senha não estejam corretos, verifique se o SMTP que você colocou precisa de autenticação para fazer envios, outra coisa que pode ser é que alguns servidores SMTP utilizam outras portas para a conexão, verifique isso, caso seja, existe um parâmetro no PHPMailer para especificar a porta de conexão.

      sábado, 16 de junho de 2012 às 16:26 www.webartz.com.br
  • 12ºeronildes escreveu:

    Responder

    cara ver se voçê pode mim ajuda?eu contruí o site joomla então eu baixei a o componente fox contact mais não consigo enviar email no site dar esse ,Erro no SMTP! Não foi possível conectar ao servidor SMTP.ja fis de tudo mais não deu certo.

    quarta-feira, 27 de junho de 2012 às 18:38
    • 13ºRodrigo Luis escreveu:

      Olá Eronildes,

      Eu não conheço muito bem a plataforma do Joomla!, mas acredito que seja semelhante a outros CMS como o WordPress por exemplo, se você instalou o componente de envio de e-mail e não está conseguindo por erro de SMTP por conexão, possivelmente seus dados de conexão ao SMTP, ou porta, ou forma de autenticação no mesmo estão incorretos. Confira isso, e veja se está tudo OK.

      quarta-feira, 27 de junho de 2012 às 20:12 www.webartz.com.br
  • 14ºeronildes escreveu:

    Responder

    bom dia.rodrigo.a configuração do smtp esta correta eu confirmei com host de hospedagem,eu já troquei as porta já mudei o monde de configuração mais não deu certo

    quinta-feira, 28 de junho de 2012 às 8:39
    • 15ºRodrigo Luis escreveu:

      Eronildes,

      Como as configurações estão corretas, sugiro que você verifique a questão desse componente que está utilizando, como não tenho conhecimento do funcionamento destes componentes no Joomla! não consigo te dar mais informações.

      Sugiro também que você busque mais detalhes sobre o uso no Joomla! do envio de e-mails via SMTP, depois compartilha aqui conosco.

      quinta-feira, 28 de junho de 2012 às 9:10 www.webartz.com.br
  • 16ºFernandes escreveu:

    Responder

    Olá Rodrigo, estou com uma dificuldade para fazer o envio de formularios. Estou usando o wordpress e o caminho onde está o phpmailer seria: raiz/pastasite/pastadophpmailer/
    fiz uns testes usando um formulario simples na raiz do site e fora do wordpress e tudo certo, mas quando tento fazer dentro do site não funciona….

    http://www.pmdbgaspar.org.br/site

    para enviar os dados dos campos do form não estou usando action e sim if(isset($_POST[ 'acao' ]) && $_POST[ 'acao' ] == ‘enviar’ ){
    require get_settings(‘home’) . ‘/envio/valida-contato.php’; }

    os avisos são:
    Warning: require() [function.require]: http:// wrapper is disabled in the server configuration by allow_url_include=0 in /home2/pmdbsc/public_html/site/wp-content/themes/pmdb/page-contato.php on line 15

    Warning: require(http://pmdbgaspar.org.br/site/envio/valida-contato.php) [function.require]: failed to open stream: no suitable wrapper could be found in /home2/pmdbsc/public_html/site/wp-content/themes/pmdb/page-contato.php on line 15

    Fatal error: require() [function.require]: Failed opening required ‘http://pmdbgaspar.org.br/site/envio/valida-contato.php’ (include_path=’.:/usr/lib/php:/usr/local/lib/php’) in /home2/pmdbsc/public_html/site/wp-content/themes/pmdb/page-contato.php on line 15

    a linha 15 é o comando que descrevi na linha anterior ao aviso

    se puder me ajudar desde já lhe agradeço

    quinta-feira, 01 de novembro de 2012 às 10:10 www.wf3.com.br
  • 17ºLeandro escreveu:

    Responder

    Rodrigo, eu paguei para uma empresa desenvolver um sistema em PHP e me passaram somente funcionando em um unico dominio. Vc consegue desbloquear isso para funcionar em outros dominios?

    sexta-feira, 07 de junho de 2013 às 21:42
    • 18ºRodrigo Luis escreveu:

      Leandro, possivelmente o sistema não está “bloqueado” para um domínio, mas talvez nos arquivos de configuração deste sistema esteja configurado para ser utilizado naquele domínio apenas.

      Vale lembrar que se o sistema comprado possui licença de uso apenas para aquele domínio, se você instalar ele em outro domínio, você estará infringindo a licença do sistema, e pode se estiver em contrato, ser processado pela empresa que o desenvolveu.

      sábado, 08 de junho de 2013 às 8:36 www.webartz.com.br
  • 19ºjoao Souza escreveu:

    Responder

    Alguem faz o HTML pra mim. Nao conseguir fazer. vlw

    sábado, 22 de junho de 2013 às 9:27
  • 20ºleandro escreveu:

    Responder

    Boa Noite ..

    Esto tentando mandar o email para mais de um destinatario e não esta indo informa que o
    Invalid address:

    ele não aceita dado concatenado. exemplo

    email1@dominio.com.br,email2@dominio.com.br?

    Valeu .. o Seu TUTO é show de bola

    terça-feira, 02 de julho de 2013 às 18:26
    • 21ºRodrigo Luis escreveu:

      Olá Leandro,

      Para mandar para mais de um usuário você precisa duplicar esta linha abaixo. Colocando apenas o email, ou o “e-mail” e virgula “nome da pessoa”, ambos entre aspas.

      $mail->AddAddress(“teste@teste.com.br”,”Teste dos Santos”);

      terça-feira, 02 de julho de 2013 às 19:37 www.webartz.com.br
  • 22ºLuciano escreveu:

    Responder

    Me diz uma coisa eu uso hospedagem windows e la tem PHP, para usar esse script basta enviar ele para minha hospedagem ou tem que fazer algo mais ?

    domingo, 21 de julho de 2013 às 14:51
    • 23ºRodrigo Luis escreveu:

      Olá Luciano,

      Basta você personalizar ele com os dados do seu servidor SMTP, e subir ele na sua hospedagem, e sim ele funcionará.

      Mas lembre-se, esse script usa a biblioteca phpMailer que precisa estar junto na sua hospedagem.

      domingo, 21 de julho de 2013 às 18:58 www.webartz.com.br
  • 24ºKaique escreveu:

    Responder

    Olá Rodrigo, apliquei o script e foi me apresentado o seguinte erro:
    “Ocorreu um erro no envio da Mensagem.
    Erro: Os endereços de rementente a seguir falharam: kaique@consultoriasi.com.br : Called Mail() without being connected”

    Poderia me dar uma luz ? Já tentei de tudo e não consegui resolver, muito obrigado

    sexta-feira, 25 de outubro de 2013 às 10:05
    • 25ºRodrigo Luis escreveu:

      Kaique, possivelmente pelo erro que você informou, o script não está conseguindo autenticar o seu e-mail no SMTP para envio.

      sexta-feira, 25 de outubro de 2013 às 10:38 www.webartz.com.br
  • 26ºKaique escreveu:

    Responder

    Consegui Rodrigo, muito obrigado!
    O problema era a definição da porta de saída que não havia colocado.

    sexta-feira, 25 de outubro de 2013 às 10:45
  • Este post ainda não possui Pingbacks ou Trackbacks

Faça seu Comentário

webARTz - Onde a WEB encontra a ARTE

Free Page Rank Tool Visitantes Online Server Monitor Spam Poison Creative Commons License
Contribuindo na Web desde Março de 2008| Powered by Wordpress.org| Hospedado na KingHost| Fundado por Rodrigo Luis e Anderson Backes
Voltar ao Topo