Ir para conteúdo
Fórum Script Brasil
  • 0

Imagem inline no PHP Mailer


Peter_

Pergunta

Oi pessoal,

Envio o email HTML mas a imagem não aparece embutida / inline / no corpo do email. Ela vai como anexo. Utilizo a classe PHP Mailer. Todas as pastas estão corretas.

Eis o código:

<?php


  
  require("class.phpmailer.php");



  $texto = $_POST['mensagem'];

  
  
  
  // Inicia a classe PHPMailer
  $mail = new PHPMailer();

  // Define os dados do servidor e tipo de conexão
  // =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  $mail->IsSMTP(); // Define que a mensagem será SMTP
  $mail->Host = "mail.MEUHOST.COM"; // Endereço do servidor SMTP

  $mail->SMTPAuth = true; // Usa autenticação SMTP? (opcional)
  $mail->Port = 25; // Porta
  $mail->Username = 'teste2@MEUHOST.COM'; // Usuário do servidor SMTP
  $mail->Password = 'teste2'; // Senha do servidor SMTP e desta conta de email

  
  
  
  // Define o remetente
  // =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  $mail->From = "no-reply@MEUHOST.COM"; // Seu e-mail
  $mail->FromName = "MINHA EMPRESA"; // Seu nome

  
  
  
  // Define o(s) destinatário(s)
  // =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  $destinatarios = explode(",", $_POST['destinatarios']);
  $total_dest = sizeof ($destinatarios);
  for ( $i = 0; $i < $total_dest; $i++) {
    $destinatarios[$i] = trim ($destinatarios[$i]);
    if ( PHPMailer::ValidateAddress ( $destinatarios[$i] ) == true ) {
      echo "Destinatario VALIDO: '" . $destinatarios[$i] . "'<br />";
      $mail->AddBCC( $destinatarios[$i] );
    } else echo "Destinatario INVALIDO: '" . $destinatarios[$i] . "'<br />";
  }
  
  

  // Define os dados técnicos da Mensagem
  // =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  $mail->IsHTML(true); // Define que o e-mail será enviado como HTML


  

  // Define a mensagem (Texto e Assunto)
  // =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  $assunto = $_POST['assunto'];
  $mail->Subject = $assunto; // Assunto da mensagem

  
  
  // Necessário substituir \" por ' pois o CKEditor 3.x
  // adiciona este caracter extra
  $texto = str_replace ( "\\\"", "'", $texto );
  
  
  
  
  
  // obtém as imagens do texto e as coloca em um arranjo.
  $texto_modificado = $texto;
  $array_imagens = array ();
  $chave_inicio = "src='";
  
  do {
    // retorna um INT mas na documentacao oficial ele compara com um BOOLEAN
    $achou = strpos ( $texto_modificado , $chave_inicio );
    
    if ( $achou !== false ) {
      $inicio = ((integer) $achou);
      $inicio_imagem = $inicio + strlen ( $chave_inicio );
      
      $chave_fim = ".jpg'";
      $pos = strpos ( $texto_modificado , $chave_fim, $inicio_imagem );
      
      if ( $pos === false ) $chave_fim = ".gif'";
      $pos = strpos ( $texto_modificado , $chave_fim, $inicio_imagem );
      
      if ( $pos === false ) $chave_fim = ".png'";
      $pos = strpos ( $texto_modificado , $chave_fim, $inicio_imagem );
      
      if ( $pos === false ) $chave_fim = ".bmp'";
      $pos = strpos ( $texto_modificado , $chave_fim, $inicio_imagem );
      
      if ( $pos === false ) $chave_fim = ".jpeg'";
      $pos = strpos ( $texto_modificado , $chave_fim, $inicio_imagem );
      
      $fim = $pos + strlen ( $chave_fim );
      $fim_imagem =  $fim - 1;
      
      $array_imagens[] = substr ( $texto_modificado , $inicio_imagem, ($fim_imagem - $inicio_imagem) );
      $texto_modificado = substr_replace ( $texto_modificado, " ", $inicio, ($fim - $inicio) );
      
    }
  } while ( $achou !== false );


  $total_imagens = sizeof($array_imagens);
  
  
  
  // Content IDs
  $cids = array ();
  for ( $contador = 0; $contador < $total_imagens; $contador++ ) {
    // gera os IDs das imagens para se serem posicionados no texto da mensagem
    $cids[] = $contador . "__" . date('YmdHms') . "." . time();
    echo "Imagem : '" . $array_imagens [$contador] . "'<br />";
    echo "CID: " . $cids[$contador] . "<br /><br />";
  }
  echo "\n\n";

  echo "TEXTO MODIFICADO: " . $texto . "<br />";
  
  
  // Substitui imagem a imagem pelo seu ID no texto recebido
  for ( $contador = 0; $contador < $total_imagens; $contador++ ) {
    $texto = str_replace ( $array_imagens [$contador], "cid:" . $cids [$contador], $texto ); 
    // $mail->AddEmbeddedImage( "/home/MEUUSER/public_html" . $array_imagens [$contador], $cids [$contador] ); 
    $mail->AddEmbeddedImage( "/home/MEUUSER/public_html" . $array_imagens [$contador], 
           $cids [$contador], 
           "figura_" . $contador . ".jpg",
           "base64",
           "image/jpeg" );
  }
  
  
  
  
  
  
  $body = "<html>\r\n";
  $body .= "<head>\r\n";
  $body .= "<meta http-equiv=\"content-type\" content=\"text/html; charset=utf-8\" />";
  $body .= "</head>\r\n";
  $body .= "<body>\r\n";
  $body .= $texto . "\r\n";
  $body .= "</body>\r\n";
  $body .= "</html>\r\n\n";
  
  
  
  
  $mail->AltBody = 'O seu sistema de recepção de email não suporta HTML';
  // $mail->Body = $body;
  
  $mail->MsgHTML ($body);



  // Define os anexos
  // =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

  // Verificações do anexo 1
  $anexo_1 = false;
  if ( isset($_FILES["anexo_1"]) && $_FILES["anexo_1"]!=null && $_FILES["anexo_1"]["size"] > 0 ) {
    /*if (($_FILES["anexo_1"]["type"] == "image/gif")
       || ($_FILES["anexo_1"]["type"] == "image/jpeg")
       || ($_FILES["anexo_1"]["type"] == "image/pjpeg")) {*/
         $anexo_1 = true;
       //}
  }
  
  // Verificações do anexo 2
  $anexo_2 = false;
  if ( isset($_FILES["anexo_2"]) && $_FILES["anexo_2"]!=null && $_FILES["anexo_2"]["size"] > 0 ) {
    /*if (($_FILES["anexo_2"]["type"] == "image/gif")
       || ($_FILES["anexo_2"]["type"] == "image/jpeg")
       || ($_FILES["anexo_2"]["type"] == "image/pjpeg")) {*/
         $anexo_2 = true;
       //}
  }
  
  // Verificações do anexo 3
  $anexo_3 = false;
  if ( isset($_FILES["anexo_3"]) && $_FILES["anexo_3"]!=null && $_FILES["anexo_3"]["size"] > 0) {
    /*if (($_FILES["anexo_3"]["type"] == "image/gif")
       || ($_FILES["anexo_3"]["type"] == "image/jpeg")
       || ($_FILES["anexo_3"]["type"] == "image/pjpeg")) {*/
         $anexo_3 = true;
       //}
  }
  
  $total = 0;
  if ( $anexo_1 == true ) $total += $_FILES["anexo_1"]["size"];
  if ( $anexo_2 == true ) $total += $_FILES["anexo_2"]["size"];
  if ( $anexo_3 == true ) $total += $_FILES["anexo_3"]["size"];
  
  echo "TOTAL DOS UPLOADS: " . $total . " KB<br/>";
  
  
  if ( $total < 20000000 )  // em Kb
  {
    if ( ($anexo_1==true && $_FILES["anexo_1"]["error"] > 0) || 
         ($anexo_2==true && $_FILES["anexo_2"]["error"] > 0) || 
         ($anexo_3==true && $_FILES["anexo_3"]["error"] > 0) )
    {
      echo "Código de erro: " . $_FILES["anexo_1"]["error"] . "; " . $_FILES["anexo_2"]["error"] . "; " . $_FILES["anexo_3"]["error"] . "<br />";
    }
    else
    {
      if ( $anexo_1 == true ) {
        move_uploaded_file($_FILES["anexo_1"]["tmp_name"],
          "upload/" . $_FILES["anexo_1"]["name"]);
        $mail->AddAttachment("upload/" . $_FILES["anexo_1"]["name"], $_FILES["anexo_1"]["name"]); // Insere um anexo
      }
      
      if ( $anexo_2 == true ) {
        move_uploaded_file($_FILES["anexo_2"]["tmp_name"],
          "upload/" . $_FILES["anexo_2"]["name"]);
        $mail->AddAttachment("upload/" . $_FILES["anexo_2"]["name"], $_FILES["anexo_2"]["name"]); // Insere um anexo
      }
        
      if ( $anexo_3 == true ) {
        move_uploaded_file($_FILES["anexo_3"]["tmp_name"],
          "upload/" . $_FILES["anexo_3"]["name"]);
        $mail->AddAttachment("upload/" . $_FILES["anexo_3"]["name"], $_FILES["anexo_3"]["name"]); // Insere um anexo
      }
      
    }
  }
  else
  {
    echo "Tipos inválidos dos arquivos carregados ou o tamanho somado passa de 20 MB.<br />";
  }



  // Envia o e-mail
  $enviado = $mail->Send();



  // Exibe uma mensagem de resultado
  if ($enviado) {
    // Limpa os destinatários e os anexos
    $mail->ClearAllRecipients();
    $mail->ClearAttachments();
    echo "E-mail enviado com sucesso!<br />";
    echo("&lt;script language='javascript'>");
    echo("  alert('Email enviado com sucesso.\\n\\nRedirecionando....');");
    // echo("  location = 'maladireta.php';");
    echo("</script>");
    exit;
  } else {
    // Limpa os destinatários e os anexos
    $mail->ClearAllRecipients();
    $mail->ClearAttachments();
    echo "Não foi possível enviar o e-mail.<br /><br />";
    echo "<b>Informações do erro:</b> <br />" . $mail->ErrorInfo;
    echo("&lt;script language='javascript'>");
    echo("  alert('Não foi possível enviar o e-mail.\\n\\nRedirecionando....');");
    //echo("  location = 'maladireta.php';");
    echo("</script>");
    exit;
  }
  
  
?>

Link para o comentário
Compartilhar em outros sites

0 respostass a esta questão

Posts Recomendados

Até agora não há respostas para essa pergunta

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,2k
    • Posts
      652k
×
×
  • Criar Novo...