Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

anerao

Envio de e-mails com anexo em php

Recommended Posts

Olá :)

Eu tenho um formulário para enviar emails com anexados com PHP e funciona perfeitamente, porém, eu gostaria de remover o campo input file para que pegasse automaticamente um arquivo .doc que fica em uma pasta da minha hospedagem e enviasse esse arquivo como anexo. Isso é possível?

 

Procurei bastante mas não encontrei nada que me ajudasse. Obrigado :)

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Anerao.

 

Como você não postou seu código fica meio complicado ajudar, mas seguem algumas considerações:

 

Você deve estar utilizando algo assim para receber o arquivo:

	if (isset($_FILES['arquivo']) &&
		$_FILES['arquivo']['error'] == UPLOAD_ERR_OK){
		$ANEXO_NOME = $_FILES['arquivo']['tmp_name'];
		$ANEXO_PATH = $_FILES['arquivo']['name'];
	}

E enviando asssim:

sendMail($_POST['email'], $_POST['nome'], $ANEXO_NOME, $ANEXO_PATH);

Ou algo próximo à isso...

Bem, se você está usando isso fica fácil, pode remover o input file e atribuir diretamente seu arquivo, dessa maneira:

$ANEXO_NOME = "nome_do_arquivo.xls";
$ANEXO_PATH = $_SERVER['DOCUMENT_ROOT'] . "/seu_sub_diretorio/nome_do_arquivo.xls";

//e enviar:

sendMail("seuemail@seudominio.com.br", "Mensagem Automatica", $ANEXO_PATH, $ANEXO_NOME);

Veja bem, você pode precisar alterar o "$ANEXO_PATH" o diretório, pode ser que $_SERVER['DOCUMENT_ROOT'] não se aplique no seu caso. De qualquer modo, eu uso assim para anexar o arquivo que eu quiser automaticamente.

 

;)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Oi Diogo Libana :) As informações que você me passou foram suficientes para me ajudar e resolveu o meu problema. Muito obrigado :D

 

Vou deixar aqui o código, mas antes é necessário um pouco de atenção as seguintes notas:

 

1 - O arquivo enviado tem o nome salvo no banco de dados e foi enviado anteriormente, em outra página.

 

2 - Nessa página de enviar arquivos não há filtro para o arquivo anexado, pois o mesmo foi filtrado nos formatos permitidos e tamanho ao ser enviado para o meu servidor (e o nome passado para o campo desejado no meu banco)

 

3 - O código que vou deixar é de fácil customização. No momento ele conecta no banco de dados, faz um select para pegar o nome do arquivo no banco de dados e envia o e-mail com o anexo ao clicar no botão enviar.

<?php
session_start();

//Faz conexão com o banco de dados
include("conexao.php");

//Faz o select para pegar o nome do arquivo
$pega_dados = mysql_query("select * from nome_tabela where campo_id = '". mysql_real_escape_string($_SESSION['campo_id']) ."'");
$linha_dados = mysql_fetch_array($pega_dados);

$ANEXO_NOME = $linha_dados['nome_arquivo'];

$ANEXO_PATH = $_SERVER['DOCUMENT_ROOT'] . "/pasta_arquivos/". $linha_dados['nome_arquivo'];

//Caso clicar no botão enviar, executa...
if(isset($_POST['enviar_email'])) {

//Algumas informações do e-mail
$Nome = "Meu Nome";
$Email = "email@email.com";

//Dados do Email a ser enviado
$Para = "mail@mail.com";
$Assunto = "Assunto";

//Recebe o anexo
$Arquivo = isset($ANEXO_PATH) ? $ANEXO_PATH : FALSE;


      //Armazena o arquivo anexo para envio
      $fp = fopen($ANEXO_PATH,"rb");
      $Anexo = fread($fp,filesize($ANEXO_PATH));
      $Anexo = base64_encode($Anexo);

      fclose($fp);
      $Anexo = chunk_split($Anexo);

      //Monta e-mail para envio com anexo
      $boundary = "XYZ-" . date("dmYis") . "-ZYX";

      $Corpo = "--$boundary\n";
      $Corpo .= "Content-Transfer-Encoding: 8bits\n";
      $Corpo .= "Content-Type: text/html; charset=\"ISO-8859-1\"\n\n"; //plain
      $Corpo .= "$mensagem\n";
      $Corpo .= "--$boundary\n";
      
      $Corpo .= "Content-Disposition: attachment; filename=\"".$ANEXO_NOME."\"\n";
      $Corpo .= "Content-Transfer-Encoding: base64\n\n";
      $Corpo .= "$Anexo\n";
      $Corpo .= "--$boundary--\r\n";

      //Cabeçalho
      $Headers = "MIME-Version: 1.0\n";
      $Headers .= "From: \"$Nome\" <$Email>\r\n";
      $Headers .= "Content-type: multipart/mixed; boundary=\"$boundary\"\r\n";
      $Headers .= "$boundary\n";

      //envio o email com o anexo
      mail($Para,$Assunto,$Corpo,$Headers);

}
?>

<html><head><title></title>


</head>

<body>


<form method="post" action="teste.php" enctype="multipart/form-data">
<input type="submit" name="enviar_email" value="Enviar" />

</form>

Espero que isso possa ajudar alguém um dia :)

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.