Ir para conteúdo

POWERED BY:

Arquivado

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

Programado0r

Enviando email com phpmailer e gmail.

Recommended Posts

O que vou escrever é um guia para quem está com o mesmo problema que estive. Ao pegar um serviço de um cliente que já possuía servidor eu precisava configurar o formulário de contato, para tal tarefa usei a classe PHPMAILER que pode ser baixada na sua versão 5.2 (no dia em que escrevo esta postagem). Link para Worx Internacional (desenvolvedor do PHPMAILER).

 

Porém o meu cliente usa o pacote google apps para seus emails e como nunca configurei sob tais condições 'apanhei' um pouco antes de obter sucesso.

segue abaixo meu código para aqueles que estão enfrentando o mesmo problema que eu tive:

<?php
include("phpmailer/class.phpmailer.php");

//instancia objetos
$mail = new PHPMailer();
$mail->IsSMTP(); //Caso seu servidor seja Windows (ele fala que a autenticação é via SMTP)
$mail->IsMail(); //Caso seu servidor seja Linux
$mail->SetLanguage("br", "language/"); // ajusto a lingua a ser utilizada

$mail->SMTPSecure = "tls"; //Pode ser tls ou ssl (sendo que tls é o sucessor do ssl, portanto melhorado).
$mail->Host = "smtp.gmail.com";
$mail->SMTP_PORT = 465;
$mail->SMTPAuth = true;

$mail->Username = "seuusername@gmail.com"; // SMTP username
$mail->Password = "suasenha"; // SMTP password

// Define que a mensagem poderá ter formatação HTML
$mail->IsHTML(true); //

$mail->SetFrom($_POST['email'], $_POST['nome']);
//Enderecos que devem ser enviadas as mensagens
$mail->AddAddress("teste@gmail.com","Contato do site");
//wrap seta o tamanhdo do texto por linha
$mail->WordWrap = 50; 

// recebendo os dados do formulario
....
//Para acentos ficarem sem erros use utf8_decode();

// informando a quem devemos responder 
//ou seja para o mail inserido no formulario
$mail->AddReplyTo("$email","$nome");

$mail->Subject = "Contato [site] -> ".$assunto;
//adicionando o html no corpo do email
$mail->Body = $msg;

if(!$mail->Send()){
echo "nao enviado<br/>";
//Mostra os erros.
echo $mail->ErrorInfo;
exit;

}else{
echo "Enviado com sucesso.";
}

 

*obs: caso seu phpmailer nao esteja reconhecendo a espressão '$mail->SMTP_PORT' ou dizendo que o $mail->Host (quando usado ssl://smtp.gmail.com) apresenta erro, atualize sua versão do phpmailer isso pode resolver.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pra mim fica dando o erro:

 

nao enviado
Message body empty

 

Aqui meu form:

<form action="enviar.php" method="post">
	<label for="Nome">Nome:</label>
	<input type="text" name="nome" size="35" /><br />

	<label for="Email">E-mail:</label>
	<input type="text" name="email" size="35" /><br />

	<label for="Assunto">Assunto:</label>
	<input type="text" name="assunto" size="35" /><br />

	<label for="Mensagem">Mensagem:</label>
	<textarea name="msg" rows="8" cols="40"></textarea><br />

	<input type="submit" name="Enviar" value="Enviar" />
</form>

 

E meu php:

 

<?php
include("phpmailer/class.phpmailer.php");

//instancia objetos
$mail = new PHPMailer();
$mail->IsSMTP(); //Caso seu servidor seja Windows (ele fala que a autenticação é via SMTP)
$mail->IsMail(); //Caso seu servidor seja Linux
$mail->SetLanguage("br", "language/"); // ajusto a lingua a ser utilizada

$mail->SMTPSecure = "tls"; //Pode ser tls ou ssl (sendo que tls é o sucessor do ssl, portanto melhorado).
$mail->Host = "smtp.gmail.com";
$mail->SMTP_PORT = 465;
$mail->SMTPAuth = true;

$mail->Username = "admin@dominio-gapps.com.br"; // SMTP username
$mail->Password = "****"; // SMTP password

// Define que a mensagem poderá ter formatação HTML
$mail->IsHTML(true); //
$mail->MsgHTML(file_get_contents(''));
$mail->SetFrom($_POST['email'], $_POST['nome']);
//Enderecos que devem ser enviadas as mensagens
$mail->AddAddress("xxx@gmail.com","Contato do site");
//wrap seta o tamanhdo do texto por linha
$mail->WordWrap = 50; 

// recebendo os dados do formulario
//Para acentos ficarem sem erros use utf8_decode();

// informando a quem devemos responder 
//ou seja para o mail inserido no formulario
$mail->AddReplyTo("$email","$nome");

$mail->Subject = "Contato [site] -> ".$assunto;
//adicionando o html no corpo do email
$mail->Body = $_POST["$msg"];  

if(!$mail->Send()){
echo "nao enviado<br/>";
//Mostra os erros.
echo $mail->ErrorInfo;
exit;

}else{
echo "Enviado com sucesso.";
}
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu na verdade estava testando, tentei fazer pelo exemplo acima,

$mail->Body = $msg;

e fica dando "Message body empty"

já trocando por

$mail->Body = "teste";

o erro muda pra "Não foi possível instanciar a função mail."

Compartilhar este post


Link para o post
Compartilhar em outros sites

O que pode estar errado pra dar esse tipo de erro? Os registros MX? Estão assim:

 

MX 1 aspmx.l.google.com. MX 10 aspmx2.googlemail.com. MX 10 aspmx3.googlemail.com. MX 5 alt1.aspmx.l.google.com. MX 5 alt2.aspmx.l.google.com. CNAME ghs.google.com

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.