Ir para conteúdo

Arquivado

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

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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Basta passar o caminho até a arquivo:

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

Compartilhar este post


Link para o post
Compartilhar em outros 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 ?

 

Compartilhar este post


Link para o post
Compartilhar em outros 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.

Compartilhar este post


Link para o post
Compartilhar em outros 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);

Compartilhar este post


Link para o post
Compartilhar em outros 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.

Compartilhar este post


Link para o post
Compartilhar em outros 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?

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.