/* 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:
<?php 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:
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:
post10013\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.