¿Cómo configurar XAMPP para enviar correo desde localhost?

256

Estoy tratando de enviar correo desde localhost. pero no puedo enviar el correo desde localhost, ¿alguien puede decirme cómo reconfigurar mi xampp para enviar correo desde localhost?

farid shaikh
fuente
3
¿Podemos ver tu código?
aizaz
2
Imposible ayudar si no nos da la configuración actual.
arkascha
1
¿Sigue siendo relevante con Mercury incluido (ApacheFriends XAMPP 1.8.2)? Creo que sí, pero si hay personas que prefieren Mercurio, indíquelo a continuación. :) ¡Gracias!
agua helada
Posible duplicado de sendmail.exe se abre al enviar correo
Pascal

Respuestas:

372

Puede enviar correo desde localhost con el paquete sendmail, el paquete sendmail está incorporado en XAMPP. Entonces, si está utilizando XAMPP, puede enviar fácilmente correo desde localhost.

por ejemplo, puede configurar C:\xampp\php\php.iniy c:\xampp\sendmail\sendmail.inipara que gmail envíe correo.

en C:\xampp\php\php.inibuscar extension=php_openssl.dlly eliminar el punto y coma del comienzo de esa línea para que SSL funcione para gmail para localhost.

en el archivo php.ini buscar [mail function]y cambiar

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

Ahora abierto C:\xampp\sendmail\sendmail.ini. Reemplace todo el código existente en sendmail.ini con el siguiente 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

Ahora lo has hecho !! crear un archivo php con la función de correo y enviar correo desde localhost.

PD: no olvide reemplazar my-gmail-id y my-gmail-password en el código anterior. Además, no olvide eliminar las claves duplicadas si copió la configuración desde arriba. Por ejemplo, comente la siguiente línea si hay otro sendmail_path : sendmail_path="C:\xampp\mailtodisk\mailtodisk.exe"en el archivo php.ini

Recuerde también reiniciar el servidor utilizando el panel de control XAMMP para que los cambios surtan efecto.

Para gmail, consulte https://support.google.com/accounts/answer/6010255 para permitir el acceso desde aplicaciones menos seguras.

Para enviar correos electrónicos en Linux (con el paquete sendmail) a través de Gmail desde localhost, consulte PHP + Ubuntu Enviar correo electrónico utilizando el formulario de gmail localhost .

Vikas Dwivedi
fuente
3
aparte de las configuraciones anteriores, necesitaba actualizar mi sendmail glob.com.au/sendmail
kaz
1
Tuve que actualizar de XAMMP 1.7.7 a 2.8.2.3: sendmail está incluido en el XAMPP más nuevo. Intenté usar un sendmail más nuevo con 1.7.7 hace unos meses y no pude hacerlo funcionar; finalmente mordí la bala y usé el nuevo XAMPP y funciona como se describe.
VanAlbert
2
Creo que la ubicación C: \ xampp \ php \ php.ini se refiere a entornos de Windows. Para mac, busque en xamppfiles / etc para su archivo php.ini.
Paul Trotter
3
@Vikas respuesta fue mejor, pero tenga en cuenta que el uso del SSL por defecto en smtp_port podría no funcionar en ciertas condiciones, utilizando 465 como respuesta Thirumalai murugan ha declarado realidad fija para mí
Temitayo
2
Funciona perfectamente con XAMPP versión 7.0.15. Simplemente no olvide eliminar el punto y coma y también inicie sesión en el mismo ID de Gmail que ha configurado, luego vaya al enlace a continuación myaccount.google.com/lesssecureapps?pli=1 y Permitir aplicaciones menos seguras: ACTIVADO Ahora puede enviar el correo directamente desde el
servidor
35

En XAMPP v3.2.1 para fines de prueba, puede ver los correos electrónicos que XAMPP envía en XAMPP / mailoutput. En mi caso en Windows 8, esto no requería ninguna configuración adicional y era una solución simple para probar el correo electrónico

Paul Trotter
fuente
1
Y si esto no funciona, revise c:\xampp\php\php.ini, busque [mail function]y descomente la línea que menciona mailtodisk.exe. Mantenga comentadas todas las demás líneas de esta sección, excepto la mail.add_x_header.
Tim Malone,
3
Como complemento de mi comentario anterior, para las versiones más recientes de XAMPP, es posible que deba agregar manualmente la línea mailtodisk. Debería verse así:sendmail_path="C:\xampp\mailtodisk\mailtodisk.exe"
Tim Malone
Un apéndice adicional para comentar desde @TimMalone. Descubrí que el correo solo se escribiría en XAMPP / mailoutput si ejecuta XAMPP como administrador
sohail
@sohail: no tiene que ejecutar XAMPP como administrador, pero debe dar permiso a todos los usuarios para que escriban en la carpeta XAMPP / mailoutput (haga clic con el botón derecho en la carpeta> seguridad> todos los usuarios> permisos de edición> acceso completo)
cheppsn
@TimMalone He aplicado las dos sugerencias, pero nada en el directorio de salida de correo, incluso después de tantos intentos
Vipul Hadiya
25

Es muy simple enviar correos electrónicos en localhost o servidor local

Nota: Estoy usando el software de prueba del servidor de correo en Windows 7 de 64 bits con Xampp instalado

Simplemente descargue la herramienta de servidor de correo de prueba e instálela de acuerdo con las instrucciones dadas en su sitio web Herramienta de servidor de correo de prueba

Ahora solo necesita cambiar dos líneas debajo del php.iniarchivo

  1. Encuentra [mail function]y elimina el punto y coma que está antes;smtp = localhost
  2. Pon el punto y coma antes sendmail_path = "C:\xampp\mailtodisk\mailtodisk.exe"

No necesita cambiar nada más, pero si aún no recibe mensajes de correo electrónico que no sean para verificar SMTP port, el número de puerto debe ser el mismo.

El método anterior es para la configuración predeterminada proporcionada por el software Xampp.

Vikas Khunteta
fuente
77
Si no confía en ese sitio, puede usar papercut de codeplex en su lugar: papercut.codeplex.com .
Marcel Burkhard
No tuve que hacer nada para que funcionara, solo instálelo.
vonUbisch
Sólo tenía que cambiar el puerto embargo
Pablo Pacheco SG
¿Qué es nombre de usuario y contraseña en este caso?
Eoin
@Eoin nombre de usuario y contraseña de qué?
Vikas Khunteta
23

Puede probar enviar correo en su PC sin Internet

debe usar Papercut, esta sencilla aplicación para probar el envío de correo. y no necesitas configurar nada.

Simplemente ejecútelo e intente probar enviar correo:

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);
?>

y verás esto:

ingrese la descripción de la imagen aquí

Espero que tengas un buen día. puedes encontrarme en Youtube para más tutoriales Piseth Sok

¡Animar!

Piseth Sok
fuente
1
Esta es una solución realmente excelente, fácil y rápida, y puedo comenzar a trabajar. Rellenar con servidores de correo localmente es una molestia cuando es solo para desarrolladores
AdheneManx
1
Gracias, también usé esto para probar mi proyecto.
Piseth Sok
19

Tiene que configurar SMTP en su servidor. Puede usar G Suite SMTP de Google de forma gratuita:

<?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 :(";
}

?>

Lea más sobre PHPMailer aquí .

Thirumalai murugan
fuente
@Vikas respuesta fue mejor, pero tenga en cuenta que el uso del SSL por defecto en smtp_port podría no funcionar en ciertas condiciones, utilizando 465 como esta respuesta ha declarado realidad fija para mí
Temitayo
Utilicé la respuesta de @Vikas pero utilicé un fragmento del tuyo, es decir, utilicé 465 como emtp_port. Buen trabajo de todos modos
Temitayo
Error fatal: la clase 'PHPMailer' no se encuentra en C: \ xampp \ htdocs \ myweb \ email_script.php en la línea 82
Shafizadeh
8

Como en mi experiencia personal, descubrí que algo muy similar a la respuesta de Vikas Dwivedi funcionará bien.

Paso 1 (archivo php.ini)

En el archivo php.ini ubicado en xampp\php\php.ini. Cambie la configuración a lo siguiente:

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

Apague otras variables debajo mail funcitonponiéndolas ;antes. p.ej;smtp_port=25

Paso 2 (archivo sendmail.ini)

En sendmail.ini ubicado en xampp \ sendmail \ semdmail.ini cambie a lo siguiente:

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

Paso 3 (código)

Cree un archivo php y use lo siguiente:

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

aviso

  • Debe reiniciar Apache para que php.ini se vuelva a cargar.
  • debe activar el acceso seguro a la aplicación Google Less en https://myaccount.google.com/u/1/security
  • Puede ser útil ejecutar Xampp con permiso de administrador.
M en
fuente
2

Este código se utiliza para el correo de su XAMPP localhost y su cuenta de Gmail. Este código es muy fácil y funciona para mí, pruébalo tú mismo.

A continuación, cambie el archivo 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 

Abajo Cambiar en el archivo 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, escriba el código belove en su archivo PHP para enviar un correo electrónico

<?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
fuente
0

Debe definir un SMTPservidor y un puerto para esto. Todo excepto enviar correos desde hosts en vivo.

Este es un enlace útil al respecto .

NB: el puerto no debe utilizarse. Tenga cuidado de que, algunas aplicaciones como Skypeutilizan los puertos predeterminados y evitan el envío de correo.

Vishnu R
fuente
Puede evitar que Skype use el puerto 80. Está en la configuración de conexión de Skype
astroanu
0

Acabo de pasar más de una hora intentando hacer que esto funcione. para todos los que tienen el mismo problema con todas las sugerencias publicadas que no funcionan: ¡debe reiniciar Apache en su interfaz XAMPP! ¡simplemente reiniciar XAMPP no funcionará!

usuario3065579
fuente
0

Intenté muchas formas de enviar un correo desde XAMPP Localhost, pero dado que XAMPP no tiene Certificado SSL, mi solicitud de correo electrónico fue bloqueada por Gmail o proveedores de servicios SMTP similares.

Luego usé MailHog para el servidor smtp local, lo que debes hacer es ejecutarlo. localhost: 1025 es para el servidor smtp, localhost: 8025 es para el servidor de correo, donde puede consultar los correos electrónicos que envió.

Aquí está mi 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!";
    }

Enlace al repositorio de MailHog Github

uyghurbeg
fuente
0

Además de todas las respuestas, tenga en cuenta que en el sendmail.iniarchivo:

auth_password = this-is- Not -your-Gmail-password

debido a un nuevo problema de seguridad de Google, debe seguir estos pasos para crear una contraseña de aplicación para este propósito:

  1. vaya a https://accounts.google.com/ en la pestaña de seguridad
  2. activar la verificación en dos pasos
  3. regrese a la pestaña de seguridad y cree una contraseña de aplicación (en el menú desplegable de selección de aplicación puede elegir 'otro')
ashkan nasirzadeh
fuente