O Swift Mailer é uma biblioteca para envio de emails, usando PHP5. Conheci a biblioteca inicialmente no framework Symfony, pois a mesma é responsável pela tarefa de enviar emails no framework, pois seu uso é muito simples e a biblioteca é muito poderosa.
Tenho notado que muitas empresas estão adotando cada vez mais o uso do Google Apps como serviço de webmail, dada a facilidade de uso e configuração do sistema. O primeiro exemplo mostra como enviar emails autenticados a partir de uma conta de email do Google (Gmail ou Apps) e os outros tratam do envio de mensagens com anexo. Usei a versão 4.0.6 para o exemplo.
Enviando emails com autenticação no Gmail (incluindo Google Apps)
require('lib/swift_required.php');
$transport = Swift_SmtpTransport::newInstance('smtp.gmail.com', 465, 'ssl')
->setUsername('usuario@gmail.com')
->setPassword('senha');
$mailer = Swift_Mailer::newInstance($transport);
$message = Swift_Message::newInstance('Assunto')
->setFrom(array('seuemail@dominio.com.br' => 'Seu Nome'))
->setTo(array('fulano@teste.com.br'))
->setReplyTo('seuemail@dominio.com.br')
->setBody('Conteudo da mensagem');
if ($mailer->send($message)){
echo 'Mensagem enviada com sucesso';
}
else{
echo 'Problema ao enviar mensagem. Tente novamente mais tarde';
}
Enviando emails com imagens embutidas (inline)
Útil para enviar emails com imagens que não serão bloqueadas pelos softwares leitores de email, já que estão embutidas no código e não em servidores remotos.
require('lib/swift_required.php');
$transport = Swift_SmtpTransport::newInstance('smtp.gmail.com', 465, 'ssl')
->setUsername('usuario@gmail.com')
->setPassword('senha');
$mailer = Swift_Mailer::newInstance($transport);
$message = Swift_Message::newInstance('Assunto')
->setFrom(array('seuemail@dominio.com.br' => 'Seu Nome'))
->setTo(array('fulano@teste.com.br'))
->setReplyTo('seuemail@dominio.com.br');
$imagem_inline = $message->embed(Swift_Image::fromPath('logotipo.png'));
$message->setBody(
'<html>'.
' <head></head>'.
' <body>' .
' <img src="'.$imagem_inline.'" alt="Imagem embutida na mensagem" />'.
' <br /><br />Texto da mensagem'.
' </body>'.
'</html>',
'text/html' //Definimos o tipo da mensagem para text/html, ao invés de texto puro
);
if ($mailer->send($message)){
echo 'Mensagem enviada com sucesso';
}
else{
echo 'Problema ao enviar mensagem. Tente novamente mais tarde';
}
Enviando emails com anexo
require_once 'lib/swift_required.php';
$transport = Swift_SmtpTransport::newInstance('smtp.seudominio.com', 25)
->setUsername('seuemail@dominio.com')
->setPassword('senha');
$mailer = Swift_Mailer::newInstance($transport);
$message = Swift_Message::newInstance()
->setSubject('Email com PDF anexado')
->setFrom(array('seuemail@seudominio.com' => 'Seu nome'))
->setTo(array('contato1@teste.org', 'contato2@teste.org'))
->setBody('Leia a apostila em anexo')
->attach(Swift_Attachment::fromPath('apostilas/apostila_inicial.pdf'));
if ( ! $mailer->send($message)){
echo 'Erro ao enviar email';
}
Bom, esses foram alguns exemplos bem básicos do uso da biblioteca Swift Mailer. Consulte a documentação oficial para mais informações e um guia de referência completo.
Abraço e até a próxima!
Grande Jonnas!
Mais um da série “posts úteis, favorita aí”. Ajudou-me a migrar do PHPMailer, que estava dando problema de destinatário inválido. E, como tudo que é bom, o SwiftMailer tem plugin pro Yii Framework *____*.
Um abraço,
Não deu certo apresentou este erro
Warning: fsockopen() [function.fsockopen]: unable to connect to ssl://smtp.gmail.com:465 (Unable to find the socket transport “ssl” – did you forget to enable it when you configured PHP?) in C:wamp2wwwsmtpSwift-4.0.6Swift-4.0.6libclassesSwiftTransportStreamBuffer.php on line 233
Fatal error: Uncaught exception ‘Swift_TransportException’ with message ‘Connection could not be established with host smtp.gmail.com [Unable to find the socket transport \"ssl\" - did you forget to enable it when you configured PHP? #72449753]‘ in C:wamp2wwwsmtpSwift-4.0.6Swift-4.0.6libclassesSwiftTransportStreamBuffer.php:235 Stack trace: #0 C:wamp2wwwsmtpSwift-4.0.6Swift-4.0.6libclassesSwiftTransportStreamBuffer.php(70): Swift_Transport_StreamBuffer->_establishSocketConnection() #1 C:wamp2wwwsmtpSwift-4.0.6Swift-4.0.6libclassesSwiftTransportAbstractSmtpTransport.php(101): Swift_Transport_StreamBuffer->initialize(Array) #2 C:wamp2wwwsmtpSwift-4.0.6Swift-4.0.6libclassesSwiftMailer.php(74): Swift_Transport_AbstractSmtpTransport->start() #3 C:wamp2wwwsmtpSwift-4.0.6Swift-4.0.6emailgmail.php(21): Swift_Mailer->send(Object(Swift_Message)) #4 {main} thrown in C:wamp2wwwsmtpSwift-4.0.6Swift-4.0.6libclassesSwiftTransportStreamBuffer.php on line 235
tem como me ajudar?
@Valdivino Cara, acho que o problema está na configuração do seu PHP. Veja essa parte que está no meio do erro: [b]Unable to find the socket transport “ssl” – did you forget to enable it when you configured PHP? #72449753[/b]
Olá Jonnas,
Queria saber se o Valdivino resolveu o problema. Não tô sabendo como parametrizar isso no arquivo StreamBuffer.php na linha 233.
Jonnas, por favor, pode me ajudar?
Obrigado.
@Wanderley Esse problema ocorre devido a extensão OpenSSL não estar habilitada no seu arquivo de configuração [b]php.ini[/b]. Basta procurar por “openssl” no arquivo, descomentar a linha referente e reiniciar o Apache.
Jonnas! Executo o script e recebo o seguinte erro:
Warning: fsockopen() [function.fsockopen]: unable to connect to ssl://smtp.gmail.com:465 (Connection timed out) in /home/astrostu/public_html/swift/lib/classes/Swift/Transport/StreamBuffer.php on line 233
Fatal error: Uncaught exception ‘Swift_TransportException’ with message ‘Connection could not be established with host smtp.gmail.com [Connection timed out #110]‘ in /home/astrostu/public_html/swift/lib/classes/Swift/Transport/StreamBuffer.php:235 Stack trace: #0 /home/astrostu/public_html/swift/lib/classes/Swift/Transport/StreamBuffer.php(70): Swift_Transport_StreamBuffer->_establishSocketConnection() #1 /home/astrostu/public_html/swift/lib/classes/Swift/Transport/AbstractSmtpTransport.php(101): Swift_Transport_StreamBuffer->initialize(Array) #2 /home/astrostu/public_html/swift/lib/classes/Swift/Mailer.php(74): Swift_Transport_AbstractSmtpTransport->start() #3 /home/astrostu/public_html/envia-teste2.php(16): Swift_Mailer->send(Object(Swift_Message)) #4 {main} thrown in /home/astrostu/public_html/swift/lib/classes/Swift/Transport/StreamBuffer.php on line 235
Pode me ajudar com isso? Valeu!
Cara, sensacional essa dica. Acabe de testar para um cliente que esta hospedado na locaweb e usa o email do google.
Ai por conta do apontamento do MX, a locaweb nao deixa enviar os emails de forma alguma.
Fiz o teste e chegou rapidinho, e o melhor, a mensagem enviada fica salva na pasta de itens enviados do webmail. Sensacional
Belo post, funcionou perfeitamente. Entretanto existe um delay para chegar os e-mails onde posso ver isso?
PARABÉNS!!!
Muito bom, funcionou da forma que eu queria, obrigado!