Jump to content
Sign in to follow this  
Vitor Bueno

Enviando Email com anexo sem Input File.

Recommended Posts

Bom dia Pessoal,

Estou com uma duvida, eu consigo enviar um arquivo em anexo por email no PHP usando o input file, gostaria de saber se tem como eu enviar esse anexo sem o input File, apenas direcionando o caminho aonde está salvo meu arquivo, para subir com input file estou usando essa função :

 

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

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

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

fclose($fp);

$anexo = chunk_split($anexo);

 

Agora sem o input file, estou usando essa função:

while($contaarray<$contaarquivos){
$fp = fopen("arquivos_contas/".$arrayanexo[$contaarray],"rb");
$anexoarray = fread($fp,filesize("arquivos_contas/".$arrayanexo[$contaarray]));
$anexoarray = base64_encode($anexoarray);
$anexo.=$anexoarray;

fclose($fp);

$contaarray=$contaarray+1;
}

$anexo = chunk_split($anexo);

 

Neste código acima, informo a pagina aonde esta salvo meu arquivo, que no caso e este array, só que quando realizo o envio assim , ele envia apenas um TXT com varias strings sem sentido, gostaria de saber se e possível realizar envio de email com anexo apenas informando aonde esta meu arquivo , sem precisar usar input file.

Obrigado, Aguardo respostas.

Share this post


Link to post
Share on other sites

Basta passar o caminho até a arquivo:

$fp = fopen('caminho/ate/o/arquivo.txt',"rb");
  • +1 1

Share this post


Link to post
Share on other sites

 

Basta passar o caminho até a arquivo:

$fp = fopen('caminho/ate/o/arquivo.txt',"rb");

 

 

E serra, esse meu arquivo no caso não esta no computador está no servidor,

eu coloquei assim no caminho

 

$fp = fopen('http:www.link.com.br/pastasistema/pastaarquivo/arquivo.txt',"rb");

 

e mesmo assim não vai, no caso ele vai, mas apenas como txt, ele transforma um arquivo jpg ou pdf, ou de qualquer outra extensão em um TXT com varias letras e números sem sentindo, como se estive abrindo um arquivo XLS com o notepad do computador , será que não e possível anexar um arquivo no envio de email PHP sem ser por input file ?

 

Share this post


Link to post
Share on other sites

Olha só o que eu coloquei:

$fp = fopen('caminho/ate/o/arquivo.txt',"rb");

Agora olha o que você colocou:

$fp = fopen('http:www.link.com.br/pastasistema/pastaarquivo/arquivo.txt',"rb");

Notou alguma diferença? Sim! não tem www... porque se você passar www.link.com.br no fopen você dependerá de allow_url_fpoen ativa no servidor, se você passar apenas o caminho relativo dentro do próprio servidor, ai não via precisar, por exemplo, assumindo que o arquivo php que processa o email esteja dentro da pasta "pastasistema", você passaria o caminho relativo:

$fp = fopen('pastaarquivo/arquivo.txt',"rb");

Você também pode trabalhar com caminho absoluto.

  • +1 1

Share this post


Link to post
Share on other sites

Olha só o que eu coloquei:

$fp = fopen('caminho/ate/o/arquivo.txt',"rb");

Agora olha o que você colocou:

$fp = fopen('http:www.link.com.br/pastasistema/pastaarquivo/arquivo.txt',"rb");

Notou alguma diferença? Sim! não tem www... porque se você passar www.link.com.br no fopen você dependerá de allow_url_fpoen ativa no servidor, se você passar apenas o caminho relativo dentro do próprio servidor, ai não via precisar, por exemplo, assumindo que o arquivo php que processa o email esteja dentro da pasta "pastasistema", você passaria o caminho relativo:

$fp = fopen('pastaarquivo/arquivo.txt',"rb");

Você também pode trabalhar com caminho absoluto.

 

 

 

Cara coloquei assim também, e acontece a mesma coisa, se você reparar no meu primeiro post, que mostro o Envio de Anexo com INPUT file, você pode reparar que ele não usa o nome do arquivo que esta sendo selecionado, ele usa o tmp_name, que e o nome do arquivo no servidor wamp. que vai me retornar :

X:\wamp\tmp\php8E7D.tmp ou outro nome random que cria na hora, e como faço isso para um arquivo que já foi realizado o upload, já está na pasta , no caso eu estava usando apenas essa função e mesmo assim não estava indo o arquivo jpg ou pdf, transforma em TXT e com conteúdo estranho .

 

while($contaarray<$contaarquivos){

//aqui eu busco o arquivo na pasta , que no caso meu arquivo esta no array

$fp = fopen("arquivos_contas/".$arrayanexo[$contaarray],"rb");

$anexoarray = fread($fp,filesize("arquivos_contas/".$arrayanexo[$contaarray]));

$anexoarray = base64_encode($anexoarray);

$anexo.=$anexoarray;

 

fclose($fp);

 

$contaarray=$contaarray+1;

}

 

$anexo = chunk_split($anexo);

Share this post


Link to post
Share on other sites
X:\wamp\tmp\php8E7D.tmp

é o caminho absoluto...

 

Basta você passar o caminho até a pasta, você pode utilizar realpath para pegar o caminho absoluto.

  • +1 1

Share this post


Link to post
Share on other sites
X:\wamp\tmp\php8E7D.tmp

é o caminho absoluto...

 

Basta você passar o caminho até a pasta, você pode utilizar realpath para pegar o caminho absoluto.

 

isso cara, funcionou , Obrigado ;D

 

mas com um porem, ele sobe apenas um arquivo , no caso o ultimo

 

<?

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

 

$mensadd .= "Content-Type: ".$tipoarquivo."" . $quebra_linha . "";

$mensadd .= "Content-Disposition: attachment; filename=\"".$arquivo."\"" . $quebra_linha . "";

$mensadd .= "Content-Transfer-Encoding: base64" . $quebra_linha . "" . $quebra_linha . "";

$mensadd .= "$anexo" . $quebra_linha . "";

$mensadd .= "--$boundary--" . $quebra_linha . "";

 

?>

 

estou usando o codigo acima, tem que ser diferente para ir mais de 1 arquivo?

Edited by Vitor Bueno

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.