Jump to content
schmidt.pvh

Envio de email com a função mail(), redimencionando as imagens com cod

Recommended Posts

Boa tarde galera... estou tentando criar uma aplicação de envio de mensagem com anexo usando a função do php Mail().

Até ai de boa... Resolvi fazer algo para redimensionar os anexos, visando que meus usuarios serão em sua grande maioria mobile.

Com um pouco de pesquisa, consegui um tutorial com funções em javascript que faz isso de boa. Essa parte tbem esta funfando conforme a ideia... redimensionando as imagens e salvando em uma pasta do meu host... agora a duvida éh... como faço para buscar os arquivos que estão em um diretorio do meu host, e anexa-las nesse email???

Share this post


Link to post
Share on other sites

Beraldo... bom dia... Antes de mais nada obrigado pela atenção.

 

então eu tentei usar o scandir(), porém não sei como acesso as informações do arquivo, tipo tmp_name, type, size...

 

no cabeçalho do email quando vou anexar os arquivos, passo essas informações.

Share this post


Link to post
Share on other sites

tmp_name, name, type, size e error são índices do array $_FILES, que só existe em upload via POST.

Se o arquivo já está no servidor, não há upload e, logo, não há esses valores.

Você precisa usar as funções de Filesystem que passei no post anterior

 

Tamanho de arquivo: filesize()

Nome do arquivo: será retornado por scandir(), glob() e funções afins

Mime-type: finfo_file(). Veja o Exemplo #! http://php.net/manual/en/function.finfo-file.php

Share this post


Link to post
Share on other sites
Beraldo... tentei fazer como esta a baixo, porem ele só anexa um txt vazio, se tiver como dar uma olhada...

ps. $dst = diretorio de arquivos.


$arq = scandir($dst);


if ($arq != NULL) {

$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 .= "$bodyMensage\n";

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


$dh = opendir($dst);

while (false !== ($filename = readdir($dh))) {

$files[] = $filename;

}


for ($i = 0; $i > count($files); $i++) {


$mens .= "Content-Type: " . filetype($files[$i]) . "\n name=\"" . file($files[$i]) . "\"\n";

$mens .= "Content-Disposition: attachment; filename=\"" . file($files[$i]) . "\"\n";

$mens .= "Content-transfer-encoding:base64\n\n";

$mens .= $files[$i] . "\n";


if ($i + 1 == count($files))

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

else

$mens.= "--$boundary\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

$envio = mail($email, $assunto, $mens, $headers);



if ($envio) {

header("location:sucess.php?envio=true");

} else {

header("location:sucess.php?envio=false");

}

}

Share this post


Link to post
Share on other sites

Consegui fazer funcionar... realmente sou pessimo com maior e menor... kkkk

valeu Beraldo.... Segue a parte do codigo funcional.

 

$arq = scandir($dst);
if ($arq != NULL) {
$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 .= "$bodyMensage\n";
$mens .= "--$boundary\n";
$dh = opendir($dst);
while (false !== ($filename = readdir($dh))) {
$files[] = $filename;
}
for ($i = 0; $i < count($files); $i++) {
if (!is_dir($files[$i])) {
$leArq = $files[$i];
$fp = fopen($dst . $leArq, "rb");
$anexo = fread($fp, filesize($dst . $leArq));
$anexo = base64_encode($anexo);
fclose($fp);
$anexo = chunk_split($anexo);
$mens .= "Content-Type: " . mime_content_type($leArq) . "\n name=\"" . basename($dst . $leArq) . "\"\n";
$mens .= "Content-Disposition: attachment; filename=\"" . basename($dst . $leArq) . "\"\n";
$mens .= "Content-transfer-encoding:base64\n\n";
$mens .= $anexo . "\n";
if ($i + 1 == count($files))
$mens.= "--$boundary--";
else
$mens.= "--$boundary\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
$envio = mail($email, $assunto, $mens, $headers);
array_map('unlink', glob($dst . '*'));
if ($envio) {
header("location:sucess.php?envio=true");
} else {
header("location:sucess.php?envio=false");
}
}

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

  • Similar Content

    • By lumbarque_Oficial
      Tô a procura de uma equipe para participar 
       
      Sou programador, spriter ou músico
       
      meu nome é Gabriel , tenho 18 anos e já participei de uns grupo pequenos
       
      Sei de tudo um pouco mas a área que eu tô mais querendo botar a mão na massa atualmente é programação
       
      ~ alguém? ~
    • By adrianno
      Olá, estou com a seguinte dúvida com uso do JWT , trabalho com PHP a um tempo e estou migrando alguns projetos para formato API REST,  mas também começando a trabalhar com JS,REACT, NODE etc e a dúvida basicamente se aplica independente da linguagem uma vez  que o formato JWT é padrão.
      Vamos lá,   imagine que ao fazer um login bem sucedido o usário receba um token JWT  padrão, e no payload  coloquei o ID: "ff0eb2864feb22354747f8c85d42ccb5" e EMAIL :  "email@teste.com" do usuário junto com outras info padrão de um JWT,   mas qual pe a forma mais correta de validar este token?  usando métodos de verificar a assinatura, ok,   desmontando e montando novamente o token passado para comparar, OK  mas como eu verifico a integridade do usuário, imagine que eu de alguma forma um usuário malicioso obtenha o token de outro usuário, se ele enviar este token em uma requisição, ele seria aceito, mesmo sem ter que fazer o login de usuário, uma vez  que a rota em questão vai verificar o token e o mesmo teoricamente vai funcionar e este teria acesso a API em nome de outro usuário. Quais são as formas corretas de se trabalhar com JWT?
    • By leandro123456789
      <div id="direito">
             
             <?php 
                      
                 $link = filter_input(INPUT_GET, 'link');
                 
                 $pag[1] = "../admin/home.php";
                 $pag[2] = "../admin/classes/Lista.php";
                 
              
              
                 if(!empty($link)){
                     
                     if(file_exists($pag[$link]))
                        
                      {
                         include $pag[$link];
                      
                      }
                        
                      else
                      { 
                         
                          include "home.php";
                      
                      }
                     
                 }else{
                     include "home.php";
                 }
              
              ?>
             
          </div>
       
       
      Estou tentando colocar a paginação do meu banco em $ pag [2] na minha página: ../admin/classes/Lista.php tem o seguinte código de paginação:

      <? php
          
          include_once ("../ admin / classes / ClassConexao.php");
          
          
          // verifique a página atual se informado no URL, caso contrário, ela será atribuída como 1ª página
          $ pagina = (isset ($ _ GET ['link = 2']))? $ _GET ['link = 2']: 1;
       
          // seleciona todos os itens da tabela
          $ cmd = "selecione * da categoria";
          $ produtos = mysqli_query ($ conn, $ cmd);
          
          // conta o total de itens
          $ total = mysqli_num_rows ($ produtos);
       
          // seta o número de itens por página, neste caso, 2 itens
          $ registros = 2;
       
          // calcula o número de páginas arredondando o resultado
          $ numPaginas = teto ($ total / $ registros);
       
          // variável para calcular o início da visualização com base na página atual
          $ inicio = ($ registros * $ pagina) - $ registros;
       
          // seleciona itens por página
          $ cmd = "selecione * da categoria limite $ inicio, $ registros";
          $ produtos = mysqli_query ($ conn, $ cmd);
          $ total = mysqli_num_rows ($ produtos);
           
          // exibe produtos selecionados
          while ($ produto = mysqli_fetch_array ($ produtos)) {
              echo $ produto ['id_categoria']. "-";
              echo $ produto ['categoria']. "-";
              echo $ produto ['ativo_categoria']. "<br />";
          }

      // Não sei como consertar esta parte para mostrar a paginação nesse $ pag [2] = "../admin/classes/Lista.php";
           
          // exibe paginação
          para ($ i = 1; $ i <$ numPaginas + 1; $ i ++) {
              
             echo "<a href='?pagina=$i'>". $ i. "</a>";
          }
                  
      ?>
      Meu menu fica assim:

      <div id = "sessao"> Categoria </div>
         <ul>
             
            
             <li> <a href="index.php?link=3"> Cadastro </a> </li>
             <li> <a href="index.php?link=2"> Listar / Editar </a> </li>
         
        </ul>
    • By violin101
      Caros amigos
       
      saudações...
       
      Gostaria de tirar uma dúvida com os amigos, referente uma função em Codeigniter.
       
      Fiz algumas pesquisa, mas não entendi muito bem.
       
      No Codeigniter existe base_url() e site_url(), qual é a diferença entre essas funções ou são a mesma coisa ?
       
      Grato,
       
      Cesar
    • By Moacir Antonio Kuhn
      Tenho uma aplicação e há necessidade de enviar documentos, relatórios, imagens para email do cliente usando a sua conta de email (remetente).
      Porém,  atualmente temos uma conta única que faz todo este envio. Porém, o nosso usuário deseja usar uma conta pessoal diferente da padrão definida
      e neste caso, o nosso servidor de email não aceita um remetente que não esteja na base do servidor de email.
      Exemplificando,  remetente do email pode ser um  ...@hotmail.com, ...@gmail.com e o nosso servidor de email não tem estas contas cadastradas e, neste caso, o email é barrado na entrada do servidor.
      Que solução o pessoal tem feito para estes casos, pois já vi aplicação efetuando esta lógica com sucesso.
      Não quero que o usuário configurar SMTP, Conta, Senha, Porta...quero um envio automático para o destinatário.
       
×

Important Information

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