Comment configurer XAMPP pour envoyer du courrier depuis localhost?

256

J'essaie d'envoyer du courrier depuis localhost. mais je ne suis pas en mesure d'envoyer le courrier de localhost, donc quelqu'un peut-il me dire comment reconfigurer mon xampp pour envoyer du courrier de localhost

farid shaikh
la source
3
Pouvons-nous voir votre code?
aizaz
2
Impossible de vous aider si vous ne nous donnez pas la configuration actuelle.
Arkascha
1
Est-ce toujours pertinent avec Mercury inclus (ApacheFriends XAMPP 1.8.2)? Je pense que oui, mais s'il y a des gens qui préfèrent Mercure, veuillez l'indiquer ci-dessous. :) Merci!
icedwater

Réponses:

372

Vous pouvez envoyer du courrier depuis localhost avec le paquet sendmail, le paquet sendmail est intégré dans XAMPP. Donc, si vous utilisez XAMPP, vous pouvez facilement envoyer du courrier depuis localhost.

par exemple, vous pouvez configurer C:\xampp\php\php.iniet c:\xampp\sendmail\sendmail.inigmail pour envoyer du courrier.

dans C:\xampp\php\php.inirechercher extension=php_openssl.dllet supprimer le point-virgule depuis le début de cette ligne pour que SSL fonctionne pour gmail pour localhost.

dans le fichier php.ini trouver [mail function]et modifier

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

Maintenant ouvert C:\xampp\sendmail\sendmail.ini. Remplacez tout le code existant dans sendmail.ini par le code suivant

[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

Vous avez maintenant terminé !! créer un fichier php avec la fonction mail et envoyer du courrier depuis localhost.

PS: n'oubliez pas de remplacer my-gmail-id et my-gmail-password dans le code ci - dessus. N'oubliez pas non plus de supprimer les clés en double si vous avez copié les paramètres ci-dessus. Par exemple, commentez la ligne suivante s'il y a un autre sendmail_path : sendmail_path="C:\xampp\mailtodisk\mailtodisk.exe"dans le fichier php.ini

N'oubliez pas également de redémarrer le serveur à l'aide du panneau de configuration XAMMP pour que les modifications prennent effet.

Pour gmail, veuillez consulter https://support.google.com/accounts/answer/6010255 pour autoriser l'accès à partir d'applications moins sécurisées.

Pour envoyer des e-mails sur Linux (avec le paquet sendmail) via Gmail à partir de localhost, veuillez vérifier PHP + Ubuntu Envoyer un e-mail à l'aide du formulaire gmail localhost .

Vikas Dwivedi
la source
3
autre que les configs ci-dessus, j'avais besoin de mettre à jour mon sendmail glob.com.au/sendmail
kaz
1
J'ai dû passer de XAMMP 1.7.7 à 2.8.2.3 - sendmail est inclus dans le nouveau XAMPP. J'ai essayé d'utiliser un sendmail plus récent avec 1.7.7 il y a quelques mois et je n'ai pas réussi à le faire fonctionner - j'ai finalement mordu la balle et utilisé le nouveau XAMPP et cela fonctionne comme décrit.
VanAlbert du
2
Je pense que l'emplacement C: \ xampp \ php \ php.ini fait référence aux environnements Windows. Pour mac, regardez dans xamppfiles / etc pour votre fichier php.ini.
Paul Trotter
3
La réponse @Vikas était la meilleure, mais veuillez noter que l'utilisation du ssl par défaut sur smtp_port peut ne pas fonctionner dans certaines conditions, en utilisant 465 comme la réponse de Thirumalai murugan l'a déclaré réellement corrigé pour moi
Temitayo
2
Cela fonctionne parfaitement avec XAMPP version 7.0.15 N'oubliez pas de supprimer le point-virgule de celui-ci et de vous connecter également au même identifiant Gmail que vous avez configuré, puis accédez au lien ci-dessous myaccount.google.com/lesssecureapps?pli=1 et Autoriser les applications moins sécurisées: ON Vous pouvez maintenant envoyer le courrier directement à partir de l'hôte local
XAMPP
35

Dans XAMPP v3.2.1 à des fins de test, vous pouvez voir les e-mails que le XAMPP envoie dans XAMPP / mailoutput. Dans mon cas sur Windows 8, cela ne nécessitait aucune configuration supplémentaire et était une solution simple pour tester les e-mails

Paul Trotter
la source
1
Et si cela ne fonctionne pas, vérifiez votre c:\xampp\php\php.ini, recherchez [mail function]et décommentez la ligne qui mentionne mailtodisk.exe. Gardez toutes les autres lignes de cette section en commentaire, sauf mail.add_x_headercelle.
Tim Malone
3
En complément de mon commentaire ci-dessus, pour les versions les plus récentes de XAMPP, vous devrez peut-être ajouter manuellement la ligne mailtodisk. Cela devrait ressembler à ceci:sendmail_path="C:\xampp\mailtodisk\mailtodisk.exe"
Tim Malone
Un addendum supplémentaire pour commenter de @TimMalone. J'ai trouvé que le courrier ne serait écrit dans XAMPP / mailoutput que si vous exécutez XAMPP en tant qu'administrateur
sohail
@sohail: Vous n'avez pas besoin d'exécuter XAMPP en tant qu'administrateur mais vous devez autoriser tous les utilisateurs à écrire dans le dossier XAMPP / mailoutput (clic droit sur dossier> sécurité> tous les utilisateurs> modifier les autorisations> accès complet)
cheppsn
@TimMalone J'ai appliqué les deux suggestions mais rien dans le répertoire mailoutput même après tant d'essais
Vipul Hadiya
25

Il est très simple d'envoyer des e-mails sur un hôte local ou un serveur local

Remarque: j'utilise le logiciel de serveur de messagerie de test sous Windows 7 64 bits avec Xampp installé

Il suffit de télécharger l'outil de test du serveur de messagerie et de l'installer selon les instructions données sur son site Web Test Mail Server Tool

Vous devez maintenant modifier seulement deux lignes sous php.inifichier

  1. Trouver [mail function] et supprimez les points-virgules qui se avant;smtp = localhost
  2. Mettez le point-virgule avant sendmail_path = "C:\xampp\mailtodisk\mailtodisk.exe"

Vous n'avez rien d'autre à changer, mais si vous ne recevez toujours pas d'e-mails, vérifiez les SMTP port , le numéro de port doit être le même.

La méthode ci-dessus concerne les paramètres par défaut fournis par le logiciel Xampp.

Vikas Khunteta
la source
7
Si vous ne faites pas confiance à ce site, vous voudrez peut-être utiliser papercut de codeplex à la place: papercut.codeplex.com .
Marcel Burkhard
Je n'ai rien eu à faire pour le faire fonctionner, il suffit de l'installer.
vonUbisch
Je dois juste changer le port
Pablo SG Pacheco
Qu'est-ce que le nom d'utilisateur et le mot de passe dans cette instance?
Eoin
@Eoin nom d'utilisateur et mot de passe de quoi?
Vikas Khunteta
23

Vous pouvez tester l'envoi de courrier sur votre PC sans Internet

vous devez utiliser Papercut cette application simple pour tester l'envoi de courrier. et vous n'avez rien à configurer.

Exécutez-le et essayez de tester l'envoi de courrier:

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

et vous verrez ceci:

entrez la description de l'image ici

J'espère que vous passerez une bonne journée. vous pouvez me trouver sur Youtube pour plus de tutoriel Piseth Sok

Acclamation!

Piseth Sok
la source
1
C'est une très bonne solution, rapide et facile et je peux me mettre directement au travail. Se farfouiller avec des serveurs de messagerie localement est un problème quand ce n'est que pour le développement.
AdheneManx
1
Merci, j'ai aussi utilisé cela pour tester mon projet.
Piseth Sok
19

Vous devez configurer SMTP sur votre serveur. Vous pouvez utiliser gratuitement G Suite SMTP by Google:

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

?>

En savoir plus PHPMailer ici .

Thirumalai murugan
la source
La réponse @Vikas était la meilleure, mais veuillez noter que l'utilisation du ssl par défaut sur smtp_port peut ne pas fonctionner dans certaines conditions, en utilisant 465 comme cette réponse l'a indiqué l'a réellement corrigé pour moi
Temitayo
J'ai utilisé la réponse @Vikas mais j'ai utilisé un fragment du vôtre, c'est-à-dire en utilisant 465 comme emtp_port. Bon travail quand même
Temitayo
Erreur fatale: classe «PHPMailer» introuvable dans C: \ xampp \ htdocs \ myweb \ email_script.php sur la ligne 82
Shafizadeh
8

Comme dans mon expérience personnelle, j'ai trouvé qu'une chose très similaire à la réponse de Vikas Dwivedi fonctionnera très bien.

Étape 1 (fichier php.ini)

Dans le fichier php.ini situé dans xampp\php\php.ini. Modifiez les paramètres comme suit:

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

Désactivez les autres variables sous mail funcitonen les mettant ;avant. par exemple;smtp_port=25

Étape 2 (fichier sendmail.ini)

Dans sendmail.ini situé dans xampp \ sendmail \ semdmail.ini, changez comme suit:

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

Étape 3 (code)

Créez un fichier php et utilisez ce qui suit:

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

Remarquer

  • Vous devez redémarrer apache pour que php.ini se recharge.
  • vous devez activer l'accès sécurisé aux applications Google Less dans https://myaccount.google.com/u/1/security
  • Il peut être utile d'exécuter Xampp avec l'autorisation Admin.
M at
la source
2

Ce code est utilisé pour le courrier provenant de votre hôte local XAMPP et de votre compte Gmail. Ce code est très facile et fonctionne pour moi, essayez vous-même.

Sous le changement dans le fichier 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 

Ci-dessous, modifier le fichier 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  

Veuillez écrire le code bien-aimé dans votre fichier PHP pour envoyer un e-mail

<?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
la source
0

Vous devez définir un SMTP serveur et un port pour cela. Tout sauf comme l'envoi de mails à partir d'hôtes en direct.

Ceci est un lien utile à ce sujet .

NB: Le port doit être inutilisé. Veuillez faire attention à ce que certaines applications, comme Skypeles ports par défaut, empêchent l'envoi de courrier.

Vishnu R
la source
Vous pouvez empêcher Skype d'utiliser le port 80. Son sur les paramètres de connexion de
Skype
0

Je viens de passer plus d'une heure à essayer de faire fonctionner ça. pour tout le monde ayant le même problème avec toutes les suggestions postées ne fonctionnant pas: vous devez redémarrer Apache dans votre interface XAMPP! juste redémarrer XAMPP ne fonctionnera pas !!

user3065579
la source
0

J'ai essayé de nombreuses façons d'envoyer un courrier à partir de l'hôte local XAMPP, mais comme XAMPP n'a pas de certificat SSL, ma demande de courrier électronique a été bloquée par Gmail ou des fournisseurs de services SMTP similaires.

Ensuite, j'ai utilisé MailHog pour le serveur smtp local, ce que vous devez faire est simplement de l'exécuter. localhost: 1025 est pour le serveur smtp, localhost: 8025 est pour le serveur de messagerie, où vous pouvez vérifier les e-mails que vous avez envoyés.

voici mon code:

    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!";
    }

Lien vers le référentiel MailHog Github

uyghurbeg
la source
0

en plus de toutes les réponses, veuillez noter que dans le sendmail.inidossier:

auth_password = ce- n'est - pas -votre-mot-de-passe-Gmail

en raison d'un nouveau problème de sécurité google, vous devez suivre ces étapes pour créer un mot de passe d'application à cet effet:

  1. accédez à https://accounts.google.com/ dans l'onglet sécurité
  2. activer la vérification en deux étapes
  3. revenir à l'onglet sécurité et créer un mot de passe d'application (dans le menu déroulant de sélection d'application, vous pouvez choisir «autre»)
ashkan nasirzadeh
la source