Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Criei um formulário, e preciso que ele me envie os dados no corpo do e-mail e um arquivo em anexo para meu e-mail.
O código que estou utilizando é este abaixo, porém ele dá o seguinte erro:
Warning: fopen() [function.fopen]: Filename cannot be empty in /home/storage/4/1d/58/p-diariooficial/public_html/cadastro.php on line 19
Warning: fread(): supplied argument is not a valid stream resource in /home/storage/4/1d/58/p-diariooficial/public_html/cadastro.php on line 20
Warning: fclose(): supplied argument is not a valid stream resource in /home/storage/4/1d/58/p-diariooficial/public_html/cadastro.php on line 22
Alguém sabe o que fazer pra tirar esse erro?
<?php
//resgata o que foi enviado do formulário
$nome = $_POST['nome'];
$telefone = $_POST['telefone'];
$email = $_POST['email'];
$ddd = $_POST['ddd'];
$estado = $_POST['estado'];
$descricao = $_POST['descricao'];
$arquivo = $_FILES["arquivo"];
$assunto = "assunto email";
//para quem vai ser enviado o e-mail
$para = "lucas.schovepper@gmail.com.br";
$boundary = "XYZ-".date(dmYis)."-ZYX";
$fp = fopen($arquivo["tmp_name"], "rb"); //abre o arquivo enviado
$anexo = fread($fp, filesize($arquivo["tmp_name"])); //pega sua largura
$anexo = base64_encode($anexo); //codifica para base 64
fclose($fp); //fecha a conexão
$corpoMSG = "<strong>Nome: </strong> $nome <br> <strong>Telefone: </strong> $telefone <br> <strong>Email: </strong> $email <br> <strong>DDD: </strong> $ddd <br> <strong>Estado: </strong> $estado <br> <strong>Descricao: </strong> $descricao <br>\r\n";
$headers = "Content-Type: ".$arquivo["type"]."; name=\"".$arquivo['name']."\" \n";
$headers .= "Content-Transfer-Encoding: base64 \n";
$headers .= "Content-Disposition: attachment; filename=\"".$arquivo['name']."\" \r\n";
$headers .= "$anexo \n";
$headers .= "From: Top Revendas 2011 <editoralumiere@editoralumiere.com.br>\r\n";
$headers .= "MIME-Version: 1.0 \r\n";
$headers .= "Content-Type: text/html; charset=\"iso-8859-1\" \n";
$headers .= "Content-Transfer-Encoding: 8bit";
$headers .= "--Message-Boundary--\n";
//envia o e-mail
mail($para, $assunto, $corpoMSG, $headers);
?>$anexo = chunk_split(base64_encode($anexo)); //codifica para base 64
eu boto esse código no lugar deste:
$anexo = base64_encode($anexo); //codifica para base 64
ou onde boto esse código?
Colega segue uma classe pronta que realiza o envio de anexo, da olhada:
<?php
/**
* Send email with attachment
*
* @package Mail_attach
* @author Paulo Andre G Rodrigues <pauloandreget@gmail.com>
* @link http://www.paulorodrigues.eti.br
* @since February 12, 2010
* @version 20100212
*
*
* @author Wesley David Santos wesleydavidsantos@gmail.com
* @alteração Envio de anexo hospedado no servidor
* @data Outubro 21, 2011
*
*
*/
// ------------------------------------------------------------------------
class Mail_attach {
// Array with allowed mime type of attachment files
private $mime_files = array(
"html" => "text/html",
"htm" => "text/html",
"txt" => "text/plain",
"rtf" => "text/enriched",
"csv" => "text/tab-separated-values",
"css" => "text/css",
"gif" => "image/gif",
"jpg" => "image/pjpeg",
"png" => "image/png"
);
/**
* Send email
*
* @access public
* @param array||boolean
* @return boolean
*/
public function sendMail($from, $to, $subject, $message, $file = ''){
$headers = "MIME-Version: 1.0\n";
//$headers .= "Content-Type: text/html; charset=utf-8\n";
$headers .= "Content-type: multipart/mixed; boundary=XYZ-" . date('dmyhms') . "-ZYX\r\n";
$headers .= "Content-Transfer-Encoding: 8bits\n";
$uid = md5(uniqid(time()));
$header .= "From: ".FROM_RETORNO."\r\n";
$header .= "Reply-To: ".EMAIL_RETORNO."\r\n";
$header .= "MIME-Version: 1.0\r\n";
$header .= "Content-Type: multipart/mixed; boundary=".$uid."\r\n\r\n";
$header .= "This is a multi-part message in MIME format.\r\n";
$header .= "--".$uid."\r\n";
$header .= "Content-type:text/html; charset=iso-8859-1\r\n";
$header .= "Content-Transfer-Encoding: 8bit\r\n\r\n";
$header .= $message."\r\n\r\n";
$header .= "--".$uid."\r\n";
if($file != ''){
$filename = $file;
$file = "download/anexo/".$file; /* Diretorio localizado na raiz */
$file_size = filesize($file);
$handle = fopen($file, "r");
$content = fread($handle, $file_size);
fclose($handle);
$content = chunk_split(base64_encode($content));
$name = basename($file);
$header .= "Content-Type: application/octet-stream; name=".$filename."\r\n"; // use different content types here
$header .= "Content-Transfer-Encoding: base64\r\n";
$header .= "Content-Disposition: attachment; filename=".$filename."\r\n\r\n";
$header .= $content."\r\n\r\n";
$header .= "--".$uid."--";
}
if(mail($to, $subject, "", $header)) {
return true;
} else {
return false;
}
}
}
/ End of file Mail_attach.php /
/ Location: ./mail/class/Mail_attach.php /
Wesley david me diga uma coisa:
No final desse codigo que voce colocou não deveria ter algo tipo isso: "?>" ?
Tentei mas esta dando erro a bessa!
Outra coisa, em que parte desse codigo que voce postou que a pessoa poe o destinatario?
Não é necessário fechar a tag "?>", me apresente o tipo de erro que está ocorrendo para que eu possa te ajudar da melhor forma.
começa trantando esse erro primeiro
Warning: fopen() [function.fopen]: Filename cannot be empty in /home/storage/4/1d/58/p-diariooficial/public_html/cadastro.php on line 19
veja se o arquivo é valido, se existe
Tente trocar o parametro "rb" por apenas "r"
$fp = fopen($arquivo["tmp_name"], "r"); //abre o arquivo enviado
E adicione chunk_split
$anexo = chunk_split(base64_encode($anexo)); //codifica para base 64