Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

MarceloZ

Enviar pagina php por email?

Recommended Posts

Carissimos

 

Estou com uma dúvida

Eu criei um aplicativo de convite onde o convite pega os dados cadastrados no bd e gera uma imagem

que é enviada para multiplos emails via phpmailer.

 

Me pediram para inserir o nome do convidado no convite

ai pensei ..faço a query pego os nomes na tabela e com um while

 

while($linha = mysql_fetch_array($sql)){
$convidado = $linha['nome'];
}

 

mas o convite é uma imagem então lascou eu teria que criar uma imagem para cada convidado diferente o que seria inválido.

 

Então pensei em gerar uma pagina php na mesma lógica a cima mas ao inves de gerar uma imagem

criaria uma pagina html. a dúvida que fica é como eu envio essa pagina por e-mail.?

 

obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

Enviar páginas PHP por email, só se for em anexo. :skull:

 

Não, não é inválido cirar uma imagem com o nome de cada cliente, porém sua aplicação fiaria pesada a depender do número de clientes. O que você pode fazer é realmente gerar uma página HTML e envia-la. Basta inserir as formatações que você quer... nada mais.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pelo que entendi, o que você quer então é enviar um email no formato HTML, certo?

 

Então aqui vai um exemplozito simplório:

 <?php // Seus emails$seu_email = "sicrano@exemplo.com";$email_atendimento = "atendimento@exemplo.com"; // Email do destinatário$para = 'fulano@examplo.com'; // Campo assunto$assunto = 'Convite'; // Cabeçalhos de email$cabecalhos  = array(                  "From: " . $seu_email,                  "Reply-To: " . $email_atendimento,                                    // Não altere esses, são necessários para identificar o email como HTML                  "MIME-Version: 1.0",                  "Content-Type: text/html; charset=ISO-8859-1",             );                $mensagem = "<html><body>";$mensagem .= "<h1>Coloque seu HTML aqui</h1>";$mensagem .= "</body></html>"; // Por fim, hora de enviar!!$enviou = mail($para , $assunto, $mensagem, join("\r\n", $cabecalhos). "\r\n"); if ($enviou) {    echo "Email enviado com sucesso!";} else {    $erro = error_get_last();    echo "Erro ao enviar email: " . $erro['message'];}

 

 

Tenho certeza que se você pesquisar no Google vai encontrar exemplos bem melhores.

 

 

Quanto a criar imagens e escrever o nome do convidado numa imagem... também não vejo qual o problema com isso. A não ser que essa imagem, se enviada por email, provavelmente será bloqueada pelo cliente de emails dos seus convidados. :-/

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sim , hoje o sistema gera uma imagem e envia a imagem para os e-mails onde o usuario tem que permitir o programa de emails exibir a mensagem . tenho isso pronto.

vou testar esse esquema de montar o email em html agora.

 

obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

então carissimos, eu montei um php enviei por email via phpmailer, eu recebo os emails

só que só esta exibindo o nome do ultimo nome da tabela

eu tenho uma tabela com nomes e emails , o sistema envia o e-mail para a lista de emails mas o nome que deviria aparecer

aparecem todos iguais ex: nome joão , maria , josé envia o e-mail para os três mas na variável onde exibe o nome só aparece o José.

:S

Compartilhar este post


Link para o post
Compartilhar em outros sites

Na linha 10 você está sobrescrevendo a variável $convidado, então só vai ficar o último valor.

 

Você poderia colocar o $html dentro de uma função, retornando a mensagem com o nome do convidado cada vez que fosse chamada:

// na linha 21
function html($convidado)
{
     return "SEU CODIGO HTML AQUI .... {$convidado}";
}
 
 
// na linha 1l9
$mail->Body = html( $r["nome"]);

Compartilhar este post


Link para o post
Compartilhar em outros sites

No PHPMailer você pode definir o assunto assim:

 

// coloque na linha 168
$mail->Subject = "Convite para {$r['nome']}";

 

Você está usando AltBody de forma errada. Ele deve ser usado para uma versão alternativa da mensagem HTML, em texto simples. Faça uma função para text($convidado) assim como você fez para html().

Compartilhar este post


Link para o post
Compartilhar em outros sites

Agora surgiu uma outra duvida

Atraves da função function html($convidado) eu consegui fazer com que mostrasse o nome que esta na tabela contatos no e-mail

eu tenho outra tabela cliente que eu preciso pegar os dados para colocar nesse mesmo email.

eu fiz um while mas parece que os dados não então chegando nas variaveis.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se esta dúvida não tem nenhuma relação com essa, você deve criar um outro tópico para ela. Assim o fórum fica organizado. :)

Compartilhar este post


Link para o post
Compartilhar em outros sites

na verdade tem relação sim pois o assunto seria o mesmo... :yes:

antes da function html

eu fiz

 

$id = $_GET['idniver'];
include ("class.phpmailer.php");
include ("conecta.php");
$seleciona = mysql_query("SELECT * FROM clientes WHERE idniver='$id'")or die("Erro na consulta".mysql_error());
if($seleciona == ''){
echo 'Nenhum Registro';
}else{
while($res_id = mysql_fetch_array($seleciona)){
$id = $res_id['idniver'];
$nome = $res_id['nomeniver'];
$dataniver = $res_id['datafesta'];
if (strstr($dataniver, "-")){
$aux2 = explode ("-", $dataniver);
$newdataniver = $aux2[2] . "/". $aux2[1] . "/" . $aux2[0];}
$hinicio = $res_id['horaini'];
$hend = $res_id['horaend'];
$idade = $res_id['idade'];
}}

function html($convidado)

{

return " CODIGO HTML AQUI .... {$convidado}";

$nome

$hinicio

$newdataniver

$hend
$idade

}

 

 

$mail->Body = html( $r["nome"]);

 

só que não chegam as variaveis !



Eu criei uma pagina nova onde eu removi os dados pertinentes ao envio do email apenas para exibir a pagina e variaveis apareceram na tela ,. :upset:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Aqui tem um problema:

 $seleciona = mysql_query("SELECT * FROM clientes WHERE idniver='$id'")or die("Erro na consulta".mysql_error());    if($seleciona == ''){
 

 

Sempre confira no manual o que a função retorna em cada ocorrência. A função mysql_query retorna TRUE se a consulta foi executada com sucesso ou FALSE se houve algum erro. Ela nunca retorna um string vazio. Embora "" seja equivalente a FALSE, é melhor já usar o valor correto. E diferente do que você está pensando, mysql_query não irá retornar FALSE se a consulta retornar um conjunto vazio de registros, será TRUE. Então você deve fazer assim:

 $seleciona = mysql_query("SELECT * FROM clientes WHERE idniver='$id'"); // Verifica se há um erro na consultaif(!$seleciona){    echo "Erro na consulta";    die();} // Verifica se a consulta retornou 0 linhasif (mysql_num_rows() == 0) {    echo "Nenhum registro";} else {    // ...}
 

 

 

Outra coisa que você ainda não entendeu: Escopo de Variáveis (leia atentamente).

 

Basicamente, se declarada uma variável fora de uma função, ela é uma variável global; mas quando se declara uma variável dentro de uma função, ela é uma variável local. Se você declarou uma variável global, ela não estará disponível dentro da função. Se você declarou uma variável local, ela só está disponível dentro da função onde você a declarou. Se você quer fazer alguma operação com um valor que está em uma variável global dentro de uma função, precisa passar esse valor por parâmetro ou usar a palavra chave global. Tudo isso é explicado em detalhes no link acima.

 

 

Então, na sua função...

 
function html($convidado, $nome, $hinicio, $newdataniver, $hend, $idade)
{
     return "<html>{$convidado} - {$nome}, {$hinici}o, {$newdataniver}, {$hend}, {$idade}</html>";
}
 
// E quando chamar a função você deve passar todos esses valores
$mail->Body = html( $r["convidado"],  $r["nome"],  $r["hinicio"], $r["newdataniver"], $r["hend"], $r["idade"]);
// lembre-se de alterar sua lista de campos (variável $campos, linha 101 no pastebin) para incluir todos esses campos 
 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Os campos da linha 101 (pastebin) estão em uma tabela e os campos que eu citei a cima estão em outra tabela.

o esquema é o mesmo?

 

 

 

Opa Entendi , eu desconhecia essas variáveis locais , variáveis globais.. para mim variavel é variavel e somente isso. :D

obrigado por elucidar meu conhecimento.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

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