Ir para conteúdo

POWERED BY:

Arquivado

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

Juliano Tavares

PHPMailer - Envio de resposta automática com anexo.

Recommended Posts

Olá pessoal, depois de 3 dias de pesquisa e muita tentativa resolvi postar meu problema aqui no fórum. (Já pesquisei inclusive aqui e não achei uma solução).

 

A princípio é simples, estou usando a classe PHPMailer autenticando o email pelo gmail, ele envia o email do formulário para meu e-mail e automaticamente recebe uma resposta minha com um anexo, (era pra ser assim), porém não consigo encontrar o erro, abaixo vai os scripts.

 

orcamento.php

<?php session_start();?>
<style type="text/css">
form{padding:10px; width:640px; background:#666;}
label{display:block; margin:0 0 10px 0;}
span{font:bold 12px Tahoma, Geneva, sans-serif; color:#FFF; display:block; margin:0 0 5px 0;}
input{width:610px; padding:5px; font:14px Arial, Helvetica, sans-serif; color:#fff; border:1px solid #CCC; background:#999; margin:0 10px;}
textarea{width:610px; padding:5px; font:14px Arial, Helvetica, sans-serif; color:#fff; border:1px solid #CCC; background:#999; margin:0 10px;}
.btn{display:block; margin:0 auto; width:150px; background:#900; color:#fff; cursor:pointer; font-weight:bold;}
.alert{padding:5px; background:#FFFFBF; border:1px solid #FF0; margin:5px 5px 15px 5px; font:bold 12px Arial, Helvetica, sans-serif; color:#F30;}
</style>
<form name="email" action="" method="post">
<?php  if(isset($_POST['enviar'])){
unset($_SESSION['enviado']);
$assunto = strip_tags(trim($_POST['assunto']));
$nome	 = strip_tags(trim($_POST['nome']));
$email= strip_tags(trim($_POST['email']));
$msg = strip_tags(trim($_POST['msg']));

/* comentei a validação dos campos pra facilitar a execução do script

if($tipo == '' || $nome == '' || $email == '' || $msg == ''){
	echo '<div class="alert">Erro: Todos os campos são obrigatórios.</div>';
}else if(!preg_match("/^[a-z0-9_\.\-]+@[a-z0-9_\.\-]*[a-z0-9_\-]+\.[a-z]{2,4}$/i", $email)){
		echo '<div class="alert">Erro: Informe um email válido.</div>';
}else{
*/
	require('config.php');
	sendMail($assunto,$msg,$email,$nome,'juliano.tavaress@gmail.com','Juliano Tavares');
	sendMail('Pedido de Orçamento','obrigado por solicitar esse orçamento','juliano.tavaress@gmail.com','Juliano Tavares',$email,$nome);

}


if(isset($_SESSION['enviado'])){
	echo $_SESSION['enviado'];
}		

?>
<label>
<span>*Assunto</span>
<input type="text" name="assunto" value="<?php if(isset($assunto)){echo $assunto;}?>"/>
</label>
<label>
<span>*Nome</span>
<input type="text" name="nome" value="<?php if(isset($nome)){echo $nome;}?>" />
</label>
<label> <span>*E-mail</span>
  <input type="text" name="email" value="<?php if(isset($email)){echo $email;}?>" />
</label>
<label> <span>*Qual orçamento deseja?</span><br />
Casamento
  <input name="tipo" type="radio" value="casamento" checked />
Casal e Gestante
  <input name="tipo" type="radio" value="casalgestante"/>
Pessoal
  <input name="tipo" type="radio" value="pessoal"/>
</label>
<label>
  <span>*Mensagem</span>
  <textarea rows="5" name="msg"><?php if(isset($msg)){echo $msg;}?></textarea>
</label>
<input type="submit" name="enviar" value="Enviar Mensagem" />
</form>

 

config.php

<?php function sendMail($assunto,$msg,$remetente,$nomeRemetente,$destino,$nomeDestino, $is_gmail = true) { 
	define('SMTPUSER', 'juliano.tavaress@gmail.com'); // sec. smtp username
	define('SMTPPWD', '******'); // sec. password
	define('SMTPSERVER', 'smtp.gmail.com'); // sec. smtp server

require_once('class.phpmailer.php'); //Include pasta/classe do PHPMailer
//$mail->SetLanguage("br", "language\\");

global $error;
$mail = new PHPMailer();
$mail->IsSMTP();
$mail->SMTPAuth = true; 
if ($is_gmail) {
	$mail->SMTPSecure = 'ssl'; 
	$mail->Host = 'smtp.gmail.com';
	$mail->Port = 465;  
	$mail->Username = GUSER;  
	$mail->Password = GPWD;   
} else {
	$mail->Host = SMTPSERVER;
	$mail->Username = SMTPUSER;  
	$mail->Password = SMTPPWD;
}        
$mail->From 			= $remetente; //remtente
$mail->FromName			= utf8_decode($nomeRemetente); //remtetene nome
$mail->IsHTML(true);
$mail->Subject 			= utf8_decode($assunto); //assunto
$mail->Body 			= utf8_decode($msg); //mensagem
$mail->AddAddress($destino,utf8_decode($nomeDestino)); //email e nome do destino
$mail->WordWrap 		= 50; // Definição de quebra de linha
$mail->AddAttachment("investimento_casamento.pdf");  // Insere um anexo



if(!$mail->Send()) {
 echo '<span>Erro ao enviar, favor entre em contato pelo e-mail MEU EMAIL!</span>';
}else{
$_SESSION['enviado'] = '<div class="alert">Mensagem enviada com sucesso!</div>';


}
}


?>

 

Até aqui tá indo bem pois está enviando o email com os dados do usuario para meu email, e ele recebe uma resposta, porém, tanto eu quanto ele recebe o arquivo em anexo, notem que no formulário, tem 3 checkbox , eu não consegui encontrar uma forma de quando o usuario selecionar o checkbox casamento, seja enviado o arquivo "investimento_casamento.pdf", caso ele seleciona Casal e Gestante, seja enviado o arquivo "investimento_casal.pdf" e assim sucessivamente.

 

Acredito que não deve ser algo muito complexo porém não tenho tanto conhecimento e espero a ajuda de vocês, obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

tente passar o caminho completo do anexo.

 

$mail->AddAttachment("investimento_casamento.pdf");

Compartilhar este post


Link para o post
Compartilhar em outros sites

Este não é problema shini, o anexo está indo corretamente, o problema eu quero que somente o usuário receba o arquivo e de acordo com a seleção no formulário.

 

O arquivo está no mesmo diretório dos scripts.

Compartilhar este post


Link para o post
Compartilhar em outros sites

mude os valores (value) do radio para o nome do arquivo, depois concatene a extensão.

 

$mail->AddAttachment($_POST['tipo'].".pdf");

Compartilhar este post


Link para o post
Compartilhar em outros sites

mude os valores (value) do radio para o nome do arquivo, depois concatene a extensão.

 

$mail->AddAttachment($_POST['tipo'].".pdf");

Ok shini, realmente deu certo a seleção do checkbox e o envio do arquivo de acordo com o escolhido no form, o problema é que agora somente eu recebo o email com o anexo, e o "cliente" não recebe o orçamento solicitado, nem email nem anexo.

O que acha que pode ser?

 

shini, consegui resolver aqui, agora os 2 emails recebem o anexo, eu recebo os dados do formulário e o cliente recebe o orçamento, porém ambos recebemos com o anexo.

 

Há alguma instrução onde apenas o cliente recebe o anexo?

 

Ninguém mais sabe o que pode ser esse problema?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você esta chamando a função duas vezes, correto?

 

require('config.php');
sendMail($assunto,$msg,$email,$nome,'juliano.tavaress@gmail.com','Juliano Tavares', true); // Envia o e-mail com o anexo
sendMail('Pedido de Orçamento','obrigado por solicitar esse orçamento','juliano.tavaress@gmail.com','Juliano Tavares',$email,$nome); // Envia o e-mail sem o anexo

 

Você pode definir a sua função com um parâmetro para anexar o arquivo ou não.

 

<?php
function sendMail($assunto, $msg, $remetente, $nomeRemetente, $destino, $nomeDestino, $is_gmail = true, $sendAttachments = false) {
define('SMTPUSER', 'juliano.tavaress@gmail.com'); // sec. smtp username
define('SMTPPWD', '******'); // sec. password
define('SMTPSERVER', 'smtp.gmail.com'); // sec. smtp server

require_once('class.phpmailer.php'); //Include pasta/classe do PHPMailer
//$mail->SetLanguage("br", "language\\");

global $error;
$mail = new PHPMailer();
$mail->IsSMTP();
$mail->SMTPAuth = true;
if ($is_gmail) {
   	$mail->SMTPSecure = 'ssl';
   	$mail->Host = 'smtp.gmail.com';
   	$mail->Port = 465;
   	$mail->Username = GUSER;
   	$mail->Password = GPWD;
} else {
   	$mail->Host = SMTPSERVER;
   	$mail->Username = SMTPUSER;
   	$mail->Password = SMTPPWD;
}
$mail->From = $remetente; //remtente
$mail->FromName = utf8_decode($nomeRemetente); //remtetene nome
$mail->IsHTML(true);
$mail->Subject = utf8_decode($assunto); //assunto
$mail->Body = utf8_decode($msg); //mensagem
$mail->AddAddress($destino, utf8_decode($nomeDestino)); //email e nome do destino
$mail->WordWrap = 50; // Definição de quebra de linha

if ( $sendAttachments ):
   	$mail->AddAttachment("investimento_casamento.pdf");  // Insere um anexo
endif;

if (!$mail->Send()):
   	echo '<span>Erro ao enviar, favor entre em contato pelo e-mail MEU EMAIL!</span>';
else:
   	$_SESSION['enviado'] = '<div class="alert">Mensagem enviada com sucesso!</div>';
endif;

/*
	* Remove os e-mails de destino e anexos que por ventura fora incluido
	*/
$mail->ClearAddresses();
$mail->ClearAttachments();
$mail->IsHTML(false);
}

?>

 

 

Ok shini, realmente deu certo a seleção do checkbox e o envio do arquivo de acordo com o escolhido no form, o problema é que agora somente eu recebo o email com o anexo, e o "cliente" não recebe o orçamento solicitado, nem email nem anexo.

O que acha que pode ser?

 

shini, consegui resolver aqui, agora os 2 emails recebem o anexo, eu recebo os dados do formulário e o cliente recebe o orçamento, porém ambos recebemos com o anexo.

 

Há alguma instrução onde apenas o cliente recebe o anexo?

 

Ninguém mais sabe o que pode ser esse problema?

Compartilhar este post


Link para o post
Compartilhar em outros sites

adicione esses campos na variavel $msg.

 

seria isso.

$msg .= "cidade: ". $_POST['cidade'];

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.