Palavra:   

Revista PHP / PHP

Flávia Jobstraibizer

Analista de sistemas, DBA Mysql, PostgreSQL, Oracle, SQLServer e Firebird. Desenvolvedora de sistemas, e administradora de servidores FreeBSD. Conheça o site www.flaviajobs.com.br

Pear parte 2 - Enviando emails com o pacote MAIL

Esse artigo, segundo da série de artigos de utilização dos pacotes da biblioteca PEAR, vou falar sobre o envio de email através do pacote MAIL, através de SMTP e autenticado.

No meu exemplo, utilizei meu email do GMAIL para autenticar no SMTP, e enviar a mensagem. Você pode utilizar tanto o GMAIL quanto qualquer provedor de email que utilize SMTP autenticado, bastando para isso seguir as configurações.

Instale o pacote MAIL no seu PEAR através do comando "pear install Mail"
Se você não tem acesso ao SSH da máquina, leia meu primeiro artigo sobre como utilizar e instalar a biblioteca PEAR e seus pacotes, clicando aqui

Após instalado o pacote MAIL, em uma página criada com o fim de enviar as mensagens, chamamos o pacote, através de require:

PHP
  1. <?php
  2. require_once "Mail.php";
www.revistaphp.com.br

Note que não é necessário chamar um local físico para a classe, pois quando você a instala através da linha de comando, o PHP já sabe onde procurá-la.

Feito isso, vamos tratar de enviar os valores básicos de uma mensagem de email, como destinatário, remetente, assunto e corpo da mensagem.:

PHP
  1. $from = "Flávia <fjferr@gmail.com>"; // Remetente da mensagem
  2. $to = "Meu destinatário <flavia@flaviajobs.com.br>"; // Destinatário da mensagem
  3. $subject = "Meu assunto";
  4. $body = "Olá!\n\n Este é um teste de envio de email através de SMTP!";
www.revistaphp.com.br

Informamos também o host, usuário e senha para autenticação:

PHP
  1. $host = "smtp.gmail.com"; // no meu caso, utilizei o smtp do Gmail
  2. $username = "fjferr"; // no caso do gmail, utiliza-se o que vem antes da arroba.
  3. $password = "senha"; // sua senha do provedor
www.revistaphp.com.br

A parte principal do processo, é através da função Mail::factory da classe Mail do PEAR, efetuar a devida inserção das informações acima nos locais correspondentes, afim de enviar a mensagem sem erro. Isso é feito através de uma array:

PHP
  1. $headers = array ('From' => $from,
  2. 'To' => $to,
  3. 'Subject' => $subject);
  4. $smtp = Mail::factory('smtp',
  5. array ('host' => $host,
  6. 'auth' => true,
  7. 'username' => $username,
  8. 'password' => $password));
www.revistaphp.com.br

De acordo com todas estas informações, simplesmente chamamos a função "send", para enviar a mensagem:

PHP
  1. $mail = $smtp->send($to, $headers, $body);
www.revistaphp.com.br

E finalmente, uma condição de verificação, de que o email foi corretamente enviado. Note que a função PEAR::irError é nativa do PEAR e sempre que houver a necessidade de uma condição de verificação de erro, essa função será chamada.

PHP
  1. if (PEAR::isError($mail)) {
  2. echo("<p>" . $mail->getMessage() . "</p>"); // se não for enviado corretamente, retorna o erro
  3. } else {
  4. echo("<p>Email enviado com sucesso!!</p>"); // se o envio for correto, retorna a mensagem
  5. }
www.revistaphp.com.br

A maioria dos servidores de SMTP, permite o envio autenticado de emails, bastando para isso, que você possua todos os dados, como o host (mail.servidor, smtp.servidor, ip, etc), usuário e senha. Personalize ao seu gosto, tornando o envio dinâmico através de um formulário, etc.

Qualquer dúvida, comente aqui!

Opções de Interação

Comentários

Obrigado
Por: Juliano, 26/07/2010   15:08:55
Muito obrigado, tirou algumas duvidas que tinha sobre o módulo, já sei, na próxima (RTFM)... :D

Quanto aos anexos (comentados acima), tem exemplos em
http://www.phpmaniac.net/wiki/index.php/Pear_Mail
Bom
Por: Lucas, 20/08/2009   18:00:08
É muito bom.... mas este código não foi você que fez:
http://email.about.com/od/emailprogrammingtips/qt/et073006.htm

Só esqueceu de por os créditos do codigo =3
Duvida
Por: Jean, 20/05/2009   11:16:51
Olá...
eu implementei o código e ele traz o seguinte erro:

Warning: preg_match_all() expects parameter 2 to be string, array given in /usr/lib/php/Mail/mime.php on line 674

Se alguem souber como resolver....por favor...avise-me...

Obrigado
erro
Por: Sergio, 20/11/2008   04:16:40
Tenho o seguinte erro:
Warning: require_once(Mail.php): failed to open stream: No such file or directory in /srv/www/htdocs/contato/email_dica1.php on line 3 Fatal error: require_once(): Failed opening required 'Mail.php' (include_path='.:/usr/share/php5:/usr/share/php5/PEAR') in /srv/www/htdocs/contato/email_dica1.php on line 3

O pacote Mail esta instalado e o caminho esta correto.
O que pode ser?

Obrigado

Sergio
Mando vê, hein
Por: Adriano, 25/09/2008   10:14:22
Ae simmmm, Hein!!!!

Cê mandou muito bem neste artigo, e olha que eu tava atráz a tempo de uma solução eficaz de email via SMTP, mais todos exemplos que lia, não foram tão elucidativo como o seu, e como sou iniciante em PHP....

Já implementei no ultimo site que eu to fazendo

http://www.marabuffet.com.br e funfou legal com o Flash

Valew!!!
Falow!!!
resolvido, também
Por: joao, 16/10/2007   04:16:50
jah resolvi.

ps: Fláviaa, perdoe-me pelo erro de digitação do seu nome no primeiro post.
Foi de grande ajuda seu documento.
Cordial Abraço
resolvido
Por: joao, 16/10/2007   01:30:45
Ops, resolvi jah, era so instalar com o comando: pear install Net_SMTP...
Mas agora tenho esse outro pro:
Failed to connect to gsmtp185.google.com:25 [SMTP: Failed to connect socket: Connection timed out (code: -1, response: )]
=\
Erro, Urgente
Por: joao, 16/10/2007   01:14:16
Oi Flávio

Segui os seus artigos mas tive o seguinte erro:

Warning: Mail_smtp::include_once(Net/SMTP.php) [function.Mail-smtp-include-once]: failed to open stream: No such file or directory in /usr/share/php/Mail/smtp.php on line 206

Warning: Mail_smtp::include_once() [function.include]: Failed opening 'Net/SMTP.php' for inclusion (include_path='.:/usr/share/php:/usr/share/pear') in /usr/share/php/Mail/smtp.php on line 206

Fatal error: Class 'Net_SMTP' not found in /usr/share/php/Mail/smtp.php on line 210

Voce poderia me ajudar por gentileza?
Mto Grato.
???
Por: Flávia, 25/06/2007   13:33:11
Dica???
O artigo trata de enviar email, acho que deixei claro.
Para o que deseja, é só implementar o módulo de upload de arquivos, amigo... Qual o segredo???
Anexos
Por: Carlos, 23/05/2007   17:19:58
Adorei seu artigo, estou usando e funciona 90%!
Isso porque não consigo enviar anexos como no meu script anterior, que não usava autenticação.

Alguma dica?

Obrigado
Carlos