Como configurar o XAMPP para enviar email do host local?

255

Estou tentando enviar email do localhost. mas não consigo enviar o email do localhost, alguém pode me dizer como reconfigurar meu xampp para enviar email do localhost

farid shaikh
fonte
3
Podemos ver seu código?
aizaz
2
Impossível ajudar se você não nos fornecer a configuração atual.
Arkascha 12/04/2013
1
Isso ainda é relevante com o Mercury incluído (ApacheFriends XAMPP 1.8.2)? Eu acho que sim, mas se houver pessoas preferindo Mercúrio, indique abaixo. :) Obrigado!
precisa saber é
Possível duplicata do sendmail.exe é aberta no envio de email
Pascal

Respostas:

371

Você pode enviar email do host local com o pacote sendmail, o pacote sendmail está embutido no XAMPP. Portanto, se você estiver usando o XAMPP, poderá enviar facilmente emails do localhost.

por exemplo, você pode configurar C:\xampp\php\php.inie o c:\xampp\sendmail\sendmail.inigmail enviar e-mail.

na C:\xampp\php\php.inidescoberta extension=php_openssl.dlle remover o ponto e vírgula a partir do início dessa linha para fazer SSL trabalhando para gmail para localhost.

no arquivo php.ini encontre [mail function]e altere

SMTP=smtp.gmail.com
smtp_port=587
sendmail_from = my-gmail-id@gmail.com
sendmail_path = "\"C:\xampp\sendmail\sendmail.exe\" -t"

Agora aberto C:\xampp\sendmail\sendmail.ini. Substitua todo o código existente no sendmail.ini pelo seguinte código

[sendmail]

smtp_server=smtp.gmail.com
smtp_port=587
error_logfile=error.log
debug_logfile=debug.log
auth_username=my-gmail-id@gmail.com
auth_password=my-gmail-password
force_sender=my-gmail-id@gmail.com

Agora você já fez !! crie um arquivo php com a função mail e envie um email do localhost.

PS: não se esqueça de substituir my-gmail-id e my-gmail-password no código acima. Além disso, não se esqueça de remover chaves duplicadas se você copiou as configurações de cima. Por exemplo, comente a seguinte linha se houver outro sendmail_path : sendmail_path="C:\xampp\mailtodisk\mailtodisk.exe"no arquivo php.ini

Lembre-se também de reiniciar o servidor usando o painel de controle XAMMP para que as alterações entrem em vigor.

Para o gmail, verifique https://support.google.com/accounts/answer/6010255 para permitir o acesso de aplicativos menos seguros.

Para enviar email no Linux (com pacote sendmail) através do Gmail a partir do localhost, verifique PHP + Ubuntu Enviar email usando o formulário do gmail localhost .

Vikas Dwivedi
fonte
3
diferente das configurações acima, eu precisava atualizar meu sendmail glob.com.au/sendmail
kaz
1
Eu tive que atualizar do XAMMP 1.7.7 para 2.8.2.3 - o sendmail está incluído no XAMPP mais recente. Eu tentei usar um sendmail mais recente com 1.7.7 há alguns meses atrás e não consegui fazê-lo funcionar - finalmente mordi a bala e usei o novo XAMPP e ele funciona como descrito.
VanAlbert
2
Acredito que a localização C: \ xampp \ php \ php.ini se refira a ambientes Windows. Para mac, procure xamppfiles / etc no seu arquivo php.ini.
Paul Trotter
3
@Vikas resposta foi melhor, mas por favor note que a utilização do SSL padrão no smtp_port pode não funcionar em determinada condição, utilizando 465 como resposta murugan Thirumalai declarou na verdade fixa-lo para mim
Temitayo
2
Está funcionando perfeitamente com o XAMPP versão 7.0.15. Não se esqueça de remover o ponto-e-vírgula e fazer o login com o mesmo ID do Gmail que você configurou. Acesse o link abaixo myaccount.google.com/lesssecureapps?pli=1 e permitir aplicações menos seguras: ON Agora você pode enviar o email diretamente do XAMPP localhost
raftaar1191
35

No XAMPP v3.2.1 para fins de teste, você pode ver os emails que o XAMPP envia no XAMPP / mailoutput. No meu caso no Windows 8, isso não exigiu nenhuma configuração adicional e foi uma solução simples para testar o email

Paul Trotter
fonte
1
E se isso não estiver funcionando, verifique c:\xampp\php\php.ini, procure [mail function]e descomente a linha mencionada mailtodisk.exe. Mantenha todas as outras linhas desta seção comentadas, exceto mail.add_x_headeraquela.
Tim Malone
3
Como um complemento ao meu comentário acima, para as versões mais recentes do XAMPP, pode ser necessário adicionar manualmente a linha mailtodisk. Deve ser algo como isto:sendmail_path="C:\xampp\mailtodisk\mailtodisk.exe"
Tim Malone
Um adendo adicional para comentar de @TimMalone. Eu achei que o correio só seria escrito para XAMPP / mailoutput se executando XAMPP como admin
sohail
@sohail: Você não tem que correr XAMPP como admin mas você tem que dar permissão para todos os usuários de escrever para a pasta XAMPP / mailoutput (clique direito sobre pasta> Segurança> todos os usuários> Editar permissões> acesso completo)
cheppsn
@TimMalone Eu apliquei as duas sugestões, mas nada no diretório mailoutput mesmo depois de tantas tentativas
Vipul Hadiya
25

É muito simples enviar e-mails no host local ou servidor local

Nota: Estou usando o software de servidor de email de teste no Windows 7 64bit com o Xampp instalado

Basta baixar a ferramenta de servidor de correio de teste e instalar de acordo com as instruções fornecidas em seu site Test Mail Server Tool

Agora você precisa alterar apenas duas linhas no php.iniarquivo

  1. Encontre [mail function]e remova ponto e vírgula anterior;smtp = localhost
  2. Coloque o ponto e vírgula antes sendmail_path = "C:\xampp\mailtodisk\mailtodisk.exe"

Você não precisa alterar mais nada, mas se ainda não receber e-mails, verifique SMTP porto número da porta.

O método acima é para as configurações padrão fornecidas pelo software Xampp.

Vikas Khunteta
fonte
7
Se você não confiar nesse site, poderá usar o papercut do codeplex: papercut.codeplex.com .
Marcel Burkhard
Não precisei fazer nada para fazê-lo funcionar, basta instalá-lo.
vonUbisch
Eu só tive que mudar a porta
Pablo SG Pacheco
O que é nome de usuário e senha nesta instância?
Eoin
@Eoin nome de usuário e senha de quê?
Vikas Khunteta 9/10/19
23

Você pode testar o envio de email no seu PC sem Internet

você deve usar o Papercut neste aplicativo simples para testar o envio de e-mail. e você não precisa configurar nada.

Basta executá-lo e tentar testar o envio de email:

test_sendmail.php

<?php
$to = "[email protected]";
$subject = "My subject";
$txt = "Hello world!";
$headers = "From: [email protected]" . "\r\n" .
"CC: [email protected]";

mail($to,$subject,$txt,$headers);
?>

e você verá isso:

insira a descrição da imagem aqui

Espero que você tenha um bom dia. você pode me encontrar no Youtube para mais tutoriais Piseth Sok

Elogio!

Piseth Sok
fonte
1
Esta é realmente uma ótima solução, rápida e fácil, e posso começar a trabalhar diretamente. Recolher os servidores de correio localmente é um aborrecimento quando é apenas para desenvolvedores.
AdheneManx
1
Obrigado, eu usei isso para testar meu projeto também.
Piseth Sok
19

Você precisa configurar o SMTP no seu servidor. Você pode usar o SMTP do G Suite do Google gratuitamente:

<?php

$mail = new PHPMailer(true);

// Send mail using Gmail
if($send_using_gmail){
    $mail->IsSMTP(); // telling the class to use SMTP
    $mail->SMTPAuth = true; // enable SMTP authentication
    $mail->SMTPSecure = "ssl"; // sets the prefix to the servier
    $mail->Host = "smtp.gmail.com"; // sets GMAIL as the SMTP server
    $mail->Port = 465; // set the SMTP port for the GMAIL server
    $mail->Username = "[email protected]"; // GMAIL username
    $mail->Password = "your-gmail-password"; // GMAIL password
}

// Typical mail data
$mail->AddAddress($email, $name);
$mail->SetFrom($email_from, $name_from);
$mail->Subject = "My Subject";
$mail->Body = "Mail contents";

try{
    $mail->Send();
    echo "Success!";
} catch(Exception $e){
    // Something went bad
    echo "Fail :(";
}

?>

Leia mais PHPMailer aqui .

Thirumalai murugan
fonte
@Vikas resposta foi melhor, mas por favor note que a utilização do SSL padrão no smtp_port pode não funcionar em determinada condição, utilizando 465 como esta resposta tem afirmado realmente fixa-lo para mim
Temitayo
Eu usei a resposta @Vikas, mas usei um fragmento seu, ou seja, usando 465 como emtp_port. O bom trabalho de qualquer maneira
Temitayo
Erro fatal: Classe 'PHPMailer' não encontrada em C: \ xampp \ htdocs \ myweb \ email_script.php na linha 82
Shafizadeh
7

Como em minha experiência pessoal, descobri que algo muito semelhante à resposta de Vikas Dwivedi funcionará perfeitamente.

Etapa 1 (arquivo php.ini)

No arquivo php.ini localizado em xampp\php\php.ini. Altere as configurações para o seguinte:

 extension=php_openssl.dll
 [mail function]
 sendmail_path =":\xampp7\sendmail\sendmail.exe -t"
 mail.add_x_header=On

Desative outras variáveis mail funcitoncolocando-as ;antes delas. por exemplo;smtp_port=25

Etapa 2 (arquivo sendmail.ini)

No sendmail.ini localizado em xampp \ sendmail \ semdmail.ini, mude para o seguinte:

 smtp_server=smtp.gmail.com
 smtp_port=465
 smtp_ssl=auto
 auth_username=address@gmail.com
 auth_password=YourPassword

Etapa 3 (código)

Crie um arquivo php e use o seguinte:

 <?php
    mail($to, "subject", "body", "From: ".$from);
 ?>

Aviso prévio

  • Você precisa reiniciar o apache para que o php.ini seja recarregado.
  • você precisa ativar o acesso a aplicativos menos seguros do Google em https://myaccount.google.com/u/1/security
  • Pode ajudar a executar o Xampp com permissão de administrador.
M em
fonte
2

Este código é usado para o correio do seu host local XAMPP e sua conta do Gmail. Este código é muito fácil e funciona para mim tentar você mesmo.

Abaixo a alteração no arquivo php.ini

SMTP=smtp.gmail.com 
smtp_port=587 
sendmail_from = your@gmail.com 
sendmail_path = "\"C:\xampp\sendmail\sendmail.exe\" -t" 
extension=php_openssl.dll 

Abaixo a alteração no arquivo sendmail.ini

smtp_server=smtp.gmail.com
smtp_port=587
error_logfile=error.log
debug_logfile=debug.log 
auth_username=yourmail@gmail.com 
auth_password=your-gmail-password 
force_sender=yourmail@gmail.com  

Por favor, escreva o código abaixo no seu arquivo PHP para enviar um email

<?php 
    $to = "[email protected]";
    $subject = "Test Mail";
    $headers = "From: [email protected]\r\n";
    $headers .= "Reply-To: [email protected]\r\n";
    $headers .= "CC: [email protected]\r\n";
    $headers .= "MIME-Version: 1.0\r\n";
    $headers .= "Content-Type: text/html; charset=ISO-8859-1\r\n";
    $message = '<html><body>';
    $message .= '<img src="//css-tricks.com/examples/WebsiteChangeRequestForm/images/wcrf-header.png" alt="Website Change Request" />';
    $message .= '<table rules="all" style="border-color: #666;" cellpadding="10">';
    $message .= "<tr style='background: #eee;'><td><strong>Name:</strong> </td><td>Details</td></tr>";
    $message .= "<tr><td><strong>Email:</strong> </td><td>Details</td></tr>";
    $message .= "<tr><td><strong>Type of Change:</strong> </td><td>Details</td></tr>";
    $message .= "<tr><td><strong>Urgency:</strong> </td><td>Details</td></tr>";
    $message .= "<tr><td><strong>URL To Change (main):</strong> </td><td>Details</td></tr>";
    $addURLS = 'google.com';
    if (($addURLS) != '') {
        $message .= "<tr><td><strong>URL To Change (additional):</strong> </td><td>" . $addURLS . "</td></tr>";
    }
    $curText = 'dummy text';           
    if (($curText) != '') {
        $message .= "<tr><td><strong>CURRENT Content:</strong> </td><td>" . $curText . "</td></tr>";
    }
    $message .= "<tr><td><strong>NEW Content:</strong> </td><td>New Text</td></tr>";
    $message .= "</table>";
    $message .= "</body></html>";

    if(mail($to,$subject,$message,$headers))
    {
        echo "Mail Send Sucuceed";
    }
    else{
        echo "Mail Send Failed";    
    }
?>
Kishan Sorathiya
fonte
0

Você precisa definir um SMTPservidor e uma porta para isso. Todos, exceto como enviar e-mails de hosts ativos.

Este é um link útil sobre isso .

Nota: a porta não deve ser utilizada. Por favor, cuide para que, alguns aplicativos Skypeusem as portas padrão e evite o envio de email.

Vishnu R
fonte
Você pode evitar skype de usar a porta 80. seu sobre as configurações de conexão de skype
astroanu
0

passou mais de uma hora tentando fazer isso funcionar. para todos que têm o mesmo problema com todas as sugestões postadas não funcionando: você precisa reiniciar o Apache em sua interface do XAMPP! apenas reiniciar o XAMPP não funcionará !!

user3065579
fonte
0

Tentei várias maneiras de enviar um email do XAMPP Localhost, mas como o XAMPP não possui certificado SSL, minha solicitação de email foi bloqueada pelo Gmail ou por provedores de serviços SMTP semelhantes.

Então eu usei o MailHog para o servidor SMTP local, o que você precisa fazer é apenas executá-lo. localhost: 1025 é para servidor smtp, localhost: 8025 é para servidor de correio, onde você pode verificar os e-mails que enviou.

aqui está o meu código:

    require_once "src/PHPMailer.php";
    require_once "src/SMTP.php";
    require_once "src/Exception.php";

    $mail = new PHPMailer\PHPMailer\PHPMailer();

      //Server settings
    $mail->SMTPDebug = 3;                      // Enable verbose debug output
    $mail->isSMTP();                                            // Send using SMTP
    $mail->Host       = 'localhost';                    // Set the SMTP server to send through
    $mail->Port       = 1025;                                    // TCP port to connect to
    // $mail->Username   = '';                     // SMTP username
    // $mail->Password   = '';                               // SMTP password
    // $mail->SMTPAuth   = true;                                   // Enable SMTP authentication
    // $mail->SMTPSecure = 'tls';         // Enable TLS encryption; `PHPMailer::ENCRYPTION_SMTPS` also accepted

    //Recipients
    $mail->setFrom('[email protected]', 'Mailer');
    $mail->addAddress('[email protected]', 'Joe User');     // Add a recipient

    // Content
    $mail->isHTML(true);                                  // Set email format to HTML
    $mail->Subject = 'Here is the subject';
    $mail->Body    = 'This is the HTML message body <b>in bold!</b>';
    $mail->AltBody = 'This is the body in plain text for non-HTML mail clients';

    if(!$mail->Send()) {
        echo "Mailer Error: " . $mail->ErrorInfo;
    } else {
        echo "Message sent!";
    }

Link do Repositório do MailHog Github

uyghurbeg
fonte
0

além de todas as respostas, observe que no sendmail.iniarquivo:

auth_password = essa não é sua senha do Gmail

devido a uma nova preocupação de segurança do google, siga estas etapas para criar uma senha de aplicativo para este fim:

  1. acesse https://accounts.google.com/ na guia segurança
  2. ative a verificação em duas etapas
  3. volte para a guia segurança e crie uma senha de aplicativo (no menu suspenso selecione o aplicativo, você pode escolher 'outro')
ashkan nasirzadeh
fonte