Ir para conteúdo

POWERED BY:

DinhoPHP

Problemas ao enviar anexo com PHPMailer

Recommended Posts

Estou tentando enviar um anexo e o mesmo não chega no email, apenas quando não faço uso da função attach.

arquivo que contém as functions responsáveis pelo envio do email.

 public function attach(string $filePath, string $fileName): Email{
         $this->data->attach[$filePath] = $fileName;
         return $this;
      }

Arquivo que utiliza a função attach.

No arquivo que captura os dados do formulário, já passei os parâmetros de tudo quanto é jeito.

   require __DIR__ . "/include/head.php";
   require __DIR__ . "/vendor/autoload.php";
   use Source\Support\Email;

   $email = new Email();


      // CAPTURANDO DADOS DO FORMULÁRIO
      $nome      = trim(ucwords(preg_replace('/\s\s+/', ' ',($_POST['nome-curriculo']))));
      $eemail     = trim(strtolower(preg_replace('/\s\s+/', ' ',($_POST['email-curriculo']))));
      $telefone  = trim(preg_replace('/\s\s+/', ' ',($_POST['telefone-curriculo'])));
      $cidade    = trim(preg_replace('/\s\s+/', ' ',($_POST['cidade-curriculo'])));
      $assunto   = trim(preg_replace('/\s\s+/', ' ',($_POST['assunto-curriculo'])));
      $mensagem  = trim(preg_replace('/\s\s+/', ' ',("<pre>".$_POST['mensagem-curriculo']."</pre>")));
      // $file_tmp = ($_FILES['file'], $_POST['name']);
      $files = $_FILES['curriculo'];

      $email->add($assunto,
      "<h3>Nome: {$nome}<br>{$files['name']}<br>Email: {$eemail}<br><br>Telefone: {$telefone}<br><br>Cidade: {$cidade}<br><br></br>Mensagem:<br>{$mensagem}</h3>",
      $nome,
      $eemail)->attach($files['tmp_name'], $files['name'])->send();
      var_dump($files);

A função attach que recebe dois parâmetros, quando utilizada, não envia o anexo vindo do form HTML, já digitando os parâmetros na função, ela envia o anexo. Já li até alguns casos semelhantes aqui mesmo e nada! Só envia o anexo digitando os parâmetros manualmente. 

Compartilhar este post


Link para o post
Compartilhar em outros sites
Em 05/06/2020 at 23:11, Guilherme Luiz disse:

Muito obrigado, Guilherme. Mas quando eu estava criando este tópico, esqueci de editar partes da postagens e acabou ficando igual a do Stackoverflow (pois já havia postado lá). rsrs

 

O problema é com ela mesmo, se passo os parâmetros manualmente ex: attach("pasta/arq.doc", "nome_para_o_arequivo")->send(); roda normal, porém, não com variável com conteúdo do campo file do html. Entendeu?

Compartilhar este post


Link para o post
Compartilhar em outros sites

O problema acredito não ser no PhpMailer!

Pois não sabemos oque este código acima faz. Se você abstraiu as funções do PHPMailer para outra layer. Só Deus e você sabe oque fez, nem aqui e nem no SoPT entenderá. Lá no Stack ja iria ser fechada ou negativada, por nao ser clara e fora do escopo do PHPMailer.

Compartilhar este post


Link para o post
Compartilhar em outros sites
Agora, Williams Duarte disse:

O problema acredito não ser no PhpMailer!

Pois não sabemos oque este código faz, se você abstraiu as funções do PHPMailer para outra layer. Só Deus e você sabe oque fez, nem aqui e nem no SoPT entenderá. Lá no Stack ja iria ser fechada ou negativada, por nao ser clara e fora de escopo do PHPMailer.

Pois é! Mas sem má intenção e a mesma não foi. Acredito não ter culpa se todos os meus códigos salvos anteriormente com a classe resolveram parar de funcionar. Tive que fazer outra e fui com base no vídeo do canal UPINSIDE.

 

 

Mas sem problemas! Nunca desisto e irei consegui ;) agradeço ao Guilherme e aos que tentaram me ajudar. Se verem  a necessidade de fechar, assim o podem fazer. Vlw! E obrigado!

Compartilhar este post


Link para o post
Compartilhar em outros sites
16 horas atrás, DinhoPHP disse:

Se verem  a necessidade de fechar, assim o podem fazer.

Entenda o contexto do que eu disse!

 

16 horas atrás, Williams Duarte disse:

nem aqui e nem no SoPT entenderá

Nem aqui no Fórum Imasters e, nem no StackOverflow em portugues entenderia, ja que você citou o StackOverflow.

Seu problema não é a biblioteca como já disse, mas sim entender Padrões de Projeto.
Comece estudando Facade

Vai deixar seu codigo mais limpo e esconde a complexidade

$facade = new EmailFacade();
$facade->email(getPost('email'))
	->attach('...')
	->send();

getPost()

 

Com a função, __call,  __callStatic() você abstrai todos os metodos de um Serviço "que usa o PHPMailer", mas se parou de funcionar, atualize o biblioteca que envia o email, ou mude para outra.

Exemplo com __call e __callStatic

<?php
class MethodTest
{
    public function __call($name, $arguments)
    {
        // Note: value of $name is case sensitive.
        echo "Calling object method '$name' "
             . implode(', ', $arguments). "\n";
    }

    /**  As of PHP 5.3.0  */
    public static function __callStatic($name, $arguments)
    {
        // Note: value of $name is case sensitive.
        echo "Calling static method '$name' "
             . implode(', ', $arguments). "\n";
    }
}

$obj = new MethodTest;
$obj->runTest('in object context');

MethodTest::runTest('in static context');  // As of PHP 5.3.0
?>

 

 

16 horas atrás, DinhoPHP disse:

Acredito não ter culpa se todos os meus códigos salvos anteriormente com a classe resolveram parar de funcionar.

Se não forem cobertos por testes, fica dificil mesmo. Praticamente todos os metodos de uso do PHPMailer já foram cobertos por testes, sendo assim, faça uso de testes para cobrir os seus.

 

Mais em: https://phpunit.de/

Senão entender sobre,  vai sempre depender de videos aulas, como esta acima, que ao meu ver, vale como aprendizagem, mas tenha em mente que tem um alto acoplamento e baixa coesão. Tornando seu código de dificil manutenção.

 

Para uso de dados sensiveis, um padrão ja bastante difundido e o "environment" .env

Existe um pacote para isto
https://github.com/vlucas/phpdotenv

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora

  • Conteúdo Similar

    • Por violin101
      Caros amigos, saudações.
       
      Por favor, poderiam me ajudar.

      Estou com a seguinte dúvida:
      --> como faço para para implementar o input código do produto, para quando o usuário digitar o ID o sistema espera de 1s a 2s, sem ter que pressionar a tecla ENTER.

      exemplo:
      código   ----   descrição
           1       -----   produto_A
       
      Grato,
       
      Cesar
    • Por violin101
      Caros amigos, saudações.
       
      Humildemente peço desculpa por postar uma dúvida que tenho.

      Preciso salvar no MySql, os seguinte Registro:

      1 - Principal
      ====> minha dúvida começa aqui
      ==========> como faço para o Sistema Contar Automaticamente o que estiver despois do 1.____?
      1.01 - Matriz
      1.01.0001 - Estoque
      1.01.0002 - Oficina
      etc

      2 - Secundário
      2.01 - Loja_1
      2.01.0001 - Caixa
      2.01.0002 - Recepção
      etc
       
      Resumindo seria como se fosse um Cadastro de PLANO de CONTAS CONTÁBEIL.

      Grato,


      Cesar









       
    • Por violin101
      Caros amigos, saudações.

      Por favor, me perdoa em recorrer a orientação dos amigos.

      Preciso fazer um Relatório onde o usuário pode Gerar uma Lista com prazo para vencimento de: 15 / 20/ 30 dias da data atual.

      Tem como montar uma SQL para o sistema fazer uma busca no MySql por período ou dias próximo ao vencimento ?

      Tentei fazer assim, mas o SQL me traz tudo:
      $query = "SELECT faturamento.*, DATE_ADD(faturamento.dataVencimento, INTERVAL 30 DAY), fornecedor.* FROM faturamento INNER JOIN fornecedor ON fornecedor.idfornecedor = faturamento.id_fornecedor WHERE faturamento.statusFatur = 1 ORDER BY faturamento.idFaturamento $ordenar ";  
      Grato,
       
      Cesar
       
       
       
       
    • Por violin101
      Caros amigos, saudações
       
      Por favor, me perdoa em recorrer a orientação dos amigos, tenho uma dúvida.
       
      Gostaria de uma rotina onde o Sistema possa acusar para o usuário antes dos 30 dias, grifar na Tabela o aviso de vencimento próximo, por exemplo:
       
      Data Atual: 15/11/2024
                                           Vencimento
      Fornecedor.....................Data.....................Valor
      Fornecedor_1...........01/12/2024..........R$ 120,00 <== grifar a linha de Laranja
      Fornecedor_1...........01/01/2025..........R$ 130,00
      Fornecedor_2...........15/12/2024..........R$ 200,00 <== grifar a linha de Amarelo
      Fornecedor_2...........15/01/2025..........R$ 230,00
      Fornecedor_3...........20/12/2024..........R$ 150,00
       
      Alguém tem alguma dica ou leitura sobre este assunto ?

      Grato,
       
      Cesar
    • Por violin101
      Caros amigos, saudações.

      Por favor, me perdoa em recorrer a ajuda dos amigos, mas preciso entender uma processo que não estou conseguindo sucesso.

      Como mencionado no Título estou escrevendo um Sistema Web para Gerenciamento de Empresa.
       
      Minha dúvida, que preciso muito entender:
      - preciso agora escrever a Rotina para Emissão de NFe e essa parte não estou conseguindo.
       
      tenho assistido alguns vídeos e leituras, mas não estou conseguindo sucesso, já fiz toda as importações das LIB da NFePhp conforme orientação.

      Preciso de ajuda.

      Algum dos amigos tem conhecimento de algum passo-a-passo explicando a criação dessa rotina ?

      tenho visto alguns vídeos com LARAVEL, mas quando tento utilizar e converter para PHP+Codeiginter, dá uma fila de erros que não entendo, mesmo informando as lib necessárias.

      Alguns do amigo tem algum vídeo, leitura explicando essa parte ?

      Grato,

      Cesar.
×

Informação importante

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