Enviando e-mails com anexos

Author: Reinaldo Borges

Para anexar arquivos em e-mails é preciso enviar emails MIME com várias partes. A primeira parte é o corpo do email, e normalmente é em HTML e as outras partes são os anexos.

Você também precisa criar uma string que indique a separação entre as partes, e precisa indicar o Content-Type de cada parte.

Os anexos precisam ser codificados em base64 para evitar problemas ao enviar o email.

Veja o código de exemplo:

PHP:
<?php
/**
MONTANDO EMAIL
*/

$from = "eu@meusite.com";
$to = "eu@meusite.com";
$subject = "Assunto do email";
$headers = "From: {$from}\r\nReply-To: {$from}";
/**
CRIANDO UM MARCADOR DE PARTES DO EMAIL MIME
*/

$boundary = "ReinaldoBorges".md5(date("YmdHis"));
/**
HEADERS INDICANDO QUE É UM EMAIL MIME
*/

$headers .= "\r\nMIME-Version: 1.0";
$headers .= "\r\nContent-Type: multipart/mixed; boundary=\"{$boundary}\";";
$headers .= "\r\nContent-Transfer-Encoding: 7bit";
$headers .= "\r\nX-Mailer: PHP/".phpversion();
$msg = "";
/**
MENSAGEM HTML
*/

$msg .= "--{$boundary}\r\n";
$msg .= "Content-Type: text/html; charset=\"iso-8859-1\"\r\n";
$msg .= "Content-Transfer-Encoding: 7bit\r\n\r\n";
$msg .= "
Texto da mensagem HTML
Imagem anexada aparecendo no corpo do email:
<img src=\"cid:anexo1\"/>
E-Mail Automático enviado em "
.date('d/m/Y H:i:s')."
"
;
$msg .= "\r\n";
$count = 0;
/**
BUSCANDO ANEXO 01
E CONVERTENDO PARA BASE64
*/

$count++;
$anexo_nome = "imagem.jpg";
$anexo = file_get_contents( $anexo_nome );
$anexo = chunk_split( base64_encode( $anexo ) );
$msg .= "--{$boundary}\r\n";
$msg .= "Content-Type: image/jpeg; name=\"{$anexo_nome}\";\r\n";
$msg .= "Content-Transfer-Encoding: base64\r\n";
$msg .= "Content-Disposition: attachment\r\n";
$msg .= "Content-ID: \r\n\r\n";
$msg .= $imagemsg;
$msg .= "\r\n";
$msg .= "--{$boundary}--\r\n";
/**
AQUI VOCÊ PODE ACRESCENTAR QUANTOS ANEXOS QUISER
Lembre-se apenas de colocar o tipo correto em "Content-Type"
*/

/**
FIM DA MENSAGEM
*/

mail($to,$subject,$msg,$headers);
?>

Leave a Comment

Please note: Comment moderation is enabled and may delay your comment. There is no need to resubmit your comment.