• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

goncalobaltazar

[PHP] Sistema de Envio de Emails

9 mensagens neste tópico

PHP Mailer Tutorial

Esta é a minha 1ª contribuição para o forum!! :cheesygrin:

Este Tutorial explicará como enviar e-mails a partir do PHP usando um servidor SMTP.

Tem o objectivo de tirar algumas dúvidas referentes à utilização da class PHPMailer.

Material necessário:

  • Servidor PHP com PHP mail() e Sendmail
  • PHPMailer
  • Servidor SMTP (usei mail.sapo.pt)
  • Tempo Livre...

PHP Mailer

Site oficial:

http://phpmailer.worxware.com/

Página de Download:

http://sourceforge.net/projects/phpmailer/files/

Links Directos (Versões mais recentes a 13 de Julho de 2009):

Vou usar neste tutorial a versão PHP5/6

Extrutura do directório:

Para este projecto usei a seguinte estrutura:

  • enviar_email
    • PHPMailer
      • class.phpmailer.php
      • class.smtp.php

      [*]sendmail.php

      [*]index.php

      [*]anexo.jpg

Ficheiros:

class.phpmailer.php & class.smtp.php

Estão incluídos no download acima.

sendmail.php

<?php
require_once('PHPMailer/class.phpmailer.php');

// Definir variáveis
if($_POST) {
   $destinatario_nome = $_POST['dest_n'];
   $destinatario_email = $_POST['dest_e'];
   $assunto = $_POST['ass'];
   $mensagem = $_POST['msg'];


   $mail = new PHPMailer(true);   // true - Retorna excepcões

   $mail->IsSMTP();   // Utilização de SMTP

   try {
       $mail->Host       = "mail.yourdomain.com";  // Servidor SMTP
       $mail->SMTPAuth   = true;                   // Activar autenticação SMTP
       $mail->Username   = "yourname@yourdomain";  // Utilizador do servidor SMTP
       $mail->Password   = "yourpassword";         // Password do utilizador do SMTP

       $mail->AddReplyTo('name@yourdomain.com', 'First Last');       // Email e nome para onde será enviada a resposta (opcional)
       $mail->SetFrom('name@yourdomain.com', 'First Last');          // Email e nome de envio

       $mail->AddAddress($destinatario_email, $destinatario_nome);   // Email e nome do destinatário

       $mail->Subject = $assunto;                                    // Assunto da mensagem

       $mail->IsHTML(false);                                         // false - O conteúdo da mensagem será enviado como texto e não HTML
       $mail->Body = $mensagem;                                      // Conteúdo da mensagem em si

       $mail->AddAttachment('anexo.jpg');                            // Anexo (opcional)

       $mail->Send();
       echo "<p><font face="Calibri">Mensagem enviada com sucesso!</font></p>\n";   // Mensagem enviada!
   } catch (phpmailerException $e) {
       echo $e->errorMessage();                      // Erros provenientes do PHPMailer
   } catch (Exception $e) {
       echo $e->getMessage();                        // Outros erros
   }
} else {
   header('Location:index.php');
   exit();
}
?>

index.php

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
<title>Enviar Email</title>
<!-- Analytics -->
<script type="text/javascript">
 var _gaq = _gaq || [];
 _gaq.push(['_setAccount', 'UA-31683991-1']);
 _gaq.push(['_setDomainName', 'portugal-a-programar.pt']);
 _gaq.push(['_trackPageview']);
 (function() {
   var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
   ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
   var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
 })();
</script>
<!-- /Analytics --></head>

<body>
<form method="POST" action="sendmail.php" style="font-family: Calibri">
   <p>Destinatário (Nome):<br><input type="text" name="dest_n" size="35"></p>
   <p>Destinatário (Email):<br><input type="text" name="dest_e" size="35"></p>
   <p>Assunto:<br><input type="text" name="msg" size="35"></p>
   <p>Mensagem:<br><textarea rows="10" name="S1" cols="31"><textarea></p>
   <p><input type="submit" value="Enviar" name="submit"></p>
</form>
</body>
</html>

anexo.jpg

Qualquer jpg serve (só para teste)!

Configurações:

Como é óbvio terá de preencher os campos:

  • Servidor SMTP
  • Utilizador do servidor SMTP
  • Password do utilizador do SMTP
  • Email e nome para onde será enviada a resposta (opcional)
  • Email e nome de envio

Poderá utilizar qualquer servidor SMTP.

Poderá ser necessário adicionar um parâmetro com a porta do servidor SMTP, utilizando:

$mail->Port       = xxx;

Para SAPO Mail (utilizei este servidor e funciona perfeitamente):

  • Servidor SMTP: smtp.sapo.pt
  • Utilizador do servidor SMTP: xxxxxxxxxxxx@sapo.pt
  • Password do utilizador do SMTP: xxxxxxxxxxxx (password do email)
  • Porta (no meu teste não foi necessário): 25

Atenção:

Email e nome de envio: este campo poderá susceptar algumas dúvidas, este campo permite definir qual o email que vai aparecer como proveniência do email enviado, pode ser definido à sua escolha, mesmo não tendo posse do email em questão. Não serei responsável por uma utilização indevida.

Atenção, se este campo não for preenchido devidamente é muito possivel que o email vá parar à "Caixa de lixo electrónico", ou algo parecido.

Informações adicionais:

Adicionar mais destinatários:

Adicionar:

$mail->AddAddress(/*Email do destinatário*/, /*Nome do destinatário*/);

por cada novo destinatário;

Adicionar mais anexos:

Adicionar:

$mail->AddAttachment(/*Localização do Ficheiro*/);

por cada novo anexo;

Envio de mensagens com corpo em HTML (não testado):

Substituir:

$mail->IsHTML(false);
$mail->Body = $mensagem;

por:

$mail->IsHTML(true);
$mail->AltBody = 'O seu sistema de recepção de email não suporta HTML';
$mail->MsgHTML($mensagem);


Atenção: Este código tem apenas a função de informação e exemplificação, uma utilização do código tal como está poderá permitir a pessoas mal intencionadas o envio de, por exemplo, consecutivos e-mails (spam).

Não serei responsável pela utilização deste código.

Alguma dúvida, disponham!

Gonçalo Baltazar

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Tentei implementar este código mas quando clico em enviar ocorre este erro

Fatal error: Call to undefined method PHPMailer::SetFrom() in C:\Program Files\Apache Software Foundation\Apache2.2\htdocs\MAils\TESTAR\sendmail.php on line 23

Porque será

Subtitui os dados do servidor smtp bem como indicado no tutorial..inclusive usei a minha conta da sapo para testar

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Tentei implementar este código mas quando clico em enviar ocorre este erro

Fatal error: Call to undefined method PHPMailer::SetFrom() in C:\Program Files\Apache Software Foundation\Apache2.2\htdocs\MAils\TESTAR\sendmail.php on line 23

Porque será

Subtitui os dados do servidor smtp bem como indicado no tutorial..inclusive usei a minha conta da sapo para testar

Também tive esse problema e parece-me que a função SetFrom não existe :S

Eu gostava de conseguir enviar emails através do php!

Cumps, Tiago

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Eu acabei por conseguir fazer o que tinha pretendido...sem erros.

Mas como já foi a algum tempo não me lembro o que fiz.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Boas tarde,

eu estive a fazer como está aqui postado só que a mim dá-me erros, estive a ver se consegui corrigir mas não consigo e os erros que dá são os seguintes:

Notice: Undefined index: ass in C:\xampp\htdocs\sendmail\sendmail.php on line 7

Deprecated: Function set_magic_quotes_runtime() is deprecated in C:\xampp\htdocs\sendmail\class.phpmailer.php on line 1471

Deprecated: Function set_magic_quotes_runtime() is deprecated in C:\xampp\htdocs\sendmail\class.phpmailer.php on line 1475

SMTP Error: Could not authenticate.

se alguém sober o que posso fazer agradeco imenso.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Boas tarde,

eu estive a fazer como está aqui postado só que a mim dá-me erros, estive a ver se consegui corrigir mas não consigo e os erros que dá são os seguintes:

Notice: Undefined index: ass in C:\xampp\htdocs\sendmail\sendmail.php on line 7

Deprecated: Function set_magic_quotes_runtime() is deprecated in C:\xampp\htdocs\sendmail\class.phpmailer.php on line 1471

Deprecated: Function set_magic_quotes_runtime() is deprecated in C:\xampp\htdocs\sendmail\class.phpmailer.php on line 1475

SMTP Error: Could not authenticate.

se alguém sober o que posso fazer agradeco imenso.

1o erro - Diz que nao encontra a variavel ass a ser mandada no post, adiciona no teu formulario o campo assunto com o nome de ass.

2/3o-essa funcao esta desactualizada, deves ter feito download da versao para o PHP4, usa a versao PHP5/6

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Boas malta, este código funciona para enviar emails localmente?através do MAMP por exemplo?

É necessário alterar o ficheiro class.phpmailer.php?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora