Sur mon site j'ai fait un formulaire de contact, j'utilise phpmailer pour faire l'envoi.
Tout fonctionne bien sauf que gmail ne reconnait pas la provenance même en mettant la signature DKIM. J'ai créé une clé privé et publique, j'ai configuré mon serveur DNS qui est sur 1&1.
Code php :
<?php
session_start();
// Import PHPMailer classes into the global namespace
// These must be at the top of your script, not inside a function
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;
// Load Composer's autoloader
require 'vendor/autoload.php';
$nom = $_POST['nom'];
$delapartde = $_POST['email'];
$sujet = $_POST['sujet'];
$msg = $_POST['msg'];
$email_to = "toto@gmail.com";
// Instantiation and passing `true` enables exceptions
$mail = new PHPMailer(true);
try {
//Recipients
$mail->setFrom( $delapartde, $nom);
$mail->addAddress($email_to); // Add a recipient
// Content
$mail->isHTML(true); // Set email format to HTML
$mail->Subject = $sujet;
$mail->Body = "Message de : $nom - $msg";
// sign
$mail->DKIM_domain = 'jadopte-une-developpeuse.com';
$mail->DKIM_private = '/var/dkim/dkim.private';
$mail->DKIM_selector = 'mail';
$mail->DKIM_passphrase = ''; //key is not encrypted
$mail->DKIM_identity = $nom;
$mail->send();
// echo 'Message has been sent';
$_SESSION['msg_ok'] = "Votre message a bien été envoyé.";
header('Location: contact1.php');
} catch (Exception $e) {
// echo "Message could not be sent. Mailer Error: {$mail->ErrorInfo}";
$_SESSION['msg_bad'] = "Un problème s'est produit lors de l'envoi du message. Recommencez SVP. Erreur : {$mail->ErrorInfo}";
header('Location: contact1.php');
}
Bonjour, je ne m'y connait coté gmail mais personnellement j'utilise cette syntaxe et ça fonctionne bien :
PS : Utilise une adresse mail professionnelle du type support@monsite.ma pour éviter ce genre de problème et surtout les spams
$mail = new PHPMailer();
$body = file_get_contents("monEmail.php");
$mail->IsSMTP();
$mail->SMTPAuth = true;
$mail->SMTPOptions = array('ssl' => array('verify_peer' => false,'verify_peer_name' => false,'allow_self_signed' => true)); // ignorer l'erreur de certificat.
$mail->Host = "/* Le hostname de ton serveur */";
$mail->Port = 587;
$mail->CharSet = "utf-8";
$mail->Username = "/* Le username de ton domaine */";
$mail->Password = "/* Mot de passe du username */";
$mail->From = "monadressepro@monsite.com"; //adresse d’envoi correspondant au login entré précédemment
$mail->FromName = "Adidas"; // nom qui sera affiché
$mail->Subject = "Découvrez les nouveautés chez Adidas"; // sujet
$mail->AltBody = "Alternative texte brut"; //Body au format texte
$mail->WordWrap = 50; // nombre de caractères pour le retour à la ligne automatique
$mail->MsgHTML($body);
//$mail->AddReplyTo("","");
//$mail->AddAttachment("");// pièce jointe si besoin
$mail->AddAddress($email);
$mail->IsHTML(true); // envoyer au format html, passer a false si en mode texte
if(!$mail->send()) {
echo 'Message NOT send ! T0 -> ' . htmlspecialchars($email) . "<br>";
}else {
echo 'Message GOOD send ! T0 -> ' . htmlspecialchars($email) . "<br>";
}
Si ça peut t'aider ..
Postez votre code et vos msg d'erreurs - "ça marche pas" n'est pas un message d'erreur ...
Bon alors, j'ai fait le SPF mais ca n'a rien changé, j'ai toujours le même message.
Maintenant j'ai le SPF, DKIM et DMARC de paramétrer, la totale !
Apparement c'est mon DMARC et mon SPF qui ne fonctionne pas et pourtant j'ai tout mis comme il faut :
TXT
_dmarc
"v=DMARC1;p=reject"
SPF
@
"v=spf1 include:_spf.google.com ~all"
-
Et voici les infos de mon mail :
En sachant que j'ai modifié les mails, que j'ai mis dans mon code l'adresse mail de mon nom de domaine et que j'ai paramétré une redirection chez 1&1.
ARC-Authentication-Results: i=1; mx.google.com;
spf=softfail (google.com: domain of transitioning jo.james@gmail.com does not designate 212.227.126.131 as permitted sender) smtp.mailfrom=jo.james@gmail.com;
dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com
Return-Path: <elo@gmail.com>
Received: from mout.kundenserver.de (mout.kundenserver.de. [212.227.126.131])
by mx.google.com with ESMTPS id h14si4125944wrv.471.2020.01.23.23.07.17
for <elo@gmail.com>
(version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);
Thu, 23 Jan 2020 23:07:17 -0800 (PST)
Received-SPF: softfail (google.com: domain of transitioning jo.james@gmail.com does not designate 212.227.126.131 as permitted sender) client-ip=212.227.126.131;
Authentication-Results: mx.google.com;
spf=softfail (google.com: domain of transitioning jo.james@gmail.com does not designate 212.227.126.131 as permitted sender) smtp.mailfrom=jo.james@gmail.com;
dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com
Toi quand tu envoies un email depuis ton serveur, ton IP n'est pas listée dans cet enregistrement SPF de Gmail, donc le SPF fail chez le destinataire.
Le DKIM est basé sur un couple de clé privée/publique, gmail détient la seule clé privée autorisée à signer un email envoyé avec gmail.com, tu ne pourras donc pas signer en utilisant une clé DKIM valide pour le domaine gmail.com, donc le message va fail DKIM chez le destinataire.
Idem pour DMARC, seul gmail.com publie l'enregistrement DMARC pour gmail.com, tu n'as aucune influence là dessus.
En conclusion, utilise ton propre domaine dans ton adresse From
Je ne comprends pas pourquoi tu me parles du from étant donné que pour moi, le from c'est l'adresse de la personne qui va m'envoyer le mail.
Par contre, dans le to, je met bien mon nom de domaine, mais il apparait une adresse gmail, car j'ai fait une redirection.
Voici mon code :
<?php
session_start();
// Import PHPMailer classes into the global namespace
// These must be at the top of your script, not inside a function
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;
// Load Composer's autoloader
require 'vendor/autoload.php';
$nom = $_POST['nom'];
$delapartde = $_POST['email'];
$sujet = $_POST['sujet'];
$msg = $_POST['msg'];
$email_to = "toto@jadopte-une-developpeuse.com";
// Instantiation and passing `true` enables exceptions
$mail = new PHPMailer(true);
try {
//Recipients
$mail->setFrom( $delapartde, $nom);
$mail->addAddress($email_to); // Add a recipient
// Content
$mail->isHTML(true); // Set email format to HTML
$mail->Subject = $sujet;
$mail->Body = "Message de : $nom - $msg";
// sign
$mail->DKIM_domain = 'jadopte-une-developpeuse.com';
$mail->DKIM_private = '/var/dkim/dkim.private';
$mail->DKIM_selector = 'mail';
$mail->DKIM_passphrase = ''; //key is not encrypted
$mail->DKIM_identity = $nom;
$mail->send();
// echo 'Message has been sent';
$_SESSION['msg_ok'] = "Votre message a bien été envoyé.";
header('Location: contact1.php');
} catch (Exception $e) {
// echo "Message could not be sent. Mailer Error: {$mail->ErrorInfo}";
$_SESSION['msg_bad'] = "Un problème s'est produit lors de l'envoi du message. Recommencez SVP. Erreur : {$mail->ErrorInfo}";
header('Location: contact1.php');
}
Le fait est que tu ne maîtrises pas quelle sera l'adresse From, donc tu ne maîtrises pas le domaine d'envoi.
Dans un formulaire de contact, il faut placer en From adresse une adresse propre à ton domaine, contact@domain.com par exemple, l'adresse de destination du message (ton adresse), et placer un header reply-to avec l'adresse mail de la personne qui te contacte.
Dans ce cas, tu auras le contrôle de ton domaine d'envoi et tu ne seras plus confrontée à des envois depuis un domaine qui n'autorise pas les envois depuis ton serveur.
Dans ton cas, je te suggère de supprimer ton enregistrement DMARC dans un premier temps pour éviter les rejets de mails car actuellement tes mails fail SPF, tu pourras le reconfigurer plus tard :
_dmarc.jadopte-une-developpeuse.com. 3600 IN TXT "v=DMARC1;p=reject"
Ton enregistrement SPF ici n'autorise les envois de mails que depuis les serveurs mails de Gsuite (Gmail pour entreprises) cependant, les serveurs mails configurés pour ton nom de domaine actuel pointent sur Ionos :
jadopte-une-developpeuse.com. 3211 IN TXT "v=spf1 include:_spf.google.com ~all"
jadopte-une-developpeuse.com. 3593 IN MX 10 mx01.ionos.fr.
jadopte-une-developpeuse.com. 3593 IN MX 10 mx00.ionos.fr.
Dans ton cas, je te suggère l'enregistrement SPF suivant (en supprimant le record SPF précédent) :
Une fois effectué, cela devrait déjà mieux se passer sur tes mails envoyés, tu te rapproches
Un enregistrement SPF pour ton domaine indique aux serveurs mails destinataires quelles sont les adresses IP autorisées à envoyer des emails pour ton domaine, ici tu n'autorisait pas les bons serveurs à envoyer des emails au nom de ton domaine.
Postez votre code et vos msg d'erreurs - "ça marche pas" n'est pas un message d'erreur ...
https://scanmy.email/ testez votre configuration email.
https://scanmy.email/ testez votre configuration email.
https://scanmy.email/ testez votre configuration email.