Suite au fait que les emails envoyés par certains de mes sites ne sont plus reçus, j’ai cherché et trouvé une solution qui fonctionne conformément à mes attentes.
Contexte : VPS sur OVH, domaine OVH qui pointe vers ce VPS.
Première chose, j’utilisais déjà PHPMailer, une version précédente et domaine configuré pour SPF et DKIM. Donc mise à jour vers la source github de PHPMailer.
OVH n’est pas clair dans sa documentation quand vous en trouvez une qui est cohérente avec le reste et à jour. Basez vous sur le mail reçus lorsque vous créez votre compte. Le mail vous donne les ports et adresses à utiliser ainsi que l’indication très importante : connexion POP3 avant SMTP.
Par bonheur, la doc de PHPMailer fourni un exemple complet en ce sens.
//Authenticate via POP3. //After this you should be allowed to submit messages over SMTP for a while. //Only applies if your host supports POP-before-SMTP. $pop = POP3::popBeforeSmtp('pop3.example.com', 110, 30, 'username', 'password', 1); //Create a new PHPMailer instance //Passing true to the constructor enables the use of exceptions for error handling $mail = new PHPMailer(true); try { $mail->isSMTP(); //Enable SMTP debugging // 0 = off (for production use) // 1 = client messages // 2 = client and server messages $mail->SMTPDebug = 2; //Ask for HTML-friendly debug output $mail->Debugoutput = 'html'; //Set the hostname of the mail server $mail->Host = "mail.example.com"; //Set the SMTP port number - likely to be 25, 465 or 587 $mail->Port = 25; //Whether to use SMTP authentication $mail->SMTPAuth = false; //Set who the message is to be sent from $mail->setFrom('from@example.com', 'First Last'); //Set an alternative reply-to address $mail->addReplyTo('replyto@example.com', 'First Last'); //Set who the message is to be sent to $mail->addAddress('whoto@example.com', 'John Doe'); //Set the subject line $mail->Subject = 'PHPMailer POP-before-SMTP test'; //Read an HTML message body from an external file, convert referenced images to embedded, //and convert the HTML into a basic plain-text alternative body $mail->msgHTML(file_get_contents('contents.html'), dirname(__FILE__)); //Replace the plain text body with one created manually $mail->AltBody = 'This is a plain-text message body'; //Attach an image file $mail->addAttachment('images/phpmailer_mini.png'); //send the message //Note that we don't need check the response from this because it will throw an exception if it has trouble $mail->send(); echo "Message sent!"; } catch (phpmailerException $e) { echo $e->errorMessage(); //Pretty error messages from PHPMailer } catch (Exception $e) { echo $e->getMessage(); //Boring error messages from anything else! }
Il vous suffit de mettre les valeurs qui vous sont transmise et … ça n’ira pas encore.
Il va vous falloir vous connecter également à SMTP.
//Whether to use SMTP authentication $mail->SMTPAuth = true; //Username to use for SMTP authentication $mail->Username = "yourname@example.com"; //Password to use for SMTP authentication $mail->Password = "yourpassword";
Il vous suffit de modifier SMTPAuth de false à true et d’ajouter les 2 lignes et c’est fini !
Badawok
Note à ceux qui utilisent le framework badawok (v7 dans mon cas), vous aurez un conflit entre votre classe mailer et base_mailer car badawok utilise déjà un PHPMailer.
Supprimez l’extend de la classe base_mailer et ajouter les require_once des classes : phpmailer, smtp et pop3. Créez un répertoire vendor dans votre projet pour y mettre proprement les 3 classes de PHPMailer et le tour sera facilement joué.
La v7 étant uniquement patchée pour le moment, cette modification ne sera pas répercutée.
j’ai suivi ton tuto mais j’arrive toujours pas a envoyer l’email voici l’erreur
Server -> Client: +OK Welcome to OVH Mail server 181 Server -> Client: +OK Server -> Client: +OK Logged in. SMTP ERROR: Failed to connect to server: Connection timed out (110)
SMTP connect() failed.
Pour t’aider il me faudrait ta portion de code.
De plus on dirait une erreur de credentials.
Tu as vérifié tes paramètres ?
isSMTP();
//Enable SMTP debugging
// 0 = off (for production use)
// 1 = client messages
// 2 = client and server messages
$mail->SMTPDebug = 2;
//Ask for HTML-friendly debug output
$mail->Debugoutput = ‘html’;
//Set the hostname of the mail server
$mail->Host = « ns0.ovh.net »;
//Set the SMTP port number – likely to be 25, 465 or 587
$mail->Port = 2525;
$mail->setLanguage(‘fr’, ‘language’);
//Whether to use SMTP authentication
$mail->SMTPAuth = true;
$mail->Username = « x@domaine.com »; // GMAIL username
$mail->Password = « mdp »;
//Set who the message is to be sent from
$mail->setFrom(‘from@example.com’, ‘First Last’);
//Set an alternative reply-to address
$mail->addReplyTo(‘replyto@example.com’, ‘First Last’);
//Set who the message is to be sent to
$mail->addAddress(‘x@dotmain.com’, ‘John Doe’);
//Set the subject line
$mail->Subject = ‘PHPMailer POP-before-SMTP test’;
//Read an HTML message body from an external file, convert referenced images to embedded,
//and convert the HTML into a basic plain-text alternative body
// $mail->msgHTML(file_get_contents(‘contents.html’), dirname(__FILE__));
//Replace the plain text body with one created manually
$mail->Body = « 587 »;
$mail->AltBody = ‘This is a plain-text message body’;
//Attach an image file
//$mail->addAttachment(‘images/phpmailer_mini.png’);
//send the message
//Note that we don’t need check the response from this because it will throw an exception if it has trouble
$mail->send();
echo « Message sent! »;
} catch (phpmailerException $e) {
echo $e->errorMessage(); //Pretty error messages from PHPMailer
} catch (Exception $e) {
echo $e->getMessage(); //Boring error messages from anything else!
}
?>
Salut,
Ça répond pas vraiment à la question, le copié-collé n’aide pas. Fait un différentiel de code pour indiquer ce que tu modifié / adapté. Et as-tu vérifié tes paramètres : login, pw, serveur, … ? As-tu configuré sur le manager OVH ton e-mail et récupéré le mails ? Les infos sont dedans.
Courage