web-dev-qa-db-fra.com

Envoi de courrier avec PHPMailer sur SSL avec SMTP

J'essaie d'utiliser PHPMailer pour envoyer des courriers électroniques via SMTP, mais je n'ai pas encore eu de chance. J'ai parcouru un certain nombre de SO questions, de didacticiels PHPMailer et de messages de forum, mais je ne parviens toujours pas à le faire fonctionner. Je vais documenter autant de tentatives infructueuses que possible pour gagner du temps, mais voici le code que j'utilise:

<?php
    session_start();
    error_reporting(E_ALL);
    ini_set('display_errors','On');

    require('includes/class.phpmailer.php');
    include('includes/class.smtp.php');
    $mail = new PHPMailer(); 

    $name = $_POST["name"];
    $guests = $_POST["guests"];
    $time = $_POST["time"];

    $message = "<h1>".$name." has booked a table for ".$guests." at ".$time."</h1>";

    $mail->IsSMTP(); // telling the class to use SMTP
    $mail->Host       = "ssl://smtp.gmail.com"; // SMTP server
    $mail->SMTPDebug  = 1;                     // enables SMTP debug information (for testing)
    $mail->SMTPAuth   = true;                  // enable SMTP authentication
    $mail->Port       = 26;                    // set the SMTP port for the GMAIL server
    $mail->Username   = "[email protected]"; // SMTP account username
    $mail->Password   = "myPassword";        // SMTP account password
    $mail->SetFrom('[email protected]', 'James Cushing');
    $mail->AddReplyTo("[email protected]","James Cushing");
    $mail->Subject    = "PHPMailer Test Subject via smtp, basic with authentication";
    $mail->AltBody    = "To view the message, please use an HTML compatible email viewer!";
    $mail->MsgHTML($message)
    $address = "[email protected]";
    $mail->AddAddress($address, "James Cushing");

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

Tout d'abord, lorsque je lance ce code, deux erreurs différentes se produisent. Je reçois l'erreur sur mon serveur local:
SMTP -> ERROR: Échec de la connexion au serveur: l'opération a expiré (60)
L'adresse de livraison suivante a échoué: [email protected]: Mail appelé () sans être connecté
Mailer Error: L’adresse De suivante a échoué: [email protected]: Mail appelé () sans être connecté

Je reçois de plus en plus la même erreur en exécutant le même code sur mon serveur Web, mais la première ligne est:
SMTP -> ERROR: Echec de la connexion au serveur: le réseau est inaccessible (101)

Évidemment, cela vaut la peine de préciser que je n'utilise pas le littéral "[email protected]" mais j'ai substitué mon propre courrier électronique à ce message.

Ce que j'ai essayé
- Utilisation du serveur SMTP iCloud
- Utiliser un autre port
- Activer l'extension OpenSSL dans mon fichier php.ini
- Copie de code à partir de divers exemples PHPMailer
- Utilisation du système "DisplayUnlockCaptcha" de Google pour permettre les connexions
- Envoi vers et depuis différentes adresses - Suppression de "@ gmail.com" de la propriété Nom d'utilisateur - Un certain nombre d'autres choses dont je ne me souviens plus

Cela me rend fou depuis environ une journée, donc si quelqu'un peut le résoudre, il sera un héros.

Merci

6
James Cushing
$mail->IsSMTP();
$mail->Host = "smtp.gmail.com";
$mail->SMTPAuth = true;
$mail->SMTPSecure = "ssl";
$mail->Username = "[email protected]";
$mail->Password = "**********";
$mail->Port = "465";

C'est une configuration de travail.

essayez de remplacer ce que vous avez

30
ybert

N'utilisez pas SSL sur le port 465, il est obsolète depuis 1998 et n'est utilisé que par les produits Microsoft qui n'ont pas reçu le mémo. utilisez plutôt TLS sur le port 587: le code ci-dessous devrait donc fonctionner très bien pour vous.

mail->IsSMTP(); // telling the class to use SMTP
$mail->Host       = "smtp.gmail.com"; // SMTP server

$mail->SMTPAuth   = true;                  // enable SMTP authentication
$mail->SMTPSecure = "tls";                 // sets the prefix to the servier
$mail->Host       = "smtp.gmail.com";      // sets GMAIL as the SMTP server
$mail->Port       = 587;                   // set the SMTP port for the 
3
Asuquo12

Tout d'abord, utilisez ces paramètres pour Google:

$mail->IsSMTP();
$mail->Host = "smtp.gmail.com";
$mail->SMTPAuth = true;
$mail->SMTPSecure = "tls"; //edited from tsl
$mail->Username = "myEmail";
$mail->Password = "myPassword";
$mail->Port = "587";

Mais aussi, quel pare-feu avez-vous mis en place?

Si vous filtrez TCP ports 465/995 et peut-être 587, vous devrez configurer certaines exceptions ou les supprimer de votre liste de règles.

https://github.com/PHPMailer/PHPMailer/wiki/Dépannage

2
jacob21

Un échec similaire avec SMTP chaque fois que mon ordinateur client change de connexion réseau (par exemple, réseau domestique ou professionnel) et que le fait de redémarrer le service réseau (ou de redémarrer l'ordinateur) résout le problème pour moi. Pas sûr que cela s'applique à votre cas, mais juste au cas où.

Sudo /etc/init.d/networking restart   # for ubuntu
1
user1533634

Premièrement, Google a créé la fonction "Utiliser la méthode des comptes moins sécurisés":

https://myaccount.google.com/security

Puis créé une autre permission:

https://accounts.google.com/b/0/DisplayUnlockCaptcha

J'espère que ça aide.

0
Andre Mesquita