MarceloZ 2 Denunciar post Postado Abril 17, 2013 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
Alaerte Gabriel 662 Denunciar post Postado Abril 17, 2013 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
mangakah 217 Denunciar post Postado Abril 17, 2013 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
MarceloZ 2 Denunciar post Postado Abril 18, 2013 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
MarceloZ 2 Denunciar post Postado Abril 18, 2013 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
mangakah 217 Denunciar post Postado Abril 18, 2013 Poste o código... Compartilhar este post Link para o post Compartilhar em outros sites
MarceloZ 2 Denunciar post Postado Abril 18, 2013 o codigo aqui http://pastebin.com/CZijZK7v Compartilhar este post Link para o post Compartilhar em outros sites
mangakah 217 Denunciar post Postado Abril 18, 2013 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
MarceloZ 2 Denunciar post Postado Abril 18, 2013 Na função só coloca o html? Compartilhar este post Link para o post Compartilhar em outros sites
mangakah 217 Denunciar post Postado Abril 18, 2013 Isso. Compartilhar este post Link para o post Compartilhar em outros sites
MarceloZ 2 Denunciar post Postado Abril 18, 2013 Uia , funcionou! só no assunto que o nome permenace o ultimo da tabela. Compartilhar este post Link para o post Compartilhar em outros sites
Alaerte Gabriel 662 Denunciar post Postado Abril 18, 2013 Uia , funcionou! só no assunto que o nome permenace o ultimo da tabela. Como assim ? Compartilhar este post Link para o post Compartilhar em outros sites
mangakah 217 Denunciar post Postado Abril 18, 2013 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
MarceloZ 2 Denunciar post Postado Abril 18, 2013 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
mangakah 217 Denunciar post Postado Abril 18, 2013 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
MarceloZ 2 Denunciar post Postado Abril 18, 2013 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
mangakah 217 Denunciar post Postado Abril 19, 2013 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
MarceloZ 2 Denunciar post Postado Abril 19, 2013 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
MarceloZ 2 Denunciar post Postado Abril 19, 2013 Eu usei a global e funcionou certinho! obrigado jovem Compartilhar este post Link para o post Compartilhar em outros sites