/* Esta é uma continuação do post Enviando E-mail através do Zend_Mail */

Anexar arquivo não é uma tarefa muito fácil no envio de e-mail tradicional. Metade dos tutoriais na Web não funciona e a outra metade não é la estas coisas. Mais com o Zend esta tarefa ficou muito simples.

Para ajudar nesta tarefa temos o método createAttachment que possui a seguinte sintaxe:

public function createAttachment($body,
$mimeType = Zend_Mime::TYPE_OCTETSTREAM,
$disposition = Zend_Mime::DISPOSITION_ATTACHMENT,
$encoding = Zend_Mime::ENCODING_BASE64,
$filename = null)

No $body passamos o binário da imagem podendo esta ser carregado através do file_get_contents ou do fopen.

Em $mimeType passamos o tipo do arquivo, sendo os pricipais listados em http://plugindoc.mozdev.org/winmime.php ou em http://www.webmaster-toolkit.com/mime-types.shtml. POr exemplo, para PDF você deve usar "application/pdf" e se for excel pode usar "application/excel" ou "application/vnd.ms-excel" ou "application/x-excel" ou "application/x-msexcel".

No $disposition refere a forma com a qual o arquivo será anexado. Eu deixo este por padrão que é aceito sem problemas. O mesmo acontece com o $encoding que o melho é mesmo o Base64. E por ultimo o $filename que informamos o nome do arquivo.

Veja um exemplo:

<?php
require_once '../Config.php';
require_once 'Zend/Mail.php';
require_once 'Zend/Mime/Part.php';

$mail = new Zend_Mail();
$mail->createAttachment(file_get_contents("oti_imagem.jpg"),
'image/jpg',
Zend_Mime::DISPOSITION_ATTACHMENT,
Zend_Mime::ENCODING_BASE64,
"oti_imagem.jpg");
$mail->setFrom('fulano@servidor.com.br', 'Fulano')
->addTo('beltrano@gmail.com', 'Beltrano')
->setBodyText("Teste de mensagem")
->setSubject("Teste de assunto")
->send(Config::getMailInstance());

Neste a imagem ficará a disposição para download. Veja como chegou em meu Gmail:

13-email2

Unexar a imagem e apresentar no corpo do E-mail

Para anexar temos que criar um objeto do tipo Zend_Mime_Part e informar principalmente um ID para este elemento. é através deste ID que iremos chamar a imagem no HTML. Para anexar uma imagem e apresentar usamos como $disposition = Zend_Mime::DISPOSITION_INLINE para não aparecer na lista de download.

Para ID eu simplesmente chamo a função md5 na data atual com formatação ISO 8601. Então passamos este componente para a função addAttachment() conforme abaixo:

post13\index2.php
<?php
require_once '../Config.php';
require_once 'Zend/Mail.php';
require_once 'Zend/Mime/Part.php';

$mp = new Zend_Mime_Part(file_get_contents("oti_imagem.jpg"));
$mp->id = md5(date('c'));
$mp->encoding = Zend_Mime::ENCODING_BASE64;
$mp->type = 'image/jpg';
$mp->disposition = Zend_Mime::DISPOSITION_INLINE;

$mail = new Zend_Mail();
$mail->setFrom('fulano@servidor.com.br', 'Fulano')
->addTo('beltrano@gmail.com', 'Beltrano')
->setBodyHtml('<img src="cid:' . $mp->id . '" alt="">')
->setSubject("Teste de assunto")
->addAttachment($mp)
->send(Config::getMailInstance());

Veja abaixo o E-mail recebido em meu Gmail com uma imagem anexada apresentada no corpo da mensagem.

13-email

Baixe aqui todos os exemplos deste site.

Nenhum comentário

Deixe uma resposta