Ir para conteúdo

POWERED BY:

Arquivado

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

marcelo2605

[Resolvido] phpmailer com destinatário dinâmico

Recommended Posts

Quero fazer um formulário para que os internautas enviem para seus amigos os textos do site. Como faço para que o campo destinatário do formulário seja usado no script do phpmailer?

 

Sei como fazer com um e-mail pré-definido. Mas não com um e-mail a ser inserido pelo internauta.

 

// Define os destinatário(s)
// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
$mail->AddAddress('web@claudiaferreira.psc.br', 'Contato');

Compartilhar este post


Link para o post
Compartilhar em outros sites

$mail->AddAddress( filter( $_POST['email_inserido_pelo_usuario'] ), 'Contato');

sendo o input:

<input type="text" name="email_inserido_pelo_usuario" />

 

e a função filter() alguma que você defina para garantir a consistencia do dado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

a função filter() alguma que você defina para garantir a consistencia do dado.

você não entendeu esse trecho ne?!

 

você deve criar a function filter().. ou não.. depende do qnto de cuidado você quer ter com a aplicação.

Compartilhar este post


Link para o post
Compartilhar em outros sites

pode uê, mas ai é escolha tua abrir uma brecha de segurança na tua aplicação.

Compartilhar este post


Link para o post
Compartilhar em outros sites

como ficou o html do teu formulário ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

O form:

 

		<form name="form_texto" id="form_texto" method="post" action="../php/send_texto.php">

                         <fieldset>
                             <label for="destino">Para:</label>
                             <input type="text" name="destino" id="destino" />
                         </fieldset>

                         <fieldset>
                             <label for="nome">Meu nome:</label>
                             <input type="text" name="nome" id="nome" />
                         </fieldset>

                         <fieldset>
                             <label for="email">Meu email:</label>
                             <input type="text" name="email" id="email" />
                         </fieldset>

                         <fieldset>
                             <label for="comentarios">Comentários:</label>
                             <textarea rows="4" id="comentarios"></textarea>
                         </fieldset>

                         <fieldset>
                             <input type="submit" value="Enviar" />
                         </fieldset>
                         <input type="hidden" name="MM_insert" value="form_texto" />
                   </form>

 

O php:

 

<?php


// Inclui o arquivo class.phpmailer.php localizado na pasta phpmailer
require("class.phpmailer.php");

// 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.claudiaferreira.psc.br"; // Endereço do servidor SMTP (caso queira utilizar a autenticação, utilize o host smtp.seudomínio.com.br)
$mail->SMTPAuth = false; // Usa autenticação SMTP? (opcional)
$mail->Username = 'web@claudiaferreira.psc.br'; // Usuário do servidor SMTP
$mail->Password = '***'; // Senha do servidor SMTP

// Define o remetente
// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
$mail->From = "web@claudiaferreira.psc.br"; // Seu e-mail
$mail->FromName = "mensagem enviada pelo site"; // Seu nome

// Define os destinatário(s)
// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
$mail->AddAddress ($_POST['destino'] , 'Contato');

// Define os dados técnicos da Mensagem
// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
$mail->IsHTML(true); // Define que o e-mail será enviado como HTML
$mail->CharSet = 'iso-8859-1'; // Charset da mensagem (opcional)

// Define a mensagem (Texto e Assunto)
// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
$mail->Subject  = "Mensagem enviada pelo site"; 
// Assunto da mensagem
$mail->Body .= "Nome: ".nl2br($_POST['nome'])."<br>";
$mail->Body .= "Email: ".nl2br($_POST['email'])."<br>";
$mail->Body .= "Destino: ".nl2br($_POST['destino'])."<br>";

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

// Limpa os destinatários e os anexos
$mail->ClearAllRecipients();

// Exibe uma mensagem de resultado
if ($enviado) {
header("Location: index_enviado.php");
} else {
header("Location: index_erro.php");
}

?>

 

Alterei o código:

 

$destino = $_POST['destino'];
$nome = $_POST['nome'];
$mail->AddAddress ($destino, $nome);

 

Agora ele reconhece o e-mail, mas aparece o seguinte erro:

 

SMTP Error: The following recipients failed: xxx

 

Isso é problema ainda do código ou do servidor?

 

Estou fuçando na web mas não acho nada que me ajude.

 

Parece uma coisa tão simples, em qualquer site de jornal (Folha, Estadão) existe esse sistema de você enviar o conteúdo da página para um email.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Parece que descobri o problema.

 

Por algum motivo, o meu servidor (Dialhost) não aceita o meu script. Usei o que eles me passaram e funcionou.

 

Mas ainda queria usar o phpmailer. Alguém ainda sabe como resolver isso?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu uso dialhost e funciona legal.

<?php


// Inclui o arquivo class.phpmailer.php localizado na pasta phpmailer
require("php/classes/phpmailer/class.phpmailer.php");

// 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 = "smtp.dialhost.com.br"; // Endereço do servidor SMTP  
$mail->SMTPAuth = true; // Usa autenticação SMTP? (opcional)
$mail->Username = 'no-reply@meusite.com'; // Usuário do servidor SMTP
$mail->Password = '****'; // Senha do servidor SMTP

// Define o remetente
// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
$mail->From = 'no-reply@meusite.com'; //  e-mail do solicitante
$mail->FromName = "nome do solicitante"; //  nome  do solicitante

// Define os destinatário(s)
// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
$mail->AddAddress('aaaa@gmail.com', '');
//$mail->AddAddress('ciclano@site.net');
//$mail->AddCC('ciclano@site.net', 'Ciclano'); // Copia
$mail->AddBCC('aaaa@hotmail.com', ''); // Cópia Oculta

// Define os dados técnicos da Mensagem
// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
$mail->IsHTML(true); // Define que o e-mail será enviado como HTML
$mail->CharSet = 'utf-8';//'iso-8859-1'; // Charset da mensagem (opcional)

// Define a mensagem (Texto e Assunto)
// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
$mail->Subject  = "assunto"; // Assunto da mensagem

$mail->Body = "Corpo da mensagem";


//$mail->AltBody = "Este é o corpo da mensagem de teste, em Texto Plano!";

// Define os anexos (opcional)
// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
//$mail->AddAttachment("c:/temp/documento.pdf", "novo_nome.pdf");  // Insere um anexo

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

// Limpa os destinatários e os anexos
$mail->ClearAllRecipients();
$mail->ClearAttachments();

?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Carlos, mas funciona se eu colocar:

 

$mail->AddAddress($_POST['destino']);

????

 

Carlos, funcionou!

 

Finalmente!

 

Agora alguém aí sabe como coloco o conteúdo da página no corpo do email? O conteúdo vem de uma db mysql.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Verifique se está vindo o conteúdo corretamente.

<?php

var_dump( $_POST['destino'] );

?>

 

Se estiver legal, tente


$mail->AddAddress("{$_POST['destino']}");
// ou como você disse
$mail->AddAddress($_POST['destino']);

 

você percebeu que o script que postei é um pouco diferente do seu ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ao que parece o problema é em outro lugar, altere no seu script

$mail->Host = "smtp.dialhost.com.br"; // Endereço do servidor SMTP  
$mail->SMTPAuth = true; // Usa autenticação SMTP? (opcional)

 

você tem que resolver um problema para depois resolver outro, quando estiver enviando corretamente os e-mails, daí veremos como colocar o conteúdo dinâmicamante :lol:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tem razão. Agora funcionou!

 

O script que a Dialhost fornece parece meio fraquinho.

 

Agora em relação ao conteúdo dinâmico no corpo do email, tentei colocar:

 

$mail->Body = echo ($row_rsPsicologiaT['texto']);

 

Mas pra variar não deu certo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Está dizendo que a variável não existe.

Onde você atribui um valor a ela ?

Como você está atribuindo um valor ?

Qual código você está usando ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Carlos, desculpe a ignorância.

 

Acho que não atribui valor a variável. Ela aparece na página texto.php da seguinte forma:

 

<?php echo nl2br ($row_rsPsicologiaT['texto']); ?>

 

Não basta eu chamá-la novamente no arquivo enviar.php, que armazena o código de envio dos emails?

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.