O PHPMailer é uma classe pronta para envio de e-mails através do PHP via conexão SMTP ou POP3 muito utilizado por todo o mundo. Seu método de envio é largamente recomendado e é bem melhor do que o envio do mail() que á função padrão do PHP.
Primeiro você precisa fazer o download da última versão dele, vá nesse endereço e baixe a sua versão ou vá direto ao site do script.
Nota: Nesse tutorial usarei a versão 2.3 (download) do PHPMailer que é a última versão até agora.
Faça o download, descompacte o arquivo e coloque os arquivos class.phpmailer.php eclass.smtp.php em uma pasta chamada phpmailer dentro do seu site.
Agora, vamos ao script que faz o envio do e-mail:
<?php // Inclui o arquivo class.phpmailer.php localizado na pasta phpmailer require("phpmailer/class.phpmailer.php"); // Inicia a classe PHPMailer $mail = new PHPMailer(); // Define os dados do servidor e tipo de conexão // =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= $mail->IsSMTP(); // Define que a mensagem será SMTP $mail->Host = "smtp.dominio.net"; // Endereço do servidor SMTP //$mail->SMTPAuth = true; // Usa autenticação SMTP? (opcional) //$mail->Username = 'seumail@dominio.net'; // Usuário do servidor SMTP //$mail->Password = 'senha'; // Senha do servidor SMTP // Define o remetente // =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= $mail->From = "seumail@dominio.net"; // Seu e-mail $mail->FromName = "Joãozinho"; // Seu nome // Define os destinatário(s) // =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= $mail->AddAddress('fulano@dominio.com.br', 'Fulano da Silva'); $mail->AddAddress('ciclano@site.net'); //$mail->AddCC('ciclano@site.net', 'Ciclano'); // Copia //$mail->AddBCC('fulano@dominio.com.br', 'Fulano da Silva'); // Cópia Oculta // Define os dados técnicos da Mensagem // =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= $mail->IsHTML(true); // Define que o e-mail será enviado como HTML //$mail->CharSet = 'iso-8859-1'; // Charset da mensagem (opcional) // Define a mensagem (Texto e Assunto) // =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= $mail->Subject = "Mensagem Teste"; // Assunto da mensagem $mail->Body = "Este é o corpo da mensagem de teste, em <b>HTML</b>! <br /> :)"; $mail->AltBody = "Este é o corpo da mensagem de teste, em Texto Plano! \r\n :)"; // Define os anexos (opcional) // =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= //$mail->AddAttachment("c:/temp/documento.pdf", "novo_nome.pdf"); // Insere um anexo // Envia o e-mail $enviado = $mail->Send(); // Limpa os destinatários e os anexos $mail->ClearAllRecipients(); $mail->ClearAttachments(); // Exibe uma mensagem de resultado if ($enviado) { echo "E-mail enviado com sucesso!"; } else { echo "Não foi possível enviar o e-mail.<br /><br />"; echo "<b>Informações do erro:</b> <br />" . $mail->ErrorInfo; } ?>
Algumas linhas de código estão comentadas porque são opcionais e dependem também da necessidade de quem vai usar o script. Logo no começo, na parte dos dados do servidor você tem a opção de configurar o login do servidor SMTP caso seja necessário.
Repare que, na parte na qual definimos a mensagem e o assunto do e-mail, temos duas formas de “corpo de e-mail”: formato HTML e formato Texto Plano… É bom que você também defina otexto plano (que nada mais é do que um texto sem as tags HTML parecido com o conteúdo de um arquivo .txt) por que muitos leitores de e-mail não têm suporte a e-mails em HTML (seja por configuração do usuário ou por falta de funcionalidade mesmo).
Deixei também um exemplo pronto de como anexar um arquivo ao seu e-mail. O caminho do arquivo (primeiro arquivo) está nos moldes de um servidor rodando localmente… Mas ele pode ser relativo se você estiver usando o script num servidor externo. O segundo argumento é o ‘novo’ nome do arquivo, mas é opcional.
Boa tarde, não sei se ainda responde usuários do blog, mas aí vai a pergunta: como fazer para que este código acima que ensinou, envie até 5 anexos?
Obs: leve em conta que sou muito fraco em php (meu forte é front end).
Obrigado!
Simples Eduardo, basta duplicar a linha:
$mail->AddAttachment("c:/temp/documento1.pdf", "novo_nome1.pdf");
$mail->AddAttachment("c:/temp/documento2.pdf", "novo_nome2.pdf");
A minha dúvida é mais hard:
Tenho um formulário que o cliente preenche, com essas informações crio duas mensagens.
Fiz uma programação e me deparei com um problema.
Quero que o conteúdo de uma mensagem vá para um destinatário.
E o outro conteúdo da segunda mensagem vá para o cliente.
Existe essa possibilidade?
A solução é bem simples, faz o procedimento duas vezes, muda o nome da variável ex:
$mail2 = new PHPMailer();
…Vlw Jonathas, fiz alguns testes e deu certinho, vai de uma forma pra empresa e pro cliente vai de outra forma os e-mails.
Que bom Jean =)
Obrigado Jonathas.
Teu post me tirou muitas duvidas.
Que bom Otto =)
Boa noite, da para o from do email ser diferente ao que está sendo autenticado?
Sim!
Funcionou, mas não sei como não mostrar dados do envio da mensagem. Sempre que utilizo ela, um monte de mensagens da autenticação retornam antes da minha mensagem customizada de Mensagem enviada com sucesso. Como fazer com que essas outras mensagens não sejam mostradas ???
Jonatas, em uma estrutura em MVC POO como isso é utilizado? Eu to meio perdido aqui de onde devo colocar a pasta class.phpmailer.php e onde eu jogo o código que você colocou ai.