Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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.
>
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 ?
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.
>
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);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.
>
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?
Basta passar o caminho até a arquivo:
$fp = fopen('caminho/ate/o/arquivo.txt',"rb");