Creio que todos programadores PHP em algum momento tiveram de implementar alguma funcionalidade que fizesse o envio de e-mails, seja ela em formato texto simples (text/plain) ou em formato HTML (text/html) e além disto utilizando autenticação de saída no servidor de SMTP da empresa.

O código abaixo é uma implementação utilizando a classe Mail do pacote PEAR (pear.php.net/).

PS.: Lembre-se de que o "email@servidorsmtp.com.br" deve ser um e-mail de uma conta válida no servidor SMTP utilizado na autenticação.

  1. <?php
  2. require_once "Mail.php";
  3. public class Email
  4. {
  5.     function enviar$de $para $assunto$mensagem ""$content_type "plain")
  6.     {
  7.         //Configurações da autenticação do servidor SMTP
  8.         $servidor "127.0.0.1";
  9.         $porta "25";
  10.         $usuario "usuario";
  11.         $senha "senha";
  12.         $erros "";
  13.         
  14.         //Valida o content_type do e-mail
  15.         if( $content_type == "html")
  16.             $content_type "text/html; charset=utf-8";
  17.         else
  18.             $content_type "text/plain; charset=utf-8";
  19.         //Configuração do cabeçalho da mensagem
  20.         $headers = array ('From' => "email@servidorsmtp.com.br",
  21.             'To' => $para
  22.             'Subject' => $assunto,
  23.             'Reply-To' => $de,
  24.             'Content-Type' => $content_type,
  25.             'MIME-Version' => "1.0",
  26.             'Content-Transfer-Encoding' => "base64".chunk_split(base64_encode($mensagem))
  27.         );
  28.         //Constroi o objeto para futuro envio
  29.         $smtp Mail::factory('smtp',
  30.             array ('host' => $servidor,
  31.             'port' => $porta,
  32.             'auth' => true,
  33.             'username' => $usuario,
  34.             'password' => $senha)
  35.         );
  36.         //Efetua o envio atraves da classe
  37.         $mail $smtp->send($para$headers$mensagem);
  38.         //Se ocorrerem errors, adicionamos na variavel de retorno
  39.         if (PEAR::isError($mail))
  40.             $erros $mail->getMessage();
  41.         //Efetua o retorno
  42.         return $erros;
  43.     }
  44. }
  45. ?>


Espero que seja útil.

Abraço a todos.


Comentários

Emmanuel Alexandre Tavares: Daniel,

Estou tentando usar mas o e-mail não vai.
O servidor, no caso da Mandic, está recusando com a seguinte mensagem:


*******************************************************************


This is the mail system at host smtp-14.smtp.mandic.prv.

I'm sorry to have to inform you that your message could not
be delivered to one or more recipients. It's attached below.

For further assistance, please send mail to postmaster.

If you do so, please include this problem report. You can
delete your own text from the attached returned message.

The mail system

(expanded from <""@localhost>): Host or domain name
not found. Name service error for name=localhost type=A: Host not found

Final-Recipient: rfc822; MAILER-DAEMON@localhost
Original-Recipient: rfc822; ""@localhost
Action: failed
Status: 5.4.4
Diagnostic-Code: X-Postfix; Host or domain name not found. Name service error
for name=localhost type=A: Host not found


---------- Mensagem encaminhada ----------
From: emanuel@connix.com.br
To: tavares.ea@gmail.com
Cc:
Date: Wed, 28 Aug 2013 18:41:35 -0300 (BRT)
Subject: Test message PLAIN
Test message

*******************************************************************



Rodei o script com a opção de debug e o resultado foi:



*******************************************************************


DEBUG: Recv: 220 smtp-02.smtp.mandic.prv ESMTP
DEBUG: Send: EHLO localhost

DEBUG: Recv: 250-smtp-02.smtp.mandic.prv
DEBUG: Recv: 250-PIPELINING
DEBUG: Recv: 250-SIZE 52428800
DEBUG: Recv: 250-VRFY
DEBUG: Recv: 250-ETRN
DEBUG: Recv: 250-STARTTLS
DEBUG: Recv: 250-AUTH PLAIN LOGIN
DEBUG: Recv: 250-AUTH=PLAIN LOGIN
DEBUG: Recv: 250-ENHANCEDSTATUSCODES
DEBUG: Recv: 250 8BITMIME
DEBUG: Send: STARTTLS

DEBUG: Recv: 220 2.0.0 Ready to start TLS
DEBUG: Send: EHLO localhost

DEBUG: Recv: 250-smtp-02.smtp.mandic.prv
DEBUG: Recv: 250-PIPELINING
DEBUG: Recv: 250-SIZE 52428800
DEBUG: Recv: 250-VRFY
DEBUG: Recv: 250-ETRN
DEBUG: Recv: 250-AUTH PLAIN LOGIN
DEBUG: Recv: 250-AUTH=PLAIN LOGIN
DEBUG: Recv: 250-ENHANCEDSTATUSCODES
DEBUG: Recv: 250 8BITMIME
DEBUG: Send: AUTH LOGIN

DEBUG: Recv: 334 VXNlcm5hbWU6
DEBUG: Send: ZW1hbnVlbEBjb25uaXguY29tLmJy

DEBUG: Recv: 334 UGFzc3dvcmQ6
DEBUG: Send: bWJpczYwMDI=

DEBUG: Recv: 235 2.7.0 Authentication successful
DEBUG: Send: MAIL FROM:

DEBUG: Recv: 250 2.1.0 Ok
DEBUG: Send: RCPT TO:<@localhost>

DEBUG: Recv: 250 2.1.5 Ok
DEBUG: Send: DATA

DEBUG: Recv: 354 End data with .
DEBUG: Send: From: emanuel@connix.com.br
To: tavares.ea@gmail.com
Subject: Test message PLAIN
Reply-to: emanuel@connix.com.br

Test message
DEBUG: Send:
.

DEBUG: Recv: 250 2.0.0 Ok: queued as 06F992000698
DEBUG: Send: QUIT

DEBUG: Recv: 221 2.0.0 Bye



*************************************************************************


PHP:


$backend = "smtp";

$params["host"] = "smtp.connix.com.br";
$params["port"] = 25;
$params["auth"] = TRUE;
$params["username"] = "emanuel@connix.com.br";
$params["password"] = "**********************";
$params["debug"] = TRUE;

$recipient = "emanuel.tavares@rwf.com.br";
$recipient = "emanuel.tavares@netconnix.com.br";
$recipient = "tavares.ea@gmail.com";

$headers['From'] = 'emanuel@connix.com.br';
$headers['To'] = $recipient;
$headers['Subject'] = 'Test message PLAIN';
$headers['Reply-to'] = 'emanuel@connix.com.br';

$body = 'Test message';

// Create the mail object using the Mail::factory method
$mail_object =& Mail::factory($backend, $params);

$envio = $mail_object->send($recipients, $headers, $body);

if (PEAR::isError($mail))
echo $envio->getMessage();

echo "Envio: " . $envio;




***************************************************


Alguma ideia do que pode ser?

Obrigado,

Emanuel A. Tavares
Erik Cartman: Salvou a vida de um pobre condenado, OBRIGADO!!
 


Você precisa realizar login pelo Facebook para enviar posts, comentários, apagar posts ou baixar posts em PDF. Para isso, clique no botão "Login no facebook".



Receba os posts por email: (?)

Conheça o Adianti Framework para PHP:

  • Desenvolvimento com componentes;
  • Formulários e datagrids.
  • Versão Web e Desktop (Gtk);
  • Multiplataforma;
  • Desenhe as interfaces;
  • IDE própria (Adianti Studio).
Ver detalhes...

Tenha mais produtividade com:

Adianti Studio: IDE para PHP

  • Leve e rápido;
  • Syntax highlight;
  • Gerência de projetos;
  • Navegação em banco de dados;
  • Autocomplete e plugins.
Mais informações...