Jump to content
Fórum Script Brasil
  • 0

email com anexo


fabiosanches

Question

ae galera.. segua abaixo o script q eu peguei aki mesmo no forum.. tipo.. ele envia o e-mail e um anexo la.. so q não vem a foto q eu mando.. vem um arquivo noname totalmente vazio sem conteudo.. q q pode estar acontecendo???

envia.php

<?php

//pego os dados enviados pelo formulario
$nome = $_POST["nome"];
$email = "fabiosanches@gmail.com";
//$email = $_POST["email"];
$mensagem = $_POST["mensagem"];
$assunto = $_POST["assunto"];
$email_from = $_POST["email_from"];

//formato o campo da mensagem
$mensagem = wordwrap( $mensagem, 50, "<br>", 1);
/*
//valido os emails
if (!ereg("^([0-9,a-z,A-Z]+)([.,_]([0-9,a-z,A-Z]+))*[@]([0-9,a-z,A-Z]+)([.,_,-]([0-9,a-z,A-Z]+))*[.]([0-9,a-z,A-Z]){2}([0-9,a-z,A-Z])?$", $email)){

echo"<center>Digite um email valido</center>";
echo "<center><a href=\"java script:history.go(-1)\">Voltar</center></a>";
exit;

}

if (!ereg("^([0-9,a-z,A-Z]+)([.,_]([0-9,a-z,A-Z]+))*[@]([0-9,a-z,A-Z]+)([.,_,-]([0-9,a-z,A-Z]+))*[.]([0-9,a-z,A-Z]){2}([0-9,a-z,A-Z])?$", $email_from)){

echo "<center>Digite um email valido</center>";
echo "<center><a href=\"java script:history.go(-1)\"><center>Voltar</center></a>";
exit;

}

*/
$arquivo = isset($_FILES["arquivo"]) ? $_FILES["arquivo"] : FALSE;

if(file_exists($arquivo["tmp_name"]) and !empty($arquivo)){

$fp = fopen($_FILES["arquivo"]["tmp_name"],"rb");
$anexo = fread($fp,filesize($_FILES["arquivo"]["tmp_name"]));
$anexo = base64_encode($anexo);

fclose($fp);

$anexo = chunk_split($anexo);


$boundary = "XYZ-" . date("dmYis") . "-ZYX";

$mens = "--$boundary\n";
$mens .= "Content-Transfer-Encoding: 8bits\n";
$mens .= "Content-Type: text/html; charset=\"ISO-8859-1\"\n\n"; //plain
$mens .= "$mensagem\n";
$mens .= "--$boundary\n";
$mens .= "Content-Type: ".$arquivo["type"]."\n";
$mens .= "Content-Disposition: attachment; filename=\"".$arquivo["name"]."\"\n";
$mens .= "Content-Transfer-Encoding: base64\n\n";
$mens .= "$anexo\n";
$mens .= "--$boundary--\r\n";

$headers = "MIME-Version: 1.0\n";
$headers .= "From: \"$nome\" <$email_from>\r\n";
$headers .= "Content-type: multipart/mixed; boundary=\"$boundary\"\r\n";
$headers .= "$boundary\n";

//envio o email com o anexo
mail($email,$assunto,$mens,$headers);

echo"Email enviado com Sucesso!";

}

//se não tiver anexo
else{

$headers = "MIME-Version: 1.0\r\n";
$headers .= "Content-type: text/html; charset=iso-8859-1\r\n";
$headers .= "From: \"$nome\" <$email_from>\r\n";

//envia o email sem anexo
mail($email,$assunto,$mensagem, $headers);

echo"Email enviado com Sucesso!";

}

?>[/codebox]

emailanexo.php

[codebox]<html>
<head>
<script language="javascript" type="text/javascript">

function checa_formulario(email){

if (email.nome.value == ""){
alert("Por Favor não deixe o seu nome em branco!!!");
email.nome.focus();
return (false);
}

if (email.email_from.value == ""){
alert("Por Favor não deixe o seu email em branco!!!");
email.email_from.focus();
return (false);
}

if (email.email.value == ""){
alert("não deixe o email destinatario em branco!!!");
email.email.focus();
return (false);
}

if (email.assunto.value == ""){
alert("não deixe o assunto em branco!!!");
email.assunto.focus();
return (false);
}

}
</script>
<title>Enviando texto</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<style type="text/css">
<!--
.email {
text-transform: lowercase;
}
.texto {
color: #0000FF
}
.style1 {
color: #000000;
font-size: 14px;
}
.style3 {color: #000000; font-size: 14px; font-weight: bold; }

-->
</style>
</head>

<body onLoad="document.email.nome.focus();">
<form onSubmit="return checa_formulario(this)" action="envia.php" method="post" enctype="multipart/form-data" name="email">
<h1 align="center" class="style1">Envie a foto de Seu Ve&iacute;culo para n&oacute;s e entraremos em contato </h1>
<table width="32%" border="0" align="center">
<tr>
<td><div align="right" class="style3">Nome</div></td>
<td><input name="nome" type="text" id="nome" size="50"></td>
</tr>
<tr>
<td width="33%"><div align="right" class="style3">De:</div></td>
<td width="67%"><input name="email_from" type="text" class="email" size="50"></td>
</tr>
<tr>
<td><div align="right" class="style3">Assunto</div></td>
<td><input name="assunto" type="text" id="assunto" size="50"></td>
</tr>
<tr>
<td><div align="right" class="style3">Mensagem</div></td>
<td><textarea name="mensagem" cols="50" rows="10" id="mensagem"></textarea></td>
</tr>
<tr>
<td><div align="right" class="style3">Anexo</div></td>
<td><input name="arquivo" type="file"></td>
</tr>
<tr>
<td> </td>
<td><input type="submit" name="Submit" value="Enviar"></td>
</tr>
</table>
</form>
</body>
</html>

Link to comment
Share on other sites

11 answers to this question

Recommended Posts

  • 0

usa a função move_uploaded_file()

Olha esse meu script aki de upload de imagens:

<table border="1">
<tr>
<td>
<form action="index.php" method="post" enctype="multipart/form-data">
Envie um arquivo:
<input type="file" name="foto"><br>
<input type="submit" value="Enviar Foto">
</form>
</td>
</tr>
<tr>
<td><hr></td>
</tr>
<tr>
<td>
<?php
// verifica se existe a variavel
if(isset($_FILES['foto'])) {
// atribui o valor da variavel para $arq
$arq = $_FILES['foto'];
// verifica se foi enviado algum arquivo
if($arq == "") {
// define os tamnhos de configuração das variaveis
// para verificação
$tamanho = 100000000;
$largura = 1024;
$altura = 1024;

// verifica se o tipo do arquivo
if(eregi("^image\/(jpeg|jpg|gif|png)$",$arq["type"])) {
// verifica o tamanho do arquivo
if($arq["size"] <= $tamanho) {
// atribui as dimensões do arquivo para a variavel
$dimensoes = getimagesize($arq["tmp_name"]);
// verifica a largura do arquivo
if($dimensoes[0] <= $largura) {
// verifica a altura do arquivo
if($dimensoes[1] <= $altura) {
// pega a extenção do arquivo
preg_match("/\.(gif|png|jpeg|jpg){1}$/i", $arq["name"],$ext);
// gera um nome unico para o arquivo
$imagem_nome = md5(uniqid(time())).".".$ext[1];
// informa o caminho onde o arquivo vai ser colocado
$imagem_dir = "fotos/".$imagem_nome;
// faz upload do arquivo
$upload = move_uploaded_file($arq["tmp_name"],$imagem_dir);
// verifica se o arquivo foi uploadiado
if($upload) {
echo "Upload da imagem feito com sucesso!";
} else {
echo "Não foi possivel fazer o upload da imagem!";
}
} else {
echo "A altura do arquivo é invalida!";
echo "Altura permitida: 1024";
}
} else {
echo "A altura do arquivo é invalida!";
echo "Altura permitida: 1024";
}
} else {
echo "Tamanho de arquivo invalido!";
echo "Suportado ate: 1GB";
}
} else {
echo "Formato de arquivo invalido!<br>";
echo "Suportados: jpeg, jpg, png, gif";
}
} else {
echo "Nenhum arquivo enviado!";
}
}
?>
</td>
</tr>
</table>[/codebox]

Link to comment
Share on other sites

  • 0

tipo cara.. beleza.. mais o script q eu peguei peguei aki mesmo no forum e o pessoal falou q funciona direito.. quero saber o q q pode tar acontecendo.. sem talvez precisar jogar esse arquivo pra um servidor primeiro e depois enviar o e-mail.. acho q talvez seja um processo desnecessario sacou?

Link to comment
Share on other sites

  • 0

Cara eu to com um prolema parecido.

Eu pequei esse mesmo escript para uso no meu sistema , mas no meu caso ue não tenho um servidor de email configurado, então tenho que usar um externo por isso tivew que mudar o cadigo para usar SMTP.

O problem que to tendo é o seguinte: qundo mando o e-mail, vai tudo beleze e o anexo ate chega, mas chega sem o nome e quando tento abri, fala que a visualização do aquivo não é possivel.

Esse é o codigo que to usando:


<?php
$servidor= ""; // nome do servidor
$porta = 25; // número da porta, o email sempre fica na 25
$timeout = 10; // tempo para expirar a tentativa de conexão
//pego os dados enviados pelo formulario
$nome = "";//Nome de quem enviou
$email = "";//para
$mensagem =$_POST['mensagem'];//Menssagem
$assunto = "Feliz Anivesário";
$email_from = "";//email de quem enviou
// abre conexão com o servidor SMTP utilizando a função fsockopen
$conexao = @fsockopen($servidor, $porta, $errno, $errstr, $timeout);
// se houve erro a variável $errno vem ligada
if ($errno){
echo "Erro ao conectar ao $servidor na $porta: ".$errstr;
exit;
}
// estabelece um email de retorno para receber msgs de erro
fputs($conexao, "MAIL FROM:<$email_from>\r\n", 512);
// estabelece o endereço de envio
fputs($conexao, "RCPT TO:<$email>\r\n", 512);
// comanda o inicio do email a ser enviado
fputs($conexao, "DATA\r\n", 512);
//formato o campo da mensagem
$mensagem = wordwrap( $mensagem, 50, "<br>", 1);
$arquivo = isset($_FILES["arquivo"]) ? $_FILES["arquivo"] : FALSE;
if(file_exists($arquivo["tmp_name"]) and !empty($arquivo)){
echo "o arquivo ".$arquivo["name"]." existe. Tamanho do arquivo: ".$arquivo["size"];
$fp = fopen($_FILES["arquivo"]["tmp_name"],"rb");
$anexo = fread($fp,filesize($_FILES["arquivo"]["tmp_name"]));
$anexo = base64_encode($anexo);
fclose($fp);
$anexo = chunk_split($anexo);
$boundary = "XYZ-" . date("dmYis") . "-ZYX";
fputs($conexao, "MIME-Version: 1.0\r\n");
fputs($conexao, "Content-type: multipart/mixed; boundary=\"$boundary\"\r\n");
fputs($conexao, "--$boundary\n");
fputs($conexao, "Content-Transfer-Encoding: 8bits\n");
fputs($conexao, "Content-Disposition: attachment; filename=\"".$arquivo["name"]."\"\n");
fputs($conexao, "Content-Transfer-Encoding: base64\n\n");
fputs($conexao, "$anexo\n");
fputs($conexao, "$boundary\n");
fputs($conexao, "From: <$email_from>\r\n");
fputs($conexao, "To:<$email>\r\n");
fputs($conexao, "Subject: $assunto\r\n");
fputs($conexao, "Content-Type: ".$arquivo["type"]."\n");
fputs($conexao, "\r\n");
fputs($conexao, "$mensagem\r\n.\r\n");
// encerra a conexão com o servidor
fputs($conexao, "QUIT\r\n", 512);
fclose($conexao);
exit;
}
?>


[/codebox]

Link to comment
Share on other sites

  • 0
Cara eu to com um prolema parecido.

Eu pequei esse mesmo escript para uso no meu sistema , mas no meu caso ue não tenho um servidor de email configurado, então tenho que usar um externo por isso tivew que mudar o cadigo para usar SMTP.

O problem que to tendo é o seguinte: qundo mando o e-mail, vai tudo beleze e o anexo ate chega, mas chega sem o nome e quando tento abri, fala que a visualização do aquivo não é possivel.

Esse é o codigo que to usando:


<?php
$servidor= ""; // nome do servidor
$porta = 25; // número da porta, o email sempre fica na 25
$timeout = 10; // tempo para expirar a tentativa de conexão
//pego os dados enviados pelo formulario
$nome = "";//Nome de quem enviou
$email = "";//para
$mensagem =$_POST['mensagem'];//Menssagem
$assunto = "Feliz Anivesário";
$email_from = "";//email de quem enviou
// abre conexão com o servidor SMTP utilizando a função fsockopen
$conexao = @fsockopen($servidor, $porta, $errno, $errstr, $timeout);
// se houve erro a variável $errno vem ligada
if ($errno){
echo "Erro ao conectar ao $servidor na $porta: ".$errstr;
exit;
}
// estabelece um email de retorno para receber msgs de erro
fputs($conexao, "MAIL FROM:<$email_from>\r\n", 512);
// estabelece o endereço de envio
fputs($conexao, "RCPT TO:<$email>\r\n", 512);
// comanda o inicio do email a ser enviado
fputs($conexao, "DATA\r\n", 512);
//formato o campo da mensagem
$mensagem = wordwrap( $mensagem, 50, "<br>", 1);
$arquivo = isset($_FILES["arquivo"]) ? $_FILES["arquivo"] : FALSE;
if(file_exists($arquivo["tmp_name"]) and !empty($arquivo)){
echo "o arquivo ".$arquivo["name"]." existe. Tamanho do arquivo: ".$arquivo["size"];
$fp = fopen($_FILES["arquivo"]["tmp_name"],"rb");
$anexo = fread($fp,filesize($_FILES["arquivo"]["tmp_name"]));
$anexo = base64_encode($anexo);
fclose($fp);
$anexo = chunk_split($anexo);
$boundary = "XYZ-" . date("dmYis") . "-ZYX";
fputs($conexao, "MIME-Version: 1.0\r\n");
fputs($conexao, "Content-type: multipart/mixed; boundary=\"$boundary\"\r\n");
fputs($conexao, "--$boundary\n");
fputs($conexao, "Content-Transfer-Encoding: 8bits\n");
fputs($conexao, "Content-Disposition: attachment; filename=\"".$arquivo["name"]."\"\n");
fputs($conexao, "Content-Transfer-Encoding: base64\n\n");
fputs($conexao, "$anexo\n");
fputs($conexao, "$boundary\n");
fputs($conexao, "From: <$email_from>\r\n");
fputs($conexao, "To:<$email>\r\n");
fputs($conexao, "Subject: $assunto\r\n");
fputs($conexao, "Content-Type: ".$arquivo["type"]."\n");
fputs($conexao, "\r\n");
fputs($conexao, "$mensagem\r\n.\r\n");
// encerra a conexão com o servidor
fputs($conexao, "QUIT\r\n", 512);
fclose($conexao);
exit;
}
?>


[/codebox]

Cara eu consegui resolver aqui, no meu caso eu tava fazendo errado, tava colocando os cabeçalho que montam o corpo do emial, junto com o cabeçalho do proprio e-mail, vou colocar aqui o pedaço do codigo que eu corrigi:

fclose($fp);

$anexo = chunk_split($anexo);

$boundary = "XYZ-" . date("dmYis") . "-ZYX";

$mens = "--$boundary\n";

$mens .= "Content-Transfer-Encoding: 8bits\n";

$mens .= "Content-Type: text/html; charset=\"ISO-8859-1\"\n\n"; //plain

$mens .= "$mensagem\n";

$mens .= "--$boundary\n";

$mens .= "Content-Type: ".$arquivo["type"]."\n";

$mens .= "Content-Disposition: attachment; filename=\"".$arquivo["name"]."\"\n";

$mens .= "Content-Transfer-Encoding: base64\n\n";

$mens .= "$anexo\n";

$mens .= "--$boundary--\r\n";

$mensagem =$mensagem.$mens;

fputs($conexao, "MIME-Version: 1.0\r\n");

fputs($conexao, "Content-type: multipart/mixed; boundary=\"$boundary\"\r\n");

//fputs($conexao, "Content-Type: ".$arquivo["type"]."\n");

fputs($conexao, "From: <$email_from>\r\n");

fputs($conexao, "To:<$email>\r\n");

fputs($conexao, "Subject: $assunto\r\n");

fputs($conexao, "\r\n");

fputs($conexao, "$mensagem\r\n.\r\n");

fputs($conexao, "--$boundary\n");

//fputs($conexao, "Content-Transfer-Encoding: 8bits\n");

//fputs($conexao, "Content-Disposition: attachment; filename=\"".$arquivo["name"]."\"\n");

//fputs($conexao, "Content-Transfer-Encoding: base64\n\n");

//fputs($conexao, "$anexo\n");

fputs($conexao, "$boundary\n");

// encerra a conexão com o servidor

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      152k
    • Total Posts
      651.6k
×
×
  • Create New...