Como enviar email localmente com PHP + Apache + PHPMailer e Gmail no Windows
Muito se busca na internet sobre como enviar emails através de seu servidor web local, e muito se encontra a respeito, talvez nada completo, mas tem muito material a respeito de envio de emails através de sua instalação local do PHP e Apache.
Mais cedo estava lendo um comentário de um usuário do Sistema Básico, o qual me questionava sobre uma forma de enviar emails através de seu servidor local e que chegassem corretamente em contas de email que utilizam servidores do Hotmail, Gmail, Yahoo, etc... isso me levou a montar esse simples tutorial ensinando a enviar emails através de suas aplicações utilizando PHP e Apache instalados localmente em conjunto com a classe PHPMailer e o melhor de tudo, envio autenticado.
A Primeira coisa é efetuar o download do PHPMailer para PHP 5 em formato ZIP
Extraia o conteúdo do arquivo baixado dentro do diretório raíz de seu servidor (DocumentRoot que você definiu no seu Apache), no meu caso é E:\sites.
Crie um arquivo php novo com o seguinte conteúdo:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
</head>
<body>
<?php
/*
Supondo que o arquivo esteja dentro do
diretório raíz e sub-diretório phpmailer/
*/
require "phpmailer/class.phpmailer.php";
// conteúdo da mensagem
$mensagem = "Testando o envio de email através de aplicações locais";
// Estrutura HTML da mensagem
$msg = "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\">";
$msg .= "<html>";
$msg .= "<head></head>";
$msg .= "<body style=\"background-color:#fff;\" >";
$msg .= "<strong>MENSAGEM:</strong><br /><br />";
$msg .= $mensagem;
$msg .= "</body>";
$msg .= "</html>";
// Abaixo começaremos a utilizar o PHPMailer.
/*
Aqui criamos uma nova instância da classe como $mail.
Todas as características, funções e métodos da classe
poderão ser acessados através da variável (objeto) $mail.
*/
$mail = new PHPMailer(); //
// Define o método de envio
$mail->Mailer = "smtp";
// Define que a mensagem poderá ter formatação HTML
$mail->IsHTML(true); //
// Define que a codificação do conteúdo da mensagem será utf-8
$mail->CharSet = "utf-8";
// Define que os emails enviadas utilizarão SMTP Seguro tls
$mail->SMTPSecure = "tls";
// Define que o Host que enviará a mensagem é o Gmail
$mail->Host = "smtp.gmail.com";
//Define a porta utilizada pelo Gmail para o envio autenticado
$mail->Port = "587";
// Deine que a mensagem utiliza método de envio autenticado
$mail->SMTPAuth = "true";
// Define o usuário do gmail autenticado responsável pelo envio
$mail->Username = "um-username-seu-no-gmail";
// Define a senha deste usuário citado acima
$mail->Password = "respectiva-senha-deste-username-acima";
// Defina o email e o nome que aparecerá como remetente no cabeçalho
$mail->From = "o-username@gmail.com";
$mail->FromName = "seu-nome-por-exemplo";
// Define o destinatário que receberá a mensagem
$mail->AddAddress("email-do-destinatário@provedor-de-email-do-destinatario");
/*
Define o email que receberá resposta desta
mensagem, quando o destinatário responder
*/
$mail->AddReplyTo("o-username@gmail.com", $mail->FromName);
// Assunto da mensagem
$mail->Subject = "Assunto-da-mensagem";
// Toda a estrutura HTML e corpo da mensagem
$mail->Body = $msg;
// Controle de erro ou sucesso no envio
if (!$mail->Send())
{
echo "Erro de envio: " . $mail->ErrorInfo;
}
else{
echo "Mensagem enviada com sucesso!";
}
?>
</body>
</html>
Salve este arquivo como email.php no seu diretório raíz, o mesmo que contem o diretório phpmailer/
Abra o arquivo php.ini, que no meu caso está dentro do diretório C:\php
Procure por:
;extension=php_openssl.dll
Retire o ';' do início da linha para descomentar e ativar a extensão php openssl, ficando assim:
extension=php_openssl.dll
Feito isso, agora levando em conta que salvou o arquivo email.php diretamente na raiz de seu servidor, digite na barra de endereço de seu navegador a seguinte URL:
http://localhost/email.php
Após acessar a URL acima, analise o resultado na tela.
Se deu alguma mensagem de erro, revise, se não adiantar a revisão, faça um comentário e tento ajudar.Se deu mensagem de sucesso, parabéns, você conseguiu.
Verifique a caixa de entrada da conta de email a qual você definiu em $mail->AddAddress, e veja se chegou alguma mensagem.
Espero que tenha gostado.
Nota: Para enviar emails localmente utilizando a função mail() do PHP, acredito que somente instalando um servidor SMTP.
Você pode tentar o hMailServer, que é justamente um servidor SMTP para Windows e pode resolver seu problema.
Não testei então fica por seu risco e conta. Você pode ainda dar uma olhada nesse link o qual alguns usuários que já testaram dão seu relato.
Bons estudos!


janeiro 24th, 2011 - 12:01
Muito bom cara!!! Ótimo mesmo, quase morri procurando como enviar e-mails através do localhost + phpmailer + google apps. E nunca havia pensado em ter que habilitar a extensão openssl no php.ini. Blog já no meus favoritos. Abração.
janeiro 24th, 2011 - 13:06
Que bom que te ajudei @Eder.
De fato, as vezes são detalhes que fazem a diferença.
Obrigado pelo comentário.
Abraço
fevereiro 12th, 2011 - 12:22
Roberto, sabendo que você é um expert em php, teria como criar um sistema para interagir junto com informações de e-mail recebidas?
Por exemplo: Ao receber um e-mail de uma conta qualquer (pre-configurada), seria possível em cima desse e-mail responder a outro e-mail automaticamente.
Eu não sei se você está conseguindo me entender mas, aí vai um exemplo mais prático.
Quero vender um produto na internet e, em cima da aprovação do pagamento do PagSeguro (enviado por e-mail), iria ser liberado um outro e-mail para o cliente que adquiriru o meu produto automaticamente. Isto é, alguem me compra um produto pago com PagSeguro, e se autorizado o pagamento, meu sistema irá disparar uma mensagem para o cliente com informações das formas de envio do produto, o mesmo deverá acontecer se o pagamento não for autorizado, enviando nesse caso uma mensagem de não pagamento.
Se puder me ajudar mais uma vez, agradeço.
Obrigado pelo espaço.
fevereiro 12th, 2011 - 14:32
@Everton, para expert falta muito, sou apenas entusiasmado com PHP ;)
Quanto a tua dúvida, entendo teu empenho para explicar o que deseja, mas não consegui entender o que você quer :|
Sério… explica melhor. ;)
fevereiro 13th, 2011 - 14:14
Ok!
Suponhamos que eu venda um produto em meu site com a forma de pagamento PagSeguro. Então, quando um visitante fecha um pedido e faz o pagamento através do PagSeguro, o PagSeguro me envia um e-mail com a confirmação desse cliente e com esse e-mail recebido, eu teria que passar um e-mail para o cliente, informando as formas de envio do produto que ele adquiriu em meu site.
A idéia seria, ao se confirmar o pagamento pelo PagSeguro, meu servidor iria disparar um e-mail automaticamente para o meu cliente informando os dados necessários e as formas de envio do produto adquirido, sem eu ter de ficar em frente ao computador verificando de hora em hora a autorização de algum pagamento para assim, enviar um e-mail para o cliente com os dados.
É como se fosse um autoresponder manipulado, sei lá.
Isso é possível??!
Espero ter sido claro. Conto cam a sua ajuda!
Obrigado.
fevereiro 13th, 2011 - 14:49
Olá @Everton… entedi agora o que deseja… nucna fiz essa implementação e vai depender do arquivo que recebe o retorno do pagseguro.
Você pode programar algum arquivo que receba a interação do pagseguro.
Não sei se o pagseguro tem alguma API que faça isso, vc teria que verificar isso.
Imagino que deva haver a possibilidade de o pagseguro enviar ter essa interação com teu sistema. tendo essa possibilidade, disparar o email seria o mais fácil do trabalho.
Procure informações sobre o pagseguro a respeito disso… assim que eu tiver um tempo procurarei saber mais sobre o assunto e posto aqui um tutorial completo.
Grande abraço
Bons estudos.
fevereiro 14th, 2011 - 21:11
Obrigado pelo apoio Roberto!
Vou procurar saber junto ao PagSeguro.
fevereiro 19th, 2011 - 15:24
Ok… qualquer coisa diga aí.
Abraço
março 29th, 2011 - 11:54
Sim, dá pra fazer mas não é muito útil da forma como você está pensando… O PagSeguro assim como outros sistemas de gateway de pagamento enviam um POST do servidor deles para o seu servidor (você precisa habilitar lá no gateway), este POST possui todas as informações da compra (exceto dados de pagamento).
Esta informação deve ser gravada em uma base de dados no teu server, dai você roda algum script para verificar se o registro X está marcado como PAGO e se já houve notificação (crie um campo flag e dê o valor 0 para não notificado e 1 para notificado), se não foi notificado envie um email.
Se você fizer baseado no POST de retorno, existe grande possibilidade de teu server estar ocupado, instável, em manutenção e não confirmar o recebimento do POST.
Falopa!
janeiro 28th, 2011 - 16:26
Boa tarde, Roberto. + 1 tutorial da hora heim!!!
Aqui funcionou, mas somente após comentar a linha ($mail->SMTPSecure = "tls";) , antes disso me apareceu o seguinte erro: "Language string failed to load: tls Erro de envio: Language string failed to load: tls" – dei uma lida em outros artigos onde disseram que "TSL" é uma espécie de conexão exclusiva do servidor gmail. Você poderia, por favor, me dizer melhor do que se trata? se é isso mesmo? Meu servidor é a hostnet e como já disse, comentei a linha e funcionou de boa.
Abraço.
janeiro 28th, 2011 - 20:43
Olá @Jean, o que imagino que aconteceu é o seguinte… este tutorial passa o conhecimento sobre como usar o servidor do GMAIL como SMTP, no caso não estaria usando o de teu provedor de hospedagem não.
Sendo assim se você tentou enviar utilizando uma conta de email criada por você no próprio servidor de hospedagem, então o SMTP é o de seu provedor de hospedagem e este provavelmente não utiliza SMTP seguro (TLS) e sendo assim não precisa deste protocolo de segurança, o GMAIL que exige isso. Inclusive as portas diferem também. Se está usando o servidor de hospedagem, o padrão na maioria dos servidores é utilizar a porta 25 e não a 587. Por isso indiquei o tutorial, mas adaptando à tua necessidade. Você mencionou 'tsl', mas é TLS o correto, não esqueça disso, e refere-se ao protocolo de segurança para envio, ou seja, um SMTP seguro, que em outros casos poderia ser exigido SSL. Veja como se fosse um site utilizando https ao invés de http.
No seu caso com o seu servidor de hospedagem, não precisa desta linha mesmo, apenas retire-a e substitua a porta para 25.
Espero ter ajudado, se sim, espalha a notícia :)
Bons estudos!
março 3rd, 2011 - 16:24
Olá Roberto, quato à idéia de interação do PagSeguro por alguma API (citado acima), descobri que o sistema PagSeguro disponibiliza um ‘TOKEN’ para cada usuário e é isso que verifica junto do site de vendas (vendedor) aidentificação do pagamento e envio do e-mail automático.
Eu vi há algum tempo na internet um sistema parecido, que faz todo esse trabalho atravéz de um simples botão de pagamento mas, a princípio não sei quais os segredos para isso funcionar…
Poderia nos dar alguma dica ou ideia?
Agradecido
março 3rd, 2011 - 18:59
Olá @Everton, por enquanto nessa questão eu não poderei ajudar, mas assim que eu me desvencilhar de um projeto grande que me envolvi, buscarei implementar isso como um teste em um de meus sites e quando obtiver resultado semelhante ao que tu procura eu postarei um tutorial e entrarei em contato direto com você.
Abração
abril 13th, 2011 - 10:10
Fiz conforme explicado ai.. mas retorna seguinte erro
Warning: fsockopen() [function.fsockopen]: SSL operation failed with code 1. OpenSSL Error messages: error:1408F10B:SSL routines:SSL3_GET_RECORD:wrong version number in /home/baladas2/public_html/EnviaEmail/PhPMailer/class.smtp.php on line 122
Warning: fsockopen() [function.fsockopen]: Failed to enable crypto in /home/baladas2/public_html/EnviaEmail/PhPMailer/class.smtp.php on line 122
Warning: fsockopen() [function.fsockopen]: unable to connect to tls://smtp.gmail.com:587 (Unknown error) in /home/baladas2/public_html/EnviaEmail/PhPMailer/class.smtp.php on line 122
Erro de envio: SMTP Error: Could not connect to SMTP host.
abril 13th, 2011 - 10:37
Danilo, vc descomentou a extensão referente ao openssl (php_openssl.dll) conforme expliquei?
Se sim, eu te pergunto – O PHP que vc tem instalado é com a lib openssl integrada?
abril 20th, 2011 - 12:29
Muito obrigado!
Funcionou perfeitamente e de primeira! Sem erros!
abril 20th, 2011 - 14:42
Que bom que conseguiu @Gustavo.
Qualquer coisa fala aí.
abril 23rd, 2011 - 11:10
Eita, acho que nada funciona comigo ou eu não sei fazer nada, rs.
( ! ) Warning: stream_socket_enable_crypto() [streams.crypto]: this stream does not support SSL/crypto in C:\wamp\www\phpmailer\class.smtp.php on line 197
Call Stack
# Time Memory Function Location
1 0.0898 373200 {main}( ) ..\email.php:0
2 0.1200 1054672 PHPMailer->Send( ) ..\email.php:57
3 0.1214 1056008 PHPMailer->SmtpSend( ) ..\class.phpmailer.php:576
4 0.1330 1227440 PHPMailer->SmtpConnect( ) ..\class.phpmailer.php:705
5 1.3694 1237384 SMTP->StartTLS( ) ..\class.phpmailer.php:803
6 2.0975 1237600 stream_socket_enable_crypto ( ) ..\class.smtp.php:197
Apareceu isto na página. =[
abril 23rd, 2011 - 12:04
@Nathan, para que as coisas funcionem deve ler com atenção e não fazer as coisas rápido demais.
Leia com atenção, inclusive os comentários e você vai resolver esse problema.
Bons estudos!
abril 23rd, 2011 - 12:11
ai ai kkk
obrigado, vou reler tudo e fazer de novo.
fevereiro 15th, 2012 - 21:17
Nathan, você conseguiu?
Tive o mesmo problema.
setembro 7th, 2011 - 20:45
Talvez esse seja um erro besta mais ainda assim não consegui identifica-lo, eu coloquei tudo o que pedia e ainda assim não consegui.
setembro 7th, 2011 - 22:48
Olá @Airton, seja lá qual for, besta ou não, não tenho como adivinhar.
De mais detalhes, mas antes de tudo saiba que se não funcionou, alguma coisa vc fez diferente ou as configs do seu server, não estão de acordo.
Bons estudos
setembro 8th, 2011 - 11:46
Agradeço a atenção @Roberto inicialmente o erro que estava dando era igual ao do @Nathan então voltei a ler o código e tentar entender aonde estava errando, não vi nada de extraordinário, acessei o Gmail e fui ver as configurações de pop3 e smtp lá diz que a porta utilizada seria a 465 então mudei a porta. Desde então o erro acima não aparece mais e também não é enviado o e-mail. De novo agradeço a atenção.
setembro 8th, 2011 - 12:15
A porta é a que eu coloquei no tutorial.
Verifique se a autenticação está correta.
Abraço
setembro 8th, 2011 - 12:18
Parece que o erro esta sendo no SSL porém já o verifiquei varias vezes e ainda assim não funcionou, irei continuar tentando. Abraços
setembro 8th, 2011 - 14:43
@Ayrton, se vc colocar a mensagem de erro ajuda.
Se não tiver mensagem de erro dificulta.
Verificou em relação ao teu PHP se tem a biblioteca openSSL definida corretamente?
Alias… se a distribuição do PHP que vc instalou veio com a biblioteca junto.
março 26th, 2012 - 12:02
Ola eu estou a ter exactamente o mesmo problema.
Eu comentei a linha de cima:
extension=php_openssl.dll no ficheiro .ini
e da o mesmo problema, suponho que seja o problema de nao encontrar o ficheiro
na directoria correcta
março 26th, 2012 - 23:12
Minha resposta para essa sua dúvida seria a mesma mais acima, dada ao @Ayrton.
Verifique.
maio 3rd, 2011 - 01:49
Roberto, muito obrigado.
Funcionou perfeitamente.
maio 26th, 2011 - 10:13
Bom dia, seu email funciona perfeitamente a parte de envio.
O Unico cproblema que tive é reconhecer o html na caxa de entrada do Gmail, ele naum atribui as configuracoes HTML no email recebido pelo gmail e hotmail.
Sabe me dizer se exite outra forma de fazer o Gmail ler o HTML que foi enviado pelo arquivo
maio 26th, 2011 - 22:45
Olha, isso seria algo que não poderei ajudar por enquanto, pois já passei pela mesma dificuldade e aceitei as restrições.
Coisas que você pode usar é o CSS inline e html puro e tosco mesmo, pois qualquer gabaritada no HTML os sevidores de email já dão um jeito de desativar.
Boas pesquisas.
junho 2nd, 2011 - 12:30
Olá Roberto
Não consegui, aparecem os erros SMTP Error: Could not connect to SMTP host. Erro de envio: SMTP Error: Could not connect to SMTP host.
Utilizo xampp, tem alguma diferença?
Os arquivos que eu baixei do phpmailer ficam em uma subpasta da ferramenta php que estou testando.
No aguardo
junho 4th, 2011 - 00:13
Olá Jucy, você tentou utilizando uma conta de email do Gmail?
A biblioteca openssl está ativada no seu PHP?
Enfim.. eu precisaria de mais detalhes para poder te ajudar… pois o problema não está no sistema e sim da forma que você fez e nas condições que fez.
Somente com mais detalhes para poder ajduar.
Aguardo
junho 18th, 2011 - 21:33
Estou com problemas com o comando $mail->AddReplyTo, não dá erro e a mensagem é enviada, no cabeçalho do e-mail vem ‘responder para…e-mail correto’, porém quando clico em responder, é o e-mail do $mail->AddAddress que aparece no ‘para’. Uso o google apps, será que pode me ajudar?
Obrigada!
junho 24th, 2011 - 15:45
Enviei um email para você
Abraço
julho 18th, 2011 - 21:19
Funcionou de Primeira..
Valeu Velho
julho 18th, 2011 - 23:02
Bons estudos @Gabriel.
julho 28th, 2011 - 01:15
Olá Roberto,
Muito procurei por um scripts igual ao seu, muito explicativo e simples ao mesmo tempo, os comentarios são perfeitos, olhei em outros foruns e todas as explicações deixam quem é iniciante meio confuso!
Muito obrigado.
Att,
Rogerio Leal
julho 29th, 2011 - 13:32
Olá @Rogério, obrigado.
Qualquer coisa fala aí.
Bons estudos!
agosto 24th, 2011 - 18:47
Hace mucho tiempo que queria hacer esto muchas gracias funciono perfecto.
setembro 9th, 2011 - 17:54
Fiz conforme o seu tutorial e deu esse erro:
Warning: stream_socket_enable_crypto() [streams.crypto]: this stream does not support SSL/crypto in C:\Users\sr\Documents\Delphi for PHP Projects\srintranet\informatica\class.smtp.php on line 194
Sendo que as bibliotecas já estão habilitadas no php.ini e o arquivo php_openssl.dll está nesse endereço C:\Program Files\CodeGear\Delphi for PHP\2.0\php\ext
se você puder me ajudar eu agradeceria muito.
setembro 13th, 2011 - 20:22
Se vc seguiu todo o tutorial, não sei dizer ao certo oque pode estar ocorrendo.
Já pensou que a distribuição do PHP que vc instalou não seja a ideal para tanto?
Mesmo assim acho remoto a hipótese.
Difícil entender o porque o erro se diz ter feito corretamente habilitação do openssl.
Boa sorte
setembro 15th, 2011 - 13:08
Warning: fputs() expects parameter 1 to be resource, integer given in F:\webserver\apache2.2\htdocs\PHPMailer\class.smtp.php on line 212 SMTP Error: Could not authenticate. Erro de envio: SMTP Error: Could not authenticate.
Boa tarde, esse erro aconteceu depois que coloquei o email do yahoo
setembro 15th, 2011 - 18:46
Amigo o tutorial é para ser usado com email do GMAIL e não YAHOO
O GMAIL que usa a autenticação com aquela porta e com protocolo de segurança tls
Bons estudos
setembro 19th, 2011 - 11:08
Olá galera, já segui vários tutoriais, fiz de um tudo para rodar meu código, mas não obtive sucesso.
Olha, preciso enviar email autenticado pelo protocolo TLS e não SSL, com a porta 587, já ative o OPENSSL, mas mesmo assim não funciona. Ahhhh.. o servidor é particular e já verifiquei as configurações no servidor também…
Dá o seguinte erro… Warning: stream_socket_enable_crypto() [streams.crypto]: this stream does not support SSL/crypto
Como já disse, não consegui em nenhum tutorial, caso consiga aqui, divulgarei esse tutorial, pois vários amigos estão com o mesmo problema….
Segue meu código…
IsSMTP();
//Informa que a conexão com o SMTP será autenticado
$mail->SMTPAuth = true;
//Configura a segurança para SSL
$mail->SMTPSecure = “tls”;
//Informa a porta de conexão
$mail->Port = 587;
//Informa o servidor de saída
$mail->Host = “servidor”;
//Usuário para autênticação do SMTP
$mail->Username = “remetente”;
//Senha para autênticação do SMTP
$mail->Password = “senha”;
//Titulo do e-mail que será enviado
$mail->Subject = “Formulário de contato”;
//Preenchimento do campo FROM do e-mail
$mail->From = $mail->Username;
$mail->FromName = “Remetente”;
//E-mail para a qual o e-mail será enviado
$mail->AddAddress(“email do destinatário”);
//Conteúdo do e-mail
$mail->Body = “Novo contato feito através do site.”;
$mail->AltBody = $mail->Body;
//Dispara o e-mail
$enviado = $mail->Send();
//Imprime sucesso.
if($enviado)
echo “E-mail enviado com sucesso”;
else
echo “Falha no Envio”;
?>
Abraço
setembro 19th, 2011 - 12:42
Olá… já pensou em usar o meu tutorial ao invés desse código que vc postou?
E veja… esse tuto foi feito para funcionar somente com gmail
Aguardo retorno
setembro 30th, 2011 - 19:36
deu um errinho , mas eu comentei o codigo $mail->SMTPSecure = “tls”; e deu certo utilizando o smtp do yahoo brasileiro, e ainda, de quebra, to rodando com o IIS 6.0 do windows vista
show de bola !!!
setembro 30th, 2011 - 21:07
@Edmilson, esse erro ocorreu justamente porque tentou com yahoo, pois SMTPSecure utilizando tls é justamente uma exigência do google/gmail.
O tutorial foi feito para o Gmail, porque desta forma vc pode enviar email autenticado… com yahoo nunca testei massivamente para ter certeza que os emails não cairão em spam
abraço
outubro 15th, 2011 - 20:35
Parabéns pelo artigo. Foi o Único que encontrei que realmente funciona.
“Adicionado aos favoritos…!”
outubro 19th, 2011 - 17:32
Valeu @Lucas
Abraços
outubro 31st, 2011 - 19:09
SMTP Error: Could not connect to SMTP host. Erro de envio: SMTP Error: Could not connect to SMTP host.
trokei de tsl para ssl e e da esse erro. e deixando tsl da erro:
Warning: stream_socket_enable_crypto() [streams.crypto]: this stream does not support SSL/crypto in C:\wamp\www\brincadera\phpmailer\class.smtp.php on line 197
outubro 31st, 2011 - 21:02
vc está usando gmail??
Se não estiver usando gmail não precisa o protocolo.
Se tiver usando Gmail, o protocolo é tls, e a porta, a que informei no tutorial e nesse caso o problema está provavelmente no openssl que não deve estar instalado com a distribuição do PHP que vc usa.
Qualquer coisa fala aí
Bons estudos.
novembro 11th, 2011 - 18:18
Depois de ter procurado, experimentado e corrigido mil vezes, achei o teu tuto, e funcionou beleza !
Inclusive funciona tambem numa conta do hotmail (mudando o host, o username e o password, é claro).
Agora é só adaptar ao que preciso.
Valeu mesmo Roberto !! :))
novembro 12th, 2011 - 18:15
Bons estudos
novembro 12th, 2011 - 15:34
Após ter testado, percebi que ” $mail->AddReplyTo($mail->From,$mail->FromName); ” não é tomado em considereção no site de GMAIL.
Para ser mais preciso, parece que si a conta usada para mandar o mail é a mesma que recebe o mail, AddReplyTo() não é considerado.
Quando se clica no botão ”responder”, coloca automaticamente “resposta para : Username” (a conta usada para mandar o mail)
Si eu uso uma outra conta, aí sim a resposta vai ser para AddReplyTo().
Os dados de meu formulário são enviados pela conta que eu uso para o site, e são recebidos nesta mesma conta. Para responder, vou ter que preencher o campo ‘para’ com o endereço de quem me mandou o mail.
Será que da para “enganar” gmail para que ele toma em consideração AddReplyTo() neste caso ?
novembro 14th, 2011 - 17:01
@Stephan, após sua dúvida fiz o seguinte teste aqui, usando o server do gmail:
…
$mail->FromName = $_POST['nome'];$mail->AddAddress("email@gmail.com");
$mail->AddReplyTo($_POST['email'], $mail->FromName);
$mail->Username = "email@gmail.com";
$mail->Password = "senha";
…
Desta forma testei enviando o form com um email diferente de email@gmail.com e usando o mesmo email que utilizei no AddAdress
Sempre que usei o reply lá no painel do gmail ele abria uma caixa de reposta com o ‘para’ apontando para o que tem em $_POST['email']
Sendo assim não sei mais como ajudar, pois está tudo ocorrendo da melhor forma que tem que ser.
Teste novamente, com atenção no que falei.
Bons estudos
novembro 14th, 2011 - 18:21
Talvez o gmail interpreta diferente para mim ;)
Na verdade minha conta é uma conta do gmail que usa um nome de dominio proprio :
minhaconta@meudominio.com
No painel do gmail, a mensagem é identificada desde a sua chegada como vindo de “mim”.
Vou tentar achar a solução, mas não esquenta que, em ultimo caso posso abrir uma outra conta só para isso.
Valeu !
novembro 14th, 2011 - 21:23
Na verdade @stephan, tbm testei em uma conta do apps e ocorreu conforme mencionei
;)
novembro 12th, 2011 - 18:52
roberto pela mor de deus cara faz quase 1 mes q to tentando fazer isso duncionar, cara tem como vc upar seu php.ini pra mim em algum link pra mim copiar deixe ele pre definido com o tal do openssl?
novembro 12th, 2011 - 22:44
@cesar, se vc baixou a distribuição do PHP que indiquei e fez como indiquei, tudo tem que funcionar.
Se eu te passo meu php.ini, de anda adianta se a distribuição do teu php for diferente da minha.
novembro 13th, 2011 - 08:44
eu to usando o wampserver :(
novembro 13th, 2011 - 08:47
cara iss opel ssl eu descomentei a linha dele porem quando abro o phpinfo ele nao aparece la como enable
novembro 13th, 2011 - 11:53
roberto deu certo cara meu deus pulei de alegria usahshau eu baixei o wimp server e depois baixei um plugin openssl do site deles dae ativei o mesmo,agora deu certo,mais uma duvida ele nao manda pra hotmail?
novembro 13th, 2011 - 17:49
Se baixasse as distribuições que eu indiquei, teria conseguido de primeira… pacotes como os que usa, geralmente tem algumas atribuições extras que deve fazer, exatamente como o fez com esse plugin.
Quanto ao Hotmail… sim… acredito que sim, mas veja que o hotmail tem suas políticas… não garanto nada, mas bastará retirar estas referências:
-> RETIRE// Define que os emails enviadas utilizarão SMTP Seguro tls
$mail->SMTPSecure = "tls";
-> SUBSTITUA PELO HOTMAIL (procure saber qual é)
// Define que o Host que enviará a mensagem é o Gmail
$mail->Host = "smtp.gmail.com";
-> RETIRE
//Define a porta utilizada pelo Gmail para o envio autenticado
$mail->Port = "587";
Com o yahoo talvez tenha mais sucesso, mas tente aí.
Bons estudos
novembro 14th, 2011 - 18:25
Para mim funciona perfeito com o hotmail :
$mail->Host = “smtp.live.com”;
$mail->Username = “eu@hotmail.com”;
$mail->Password = “minhasenhahotmail”;
dezembro 1st, 2011 - 09:51
Olá amigo.
No meu caso, parece que o erro é no phpmailer.
Já verifiquei o código e a sintaxe dele parece-me correta.
Se puder ajudar, agradeço muito.
Segue o erro abaixo:
( ! ) Warning: stream_socket_enable_crypto() [streams.crypto]: this stream does not support SSL/crypto in C:\wamp\www\ABD\phpmailer\class.smtp.php on line 197
Call Stack
# Time Memory Function Location
1 0.0049 373712 {main}( ) ..\email.php:0
2 0.0379 1055208 PHPMailer->Send( ) ..\email.php:88
3 0.0400 1056560 PHPMailer->SmtpSend( ) ..\class.phpmailer.php:576
4 0.0539 1228032 PHPMailer->SmtpConnect( ) ..\class.phpmailer.php:705
5 2.0874 1237856 SMTP->StartTLS( ) ..\class.phpmailer.php:803
6 2.6745 1238072 stream_socket_enable_crypto ( ) ..\class.smtp.php:197
dezembro 7th, 2011 - 13:17
Olá, pelo que percebi no caminho do seu dir, está utilizando algum pacote WAMP
Verifique no local que efetuou download desse seu pacote WAMP se tem algum plugin, algum download adicional em relação à SSL, conforme mencionei a necessidade no próprio tutorial.
Bons estudos
janeiro 31st, 2012 - 00:59
Parabéns pelo blog. Estou no começo da linguagem, e preciso fazer o seguinte sistema: assim que um usuário se cadastra no sistema, eu tenho que enviar para ele a sua senha, e com ela, ele passa a logar no sistema. Meu professor do curso técnico indicou que usássemos a função MAIL, porém, depois de varias tentativas e pesquisas, percebi que ela não funciona no localhost e com o smtp padrão, que vem no phpini.
Decidi então usar a classe phpmailer, mas como nunca trabalhei com classes no curso, estou tendo algumas dificuldades para adaptar o código ao meu sistema.
Com este código que você postou no blog, quais seriam as alterações que eu preciso fazer?
Desde já, parabéns pelo blog. Site nos favoritos
janeiro 31st, 2012 - 13:32
Olá @Yan, primeiramente obrigado.
Para adaptar o phpMailer em qualquer sistema que utilize o envio de mensagens via SMTP basta seguir este tutorial.
No seu caso, substitua o que diz respeito a utiliação mail() pelos parâmentros necessários para utilização do phpMailer citados neste tutorial.
Se precisar de um suporte mais direcionando, efetue uma doação para ajudar o Sistema Básico e entre em contato logo após que eu abro um canal de suporte direto com vc.
Bons estudos!
fevereiro 7th, 2012 - 12:43
Colega isso ai envia somente um email de cada vez ou tem como colocar lista
fevereiro 7th, 2012 - 22:20
“ISSO” pode enviar como cópia e cópia oculta para outros destinatários a mesma mensagem.
Vc pode colocar o sistema para rodar em um loop tbm.
Seja qual for a forma que use deves respeitar as normas de teu server quanto ao envio de newsletter para grandes listas de email.
Procure sobre PHPMAILER no google e encontrará outras diretrizes que podem ajudar na configuração da forma que deseja.
Bons estudos
fevereiro 11th, 2012 - 19:10
Como eu acho a pasta do meu servidor? É no disco C? Aonde?
Ajudem-me por favor…:-(
fevereiro 11th, 2012 - 20:01
Olá @Liliana, na verdade e4ste site é uma iniciativa individual minha, não há uma equipe atrás das cortinas, apenas eu, Roberto.
Quanto à sua dúvida, na verdade eu que fiquei na dúvida do proque a sua dificuldade.
Que pasta é essa que está perguntando??
Este tutorial não é para vc receer emails no seu compuitador e sim enviar a partir dele usando uma conta do Gmail de forma autenticada.
Qualquer coisa fala aí.
Abraços
fevereiro 13th, 2012 - 09:54
Colega configurei aqui deu tudo certo, mais nao envia engenharia html
vc sabe me dizer porque ou tem outro ai que envia?
Grato…
fevereiro 13th, 2012 - 11:43
Olá @Marcio, o gmail tem essa implicância com o html rs*
Mas se vc escrever html bruto e 4.1 pode dar certo.
Abuse de tabelas e imagens.
Não utilize CSS rel, use inline, ou seja, diretamente na tag que deseja aplicar o css.
Tente fazer bem tosco mesmo.
Abraço
fevereiro 13th, 2012 - 11:47
mano olha so
// Assunto da mensagem
$mail->Subject = “Assunto-da-mensagem”;
// Toda a estrutura HTML e corpo da mensagem
$mail->Body = $msg;
// Controle de erro ou sucesso no envio
if (!$mail->Send())
{
echo “Erro de envio: ” . $mail->ErrorInfo;
}
else{
echo “Mensagem enviada com sucesso!”;
a onde eu coloco a minha engenharia
tou testando com smto da terra
adciona eu ai corroatraz@hotmail.com
fevereiro 13th, 2012 - 12:46
@Marcio, vamos por partes…
O título do tutorial já diz que o esquema é enviar email AUTENTICADO com GMAIL e não Terra.
Se quiser tentar com outros servidores terá que fazer alterações na estrutura do script.
Para TENTAR (não funciona em todos e nem sei quais funcionam) usar servidor diferente deves alterar essas linhas:
RETIRAR ESSA
// Define que os emails enviadas utilizarão SMTP Seguro tls
$mail->SMTPSecure = "tls";ALTERAR ESSA PARA A DO SERVER QUE FOR USAR
// Define que o Host que enviará a mensagem é o Gmail
$mail->Host = "smtp.gmail.com";RETIRAR ESSA
//Define a porta utilizada pelo Gmail para o envio autenticado
$mail->Port = "587";RETIRAR ESSA
// Deine que a mensagem utiliza método de envio autenticado$mail->SMTPAuth = "true";
Caso o server que utilizar tenha regras para utenticação, então as linhas que eu disse pra retirar deverá alterar para as regras do teu server.
Quanto ao HTML bastas ter atenção ao tutorial:
Essa linha te diz oque?
// Toda a estrutura HTML e corpo da mensagem$mail->Body = $msg;
Todo conteúdo da variável $msg está atribuído nessa linha @Marcio
Pegou?? se não pegou é porque não leu o tutorial com atenção
Veja lá em cima no início do tutorial o que está atribuído à variável $msg
// Estrutura HTML da mensagem$msg = "< !DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\">";
$msg .= "";
$msg .= "";
$msg .= "";
$msg .= "MENSAGEM:
";
$msg .= $mensagem;
$msg .= "";
$msg .= "";
;)
fevereiro 13th, 2012 - 13:49
nao consegui coloca engenharia pra envia mais dei conta de colocar link
tira uma duvida. Esse ai nao tem como coloca lista de email pra envia nao
ou vc tem outro que faz isso?
Obrigado…
fevereiro 13th, 2012 - 14:32
Como não conseguiu? Percebeu onde vc adiciona o HTML na minha resposta anterior???
Enfim… esse tutorial é simples para envio de um email, afinal o Gmail ou qualquer outro server público tem políticas rígidas quanto ao envio de SPAM, não tem como vc enviar pra lista.
Tem, mas logo vc estará numa blacklist.
Para envio em massa, envolve programação sistemática para envio limitado por horas e dias e quantidade e etc, ou Contratar um servidor remoto que seja Dedicado para usar como servidor de envio de email e ainda assim terá que respeitar a política de privacidade e uso do servidor contratado.
Bons estudos
fevereiro 13th, 2012 - 21:49
Roberto,
A minha dúvida surgiu dessa frase: “Extraia o conteúdo do arquivo baixado dentro do diretório raíz de seu servidor (DocumentRoot que você definiu no seu Apache), no meu caso é E:\sites.”
Não sei ver qual a raiz do meu servidor. :$
Fiz o download mas não sei para onde extrair.
helppp
Beijo
fevereiro 14th, 2012 - 10:57
@Liliana, vc tem msn, gtalk skype?
Se sim me informe que conversamos por lá.
fevereiro 15th, 2012 - 21:45
Consegui \o/
fevereiro 17th, 2012 - 09:45
amigo olá tudo bem,é….seguinte:
eu utilizei teu código porém deu o seguinte erro:
Warning: stream_socket_enable_crypto() [streams.crypto]: this stream does not support SSL/crypto in C:\xampp\htdocs\cobrancaPop\phpmailer\class.smtp.php on line 197
o que poderá ser? aguardo noticias, vlw!!!
fevereiro 17th, 2012 - 10:05
Olá @Alcides, da uma conferida com mais atenção ao tutorial.
Releia todos os coments. (Outras pessoas tbm passam por esse problema que tem solução.)
Não deve ter o PHP com openssl integrado.
Mas faça o que eu disse nas duas primeiras linhas.
Teste e reteste.
Bons estudos.
março 9th, 2012 - 14:22
Olá!!
Seria possível enviar e-mails em massa utilizando esse método??
Será que os servidores googledianos permitiriam esse tipo ação??
Qual seria o total permitido para envio??
Será que eu poderia utilizar esse método em meu site, para então efetuar envios de formulários de contato e cadastro (média de 10.000 visitantes/mês).
Peço desculpas por tantas perguntas e dúvidas!
março 9th, 2012 - 15:48
Olá Anônimo, sim é possível enviar email em amssa, mas não exatamente com esse script do tutorial. Precisaria de algumas implementações para tornar o envio legal e sem risco de ser considerado um script de spammer.
O Google tem sua política de privacidade e termos de utilização, sendo assim terá que consulta-los para saber.
Pelo que eu sei tem limites sim.
O total permitido é como eu disse, terá que consultar os documentos do Google para saber ao certo, mas se não me engano é 500 envios por dia e não sei ao certo quantos por hora.
Esse método do tutorial é tranquilo para usar em formulários de contato e cadastro, isso se na soma total, menos que 500 pessoas fizerem contato e/ou cadastro por dia no seu site.
(verifique a quantidade por hora também)
Bons estudos
março 14th, 2012 - 22:17
Perfeito chará,
funcionou certinho
parabens !!
abril 9th, 2012 - 21:04
Ola Roberto!! …esse Tutorial acima funciona se eu estiver usando o AppServer ?? ou apenas o Xampp ??
att.
Jeferson !
abril 10th, 2012 - 08:55
Olá @JEferson, este tutorial tem como único objetivo ajudar na instalação de cada distribuição separadamente e exclusivamente para o Windows 7.
Se vc tem o AppServer instalado, você não precisa deste tutorial, pois já teria as ferramentas instaladas.
Porém saliento que um pacote fechado como AppServer ou algum pacote XAMP ou WAMP fechado, que encontramos pela internet, nada tem haver com esse tutorial.
Se teu desejo é seguir este tutorial, seria interessante desinstalar qualquer pacote desse segmento por conta e risco.
Bons estudos.
maio 4th, 2012 - 21:02
cara tentei usar o formulario mas no envio do email, esta dando erro. mas cadastra so nao envia a senha
vc pode me ajuda dinda.
maio 5th, 2012 - 11:19
Que erro ocorre? alguma mensagem?
Se tentou utilizar esse sistema com alguma conta do gmail, não tem porque dar errado
Se tentou com algum email seu, relacionado ao seu domínio, ou algum outro serviço de email público, você precisa fazer algumas alterações retirando algumas linhas do cod do phpmailer.
Da uma olhada em alguns coments acima, aqui neste tutorial e vai descobrir quais modificações.
Se for algo fora disso que falei… fica difícil saber o que pode ser.
maio 14th, 2012 - 12:37
Roberto por favor me ajuda.
O meu deu o seguinte erro:
Warning: require(phpmailer/class.phpmailer.php) [function.require]: failed to open stream: No such file or directory in C:\wamp\www\email2\email.php on line 17
Fatal error: require() [function.require]: Failed opening required ‘phpmailer/class.phpmailer.php’ (include_path=’.;C:\php5\pear’) in C:\wamp\www\email2\email.php on line 17
no aguardo.
maio 14th, 2012 - 13:07
@Thiago, o erro está claro na sua prórpia mensagem de erro.
Você precisa incluir o arquivo que está no caminho phpmailer/class.phpmailer.php no arquivo email.php.
Se você incluiu ele no seu arquivo email.php atraves de
require, conforme tutorial o erro está na definição do caminho, ou seja, um erro de hierarquia dos diretórios.Se o phpmailer/class.phpmailer.php está dentro da pasta email2/, no memso local do arquivo email.php, não era pra dar errado.
Se está fora da pasta email2/ não precisa alterar, porém precisa definir o caminho exato no arquivo email.php.
Exemplo: arquivo email.php está no dir www/email2/,
mas o class.phpmailer.php está no seu diretório raíz … www/ ou seja, assim: www/phpmailer/
Então o caminho do requeire no arquivo email.php deve ser:
require "../phpmailer/class.phpmailer.php";É só um exemplo… deves fazer conforme a sua estrutura.
Se sua estrutura for como no exemplo, então vai facilitar a correção.
maio 14th, 2012 - 14:06
O pior que esta tudo certo, a classe phpmailer.php esta na mesma pasta do email.php. Eu baixei a versão php 5 sera que o erro esta ai?
maio 14th, 2012 - 16:00
Pelo erro o script está procurando a classe na pasta phpmailer/ e não na pasta email2/
Se estiver colcaondo a classe direto na pasta email2/ deves arrumar o caminho do requeire que está indicando que está em phpmailer/class.phpmailer.com