Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Dae pessoal, preciso criar um sistema de newsletters para um sistema que tenho, mas estou encontrando dificuldade ao enviar e-mail html com imagem no corpo da mensagem. Já tentei de todas as formas mas realmente não está dando. Estou tentando usar a classe PHPMailer.
Código.
<?php
$imagem = $_POST['imagem'];
$assunto = $_POST['assunto'];
$destino = $_POST['destino'];
$numEnv = 0;
$mail = new PHPMailer();
$mail->From = "admin@focandopessoas.com.br";
$mail->FromName = "Focus RH";
$mail->IsHTML(true);
if($destino == "curriculos"){
$query = mysql_query("SELECT * FROM curriculos WHERE ativo = 0");
}
if($destino = "empresas"){
$query = mysql_query("SELECT * FROM empresas");
}
while($row = mysql_fetch_array($query)){
$mail->AddAddress($row['email']);
$numEnv = $numEnv + 1;
}
if($fp = fopen($imagem,"rb", 0)){
$picture = fread($fp,filesize($imagem));
fclose($fp);
$base64 = chunk_split(base64_encode($picture));
$mensagem = '<img ' . "n" . 'src="data:image/jpg;base64,' . $base64 . '" alt="" />';
}
$mail->Subject = $assunto;
$mail->MsgHTML($mensagem);
$enviado = $mail->Send();
$mail->ClearAllRecipients();
$mail->ClearAttachments();
if ($enviado) {
echo "<h1><center><b>$numEnv</b> mensagens enviadas com sucesso!</center></h1>";
} echo "<b>Informações do erro:</b> <br />" . $mail->ErrorInfo;
}
?>
Será que aguém sabe onde estou errando? Preciso entregar este trabalho! =/
Vlw
A mensagem aparece sim, apenas a imagem que não.
Já tentei fazer uma html com o link da imagem completo tipo <img src="http://www.google.com.br/img.jpg" /> mas não está funcionando também!
O que pode estar errado?
Oi ;)
olha fiz um teste básico, no meu email chegou certinho, com imagem, teste assim para ver se funciona, se funcionar reveja o seu código ;)
<?php
require("phpmailer/class.phpmailer.php");
$mail = new PHPMailer();
$mail->From = "seuemail@seudominio.com.br";
$mail->FromName = "Focus RH";
$mail->IsHTML(true);
$mail->AddAddress("seuemail@seudominio.com.br");
$mensagem = "<img src='http://www.elciomoraes.zip.net/images/flores02.jpg' width='200' />";
$mail->Subject = $assunto;
$mail->MsgHTML($mensagem);
$enviado = $mail->Send();
$mail->ClearAllRecipients();
$mail->ClearAttachments();
if ($enviado) {
echo "<h1><center>Mensagens enviadas com sucesso!</center></h1>";
}
else{
echo "<b>Informações do erro:</b> <br />" . $mail->ErrorInfo;
}
?>
Poste o resultado por favor, se deu certo ou não
Olá amigo, fiz exatamente igual ao seu exemplo e me retornou esta mensagem de erro:
Informações do erro:
Could not instantiate mail function.
que você acha, estranho, será que é a versão do PHPMailer? Mas baixei a mais recente hoje mesmo!
Você está usando um e-mail válido do seu servidor?
nesta linha deve colocar um email existente em seu servidor
$mail->From = "seuemail@seudominio.com.br";
se este existir use ele: "admin@focandopessoas.com.br"
beleza, funcionou tranquilo inserindo direto no código. Agora tentei enviar o <img ... vindo de um textarea, olha como ele está imprimindo:
<img src=\"http://www.elciomoraes.zip.net/images/flores02.jpg\" width=\"200\" />
Acho que o problema está na obtenção do código pelo método post, existe algum método para tratar o html sei lá?
Não consigo entender porque ele coloca as \.
Tentei o htmlspecialchars mas não adiantou.
:(
Resolvido pessoal!
Pra quem interessa segue abaixo o código funcional.
<?php
$mensagem = $_POST['mensagem'];
$assunto = trim($_POST['assunto']);
$destino = trim($_POST['destino']);
$numEnv = 0;
$headers = "MIME-Version: 1.1\n";
$headers .= "Content-type: text/html; charset=iso-8859-1\n";
$headers .= "From: Focus <admin@focandopessoas.com.br>\n";
$headers .= "Return-Path: admin@focandopessoas.com.br\n";
if($destino == "curriculos"){
$query = mysql_query("SELECT * FROM curriculos WHERE ativo = 0");
}
if($destino == "empresas"){
$query = mysql_query("SELECT * FROM empresas");
}
$mail = new PHPMailer();
$mail->IsSMTP();
$mail->From = "admin@focandopessoas.com.br";
$mail->FromName = "Focus RH";
$mail->IsHTML(true);
while($row = mysql_fetch_array($query)){
$mail->AddAddress($row['email']);
$numEnv = $numEnv + 1;
}
$mensagem = str_replace(chr(92),"",$mensagem);
$mail->Subject = $assunto;
$mail->MsgHTML($mensagem);
$enviado = $mail->Send();
$mail->ClearAllRecipients();
$mail->ClearAttachments();
if ($enviado) {
echo "<h1><center><b>$numEnv</b> mensagens enviadas com sucesso!</center></h1>";
}
else{
echo "<b>Informações do erro:</b> <br />" . $mail->ErrorInfo;
}
?>
Fiz uma espécie de gambiarra com o str_replace, percorrende a variável $mensagem e substituindo o \ por branco.
$mensagem = str_replace(chr(92),"",$mensagem);
Valeu a ajuda ae!
=)
Olá,
apenas a imagem não está aparecendo ou a mensagem não está chegando?
tente assim se for a mensagem.
$mail->Body = $mensagem;
ao invés de assim
$mail->MsgHTML($mensagem);