Ir para conteúdo

POWERED BY:

Arquivado

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

jgainfo

PHP Mailer não envia email para Hotmail

Recommended Posts

Oi, tudo bem! Estou utilizando a classe PHPMailer para enviar emails autenticados, porem ele não envia para o hotmail. Envia para o Yahoo, Gmail etc... normalmente, tanto local como remoto!

 

Alguém saberia como resolver isso!

 

Muito obrigado!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Provavelmente ele esteja enviando e o hotmail esteja negando o recebimento pelo domínio/ip/etc estar na lista negra. Neste caso não há o que fazer.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu nunca utilizei o mandrill já ouvi falar, fui no Site deles tem um exemplo em PHP, mas ainda não compreêndi direito se é pra inserir no código do PHPMailer, ou é apenas ele mesmo? Tem que baixar ele igual ao PHPMailer, correto, e fazer as configurações como se fosse parecido ao PHPMailer?

 

Você teria algum exemplo de uso?

 

 

Muito obrigado!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tem que baixar ele igual ao PHPMailer

Não, depois de cadastrado, pega somente as configurações do mandrill e seta nas config do phpmailer, como se fosse as de seu servidor mesmo.

 

Exemplo.

<?php


class ConfigPHPMailer {

	public $default = array(
	
		//v=spf1 +a +mx +ip4:46.105.142.97 ~all
		'from' => 'contato@site.com.br',
		'fromName' => 'Suporte',
		'sender' => null,
		'to' => null,
		'cc' => null,
		'bcc' => null,
		'addBCC' => null,
		'replyTo' => 'contato@site.com.br',
		'readReceipt' => null,
		'returnPath' => null,
		'messageId' => true,
		'subject' => null,
		'message' => null,
		'headers' => null,
		'viewRender' => null,
		'template' => false,
		'layout' => false,
		'viewVars' => null,
		'attachments' => null,
		'emailFormat' => 'html',
		'isHTML' => true,
		'transport' => 'Smtp',
		'tls' => true,
		'SMTPSecure' => 'tls',
		'SMTPAuth' => true,
		'host' => 'smtp.mandrillapp.com',
		'port' => 587,
		'timeout' => 30,
		'username' => 'email_cadastrado_no_madrill@site.com.br',
		'password' => 'Nco_moDgB99dfsdfBmkUg',
		'client' => null,
		'log' => true,
		'charset' => 'utf-8',
		'headerCharset' => 'utf-8',

		//Enable SMTP debugging
		// 0 = off (for production use)
		// 1 = client messages
		// 2 = client and server messages
		'debug' => 0
	);

}

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigado por responder, e a demora, é que eu estava tentando entender o Mandrill e as configurações, porque nunca utilizei ele, alias ele é do MailChimp, esse eu conheço rsrsrs, embora também não utilizei ainda!

 

Eu posso utilizar exatamente como neste exemplo, claro alterando os dados para minha configuração.

 

O Mandrill é um disparador de emails, correto? Eu não vou fazer email marketing, apenas enviar emails para que entrar em contato comigo pelo site, ele serve normalmente para essa função?

 

Eu preciso realmente incluir o PHPMailer, ou esse código já bastaria para enviar os emails? Porque no seu código de exemplo não faz chamada da classe PHPMailer. Apenas com esse código com as devidas alterações, já funcionaria?

 

Eu já fiz o cadastro peguei as informações necessarias como:Host, Port, SMTP User e SMTP Password.

 

No campo "Password" eu coloco a API KEY, correto?

 

Pra entender, esse código seria do PHPMailer sem incluir a classe pois não precisa apenas alterar as configurações, passando as do Mandrill?

 

Muito obrigado mesmo pela ajuda!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu posso utilizar exatamente como neste exemplo, claro alterando os dados para minha configuração.

Na realidade, eu desenvolvi uma classe que alterna as configurações dinamicamente, através da classe acima, para outlook, gmail, meus servidores etc, setando através de setters em outra classe que inclui as config do PHPMailer

 

 

O Mandrill é um disparador de emails, correto? Eu não vou fazer email marketing, apenas enviar emails para que entrar em contato comigo pelo site, ele serve normalmente para essa função?

Correto, é uma API de SMTP, mas serve para configurar programas de disparos como por exemplo rapid mailer, que é parecido com MailChimp e roda em cima da plataforma Wordpress

 

 

Eu preciso realmente incluir o PHPMailer, ou esse código já bastaria para enviar os emails? Porque no seu código de exemplo não faz chamada da classe PHPMailer. Apenas com esse código com as devidas alterações, já funcionaria?

Use o PHPMailer

 

 

Eu já fiz o cadastro peguei as informações necessarias como:Host, Port, SMTP User e SMTP Password.

 

No campo "Password" eu coloco a API KEY, correto?

 

Só altera no PHPMailer as configurações de acesso.

 

 

<?php
/**
 * This example shows making an SMTP connection with authentication.
 */

//SMTP needs accurate times, and the PHP time zone MUST be set
//This should be done in your php.ini, but this is how to do it if you don't have access to that
date_default_timezone_set('Etc/UTC');

require '../PHPMailerAutoload.php';

//Create a new PHPMailer instance
$mail = new PHPMailer;
//Tell PHPMailer to use SMTP
$mail->isSMTP();
//Enable SMTP debugging
// 0 = off (for production use)
// 1 = client messages
// 2 = client and server messages
$mail->SMTPDebug = 2;
//Ask for HTML-friendly debug output
$mail->Debugoutput = 'html';
//Set the hostname of the mail server
$mail->Host = "smtp.mandrillapp.com";
//Set the SMTP port number - likely to be 25, 465 or 587
$mail->Port = 587;
//Whether to use SMTP authentication
$mail->SMTPAuth = true;
//Username to use for SMTP authentication
$mail->Username = "yourname@example.com";
//Password to use for SMTP authentication
$mail->Password = "yourpassword";
//Set who the message is to be sent from
$mail->setFrom('from@example.com', 'First Last');
//Set an alternative reply-to address
$mail->addReplyTo('replyto@example.com', 'First Last');
//Set who the message is to be sent to
$mail->addAddress('whoto@example.com', 'John Doe');
//Set the subject line
$mail->Subject = 'PHPMailer SMTP test';
//Read an HTML message body from an external file, convert referenced images to embedded,
//convert HTML into a basic plain-text alternative body
$mail->msgHTML(file_get_contents('contents.html'), dirname(__FILE__));
//Replace the plain text body with one created manually
$mail->AltBody = 'This is a plain-text message body';
//Attach an image file
$mail->addAttachment('images/phpmailer_mini.png');

//send the message, check for errors
if (!$mail->send()) {
    echo "Mailer Error: " . $mail->ErrorInfo;
} else {
    echo "Message sent!";
}

Pra entender, esse código seria do PHPMailer sem incluir a classe pois não precisa apenas alterar as configurações, passando as do Mandrill?

 

Muito obrigado mesmo pela ajuda!

Sim expliquei lá em cima

 

 

Uma observação, não esqueça configurar em seu server

 

As config DKIM e SPF

 

Em Seu Server

https://mandrillapp.com/settings/sending-domains

Compartilhar este post


Link para o post
Compartilhar em outros sites

Segue meu código:

 

<?php

require_once 'phpmailer/class.smtp.php';
require_once 'phpmailer/class.phpmailer.php';


$Mailer = new PHPMailer();


// define que será usado SMTP
$Mailer->IsSMTP();


// envia email HTML
$Mailer->isHTML( true );


// codificação UTF-8, a codificação mais usada recentemente
$Mailer->Charset = 'UTF-8';


// Configurações do SMTP
$Mailer->SMTPAuth = true;
$Mailer->SMTPSecure = 'tls';
$Mailer->Host = 'smtp.mandrillapp.com';
$Mailer->Port = 587;
$Mailer->Username = 'SMTP User do Mandrill';
$Mailer->Password = 'SMTP Password do Mandrill';


// E-Mail do remetente (deve ser o mesmo de quem fez a autenticação
// nesse caso seu_login@gmail.com)
$Mailer->From = $remetente;


// Nome do rementente
$Mailer->FromName = utf8_decode($nomeRementente);


// assunto da mensagem
$Mailer->Subject = utf8_decode($assunto);


// corpo da mensagem
$Mailer->Body = utf8_decode($mensagem);


// corpo da mensagem em modo texto
$Mailer->AltBody = 'Mensagem em texto';


// adiciona destinatário (pode ser chamado inúmeras vezes)
$Mailer->AddAddress($destino,utf8_decode($nomeDestino));


// adiciona um anexo
//$Mailer->AddAttachment( 'arquivo.pdf' );


// verifica se enviou corretamente
if ( $Mailer->Send() )
{
$_SESSION['enviado'] = '<div class="contact-success"><h6>E-Mail enviado com sucesso!</h6><a id="email-esconder" href="#">X</a></div>';
echo "<script>location.href='http://www.meusite.com';</script>"; 


}
else
{
echo 'Erro do PHPMailer: ' . $Mailer->ErrorInfo;
}
}
?>

Enquanto as configurações do Server sobre o SPF e DKIM pelo que vi na net tem que ir no site do Mandrill, em Setting Domains e nos links view spf e dkim e pegar o valor que aparece na caixa e o nome do meu domínio e depois ir no meu CPanel em Editor de DNS Avançados e colocar essas informações lá, correto?

 

Uma coisa, o servidor que estou utilizando é simples e não tem essa opção!!!

 

Sem eu fazer esse processo não tem como o Mandrill enviar os emails???

 

Mais uma vez obrigado!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sem eu fazer esse processo não tem como o Mandrill enviar os emails???

Estas configurações e para que cheguem em 100% das caixas de entrada dos clientes de emails, mais especificamente outlook e familia microsoft.

 

Mas vai de boa, só testar!!!

E sobre o código, é isso ai mesmo. :thumbsup:

 

Abraços!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Segue um outro código que fiz mais simples e direto pois o outro pegava os dados de um formulário.

Este envia emails (Inclusive para o Hotmail) utilizando a classe PHPMailer e o Mandrill e pelos testes que fiz está funcionando corretamente:

 

<?php
require_once 'phpmailer/class.smtp.php';
require_once 'phpmailer/class.phpmailer.php';


$Mailer = new PHPMailer();


// define que será usado SMTP
$Mailer->IsSMTP();


// envia email HTML
$Mailer->isHTML( true );


// codificação UTF-8, a codificação mais usada recentemente
$Mailer->Charset = 'UTF-8';


// Configurações do SMTP
$Mailer->SMTPAuth = true;
$Mailer->SMTPSecure = 'tls';
$Mailer->Host = 'smtp.mandrillapp.com';
$Mailer->Port = 587;
$Mailer->Username = 'SMTP User';
$Mailer->Password = 'SMTP Password (API KEY)';


// E-Mail do remetente (deve ser o mesmo de quem fez a autenticação)
$Mailer->From = 'SMTP User';


// Nome do rementente
$Mailer->FromName = 'Nome';


// assunto da mensagem
$Mailer->Subject = 'Assunto';


// corpo da mensagem
$Mailer->Body = 'Mensagem';


// corpo da mensagem em modo texto
$Mailer->AltBody = 'Mensagem em texto';


// adiciona destinatário (pode ser chamado inúmeras vezes)
$Mailer->AddAddress('exemplo@hotmail.com');


// verifica se enviou corretamente
if ( $Mailer->Send() )
{
echo "E-mail enviado com sucesso!";


}else {
echo 'Erro do PHPMailer: ' . $Mailer->ErrorInfo;
}
?>

Fiz os testes em localhost utilizando o Wamp Server e funcionou corretamente, enviando emails inclusive para o Hotmail direto para a caixa de entrada.

 

No servidor remoto que estou utilizando não enviou, acredito por ser um servidor muito simples que estou usando, com certeza em outros mais profissionais acredito que enviará normalmente.

 

Muito obrigado á todos que me ajudaram e espero agora contribuir também!

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Opa! Estou de volta. É o seguinte, o código não está funcionando no servidor remoto. Fica um bom tempo carregando e depois me retorna a mensagem "Erro do PHPMailer: SMTP connect() failed.".

 

O que será que pode estar ocorrendo, já que localmente funciona corretamente!

 

Muito obrigado!


Creio que tenha que descomentar no PHP.ini opção "extension=php_openssl.dll", pois fiz isso localmente comentando esta linha e aconteceu o mesmo erro no server local, e voltando a descomentar a mesma linha ele voltou a funcionar corretamente.

Compartilhar este post


Link para o post
Compartilhar em outros sites

E ae man então tive dificuldades também no começo do php mailer e meu ultimo estava dando erro dentro da classe porque a função preg_replace() esta obsoleta a partir do php 5.5 http://php.net/manual/pt_BR/migration55.deprecated.php ... E dai consegui adaptar a funções dentro da classe phpmailer e fazer rodar legal...

 

Minha classe phpmailer atualizada esta neste outro tópico, e para não poluir aqui de tanto código dá uma olhada lá e copia:

 

 

http://forum.imasters.com.br/topic/533094-erro-php-mailer-atualizando-para-o-php-55-preg-replace-callback/

 

E aqui abaixo deixo meu código para enviar as mensagens e detalhe eu fiz uma adaptação neste código

para ele enviar uma mensagem automática para o usuário que enviar a mensagem para você:

 

Segue:

<?php
include("config.php");

ini_set( 'default_charset', 'utf-8');

?>
<?php

$nome          =$MySQLi->real_escape_string (strip_tags(trim($_POST['nome'])));
$email         =$MySQLi->real_escape_string (strip_tags(trim($_POST['email'])));
$mensagem      =$MySQLi->real_escape_string (strip_tags(trim($_POST['mensagem'])));





$data = date('d/m/Y ');
$hora= date('H:i:s');
require('phpmailer/class.phpmailer.php');
$mail = new PHPMailer();
$mail->IsSMTP();
$mail->SMTPAuth = true;
$mail->Port = 'SUA PORTA DO HOST SEM ASPAS';
$mail->Host = 'SEU HOST';
$mail->Username = 'SEU EMAIL';
$mail->Password = 'SUA SENHA';
$mail->SetFrom('EMAIL PARA ENVIO DAS MSGS', "".$nome."");
$mail->SetFrom('EMAIL 2 PARA ENVIO DAS MSGS', "".$nome."");
$mail->AddAddress('EMAIL OPCIONAL', "".$nome."");
$mail->IsHTML(true);
$mail->Subject = 'Formulário de Contato de Clientes';

$body = "


MENSAGEM RECEBIDA DE FULANO 


";

$mail->MsgHTML($body);
$pasta = 'uploads/';
$arquivos = glob("$pasta{*.jpg,*.png,*.gif,*.bmp}", GLOB_BRACE);
foreach($arquivos as $img){
 
echo $mail->AddAttachment;
$mail->AddAttachment ($img);
}
if($mail->Send());

// Script para deletar arquivos
// unlink -> funçõa do php para deletar arquivo

$pasta = 'uploads/';
$arquivos = glob("".$pasta."{*.jpg,*.png,*.gif,*.bmp}", GLOB_BRACE);
foreach($arquivos as $img){
 
$arquivos = $img;
if (!unlink($arquivos)){
echo ("Erro ao deletar ".$arquivo."");
}else{
echo ("Deletado ".$arquivo." com sucesso!");
} 
}
?>

<?php
$data = date('d/m/Y ');
$hora= date('H:i:s');
$mail = new PHPMailer();
$mail->IsSMTP();
$mail->SMTPAuth = true;
$mail->Port = 'SUA PORTA DO HOST SEM ASPAS';
$mail->Host = 'SEU HOST';
$mail->Username = 'SEU EMAIL';
$mail->Password = 'SUA SENHA';
$mail->SetFrom('EMAIL PARA ENVIO DAS MSGS', "".$nome."");
$mail->SetFrom('EMAIL 2 PARA ENVIO DAS MSGS', "".$nome."");
$mail->AddAddress('EMAIL OPCIONAL', "".$nome."");
$mail->IsHTML(true);
$mail->AddAddress($email);
$mail->Subject = "Resposta Automática de MSGS";


$body="

RESPOSTA AUTOMÁTICO PARA O USUÁRIO QUE TE ENVIOU A MSG

* OBRIGADO POR ENVIAR UMA MENSAGEM PARA NÓS EM BREVE RESPONDEREMOS *


";
$mail->MsgHTML($body);
$pasta = 'uploads/';
$arquivos = glob("".$pasta."{*.jpg,*.png,*.JPG,*.PNG, *png,*.gif,*.GIF,*.bmp}", GLOB_BRACE);
foreach($arquivos as $img){ 
echo $mail->AddAttachment;
$mail->AddAttachment ($img);
}
if($mail->Send());


?>

Note que nele já têm as funções que envia imagens e em seguida deleta da pasta, nele você têm a opção de enviar as imagens para a pasta no servidor ou no seu servidor de email , e também eu uso muito ele e ele nunca deixou na mão inclusive tanto a msg como a msg automática chega na caixa de entrada e não na caixa e spam, e chega chegando legal no hotmail que é o mais chato.

Inclusive a minha hospedagem tbm é chata que é a Uol-Host

Qualquer dúvida posta aí...

Compartilhar este post


Link para o post
Compartilhar em outros sites
@jgainfo

 

Analisando com mais calma seu código, no exemplo que postei aqui no post #9

 

eu coloquei um exemplo com a ultima versão, já habilitado o Debug para 2, para mostrar possíveis erros, vocês também tem que colaborar, tiramos tempo de onde não temos para ajudar, e você ainda pegar um código com configurações antigas de tutorias velhos, ai é foda. <_<

 

O Novo carrega com AutoLoad => PHPMailerAutoload.php

 

Já corrigidos as funções depreciadas.

require '../PHPMailerAutoload.php';

//Create a new PHPMailer instance
$mail = new PHPMailer;
//Tell PHPMailer to use SMTP
$mail->isSMTP();
//Enable SMTP debugging
// 0 = off (for production use)
// 1 = client messages
// 2 = client and server messages
$mail->SMTPDebug = 2;

baixe a nova versão e faça os testes devido

 

https://github.com/PHPMailer/PHPMailer

 

via composer

"phpmailer/phpmailer": "~5.2"

Coloque no inicio do script para ver se reporta algum erro

@ini_set('display_errors', 1);
@error_reporting(E_ALL | E_STRICT);	

Compartilhar este post


Link para o post
Compartilhar em outros sites

Segue o erros:

 

2015-05-22 21:51:29 SMTP ERROR: Failed to connect to server: Connection timed out (110) 2015-05-22 21:51:29 SMTP connect() failed. https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting Erro do PHPMailer: SMTP connect() failed. https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting

 

Estou utilizando a última versão do PHPMAILER! Tutorias velhos??? Se vc não tem tempo não ajuada então, é simples!

Agora me diga aonde não estou colaborando??? Não entendi o porquê vc vem falar assim? Aqui é um "Forum de Ajuda", "voluntária", as pessoas não são obrigadas a ajudar. Ajudam se quiser, pois sabem que as mesmas podem ser ajudadas, inclusive vc. Comentário desnecessário!

 

Mesmo assim obrigado!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Segue o erros:

 

2015-05-22 21:51:29 SMTP ERROR: Failed to connect to server: Connection timed out (110) 2015-05-22 21:51:29 SMTP connect() failed. https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting Erro do PHPMailer: SMTP connect() failed. https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting

 

Estou utilizando a última versão do PHPMAILER! Tutorias velhos??? Se você não tem tempo não ajuada então, é simples!

Agora me diga aonde não estou colaborando??? Não entendi o porquê você vem falar assim? Aqui é um "Forum de Ajuda", "voluntária", as pessoas não são obrigadas a ajudar. Ajudam se quiser, pois sabem que as mesmas podem ser ajudadas, inclusive você. Comentário desnecessário!

 

Mesmo assim obrigado!

E ai man beleza você tentou usar o meu script que deixei na #17 eu atualizei meu php mailer e na minha hospedagem uol host funciona de boa testa ai tio.

 

A sua hospedagem é paga ou gratuita algumas hospedagens gratuitas se for o seu caso ,da este tipo de problema , pois já tive problema com essas hospedagens...

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.