envoyer un courriel en utilisant le serveur SMTP Gmail par L'intermédiaire de PHP Mailer
je voudrais envoyer un e-mail en utilisant Gmail SMTP serveur par PHP Mailer .
c'est mon code
<?php
require_once('class.phpmailer.php');
$mail = new PHPMailer();
$mail->IsSMTP();
$mail->CharSet="UTF-8";
$mail->SMTPSecure = 'tls';
$mail->Host = 'smtp.gmail.com';
$mail->Port = 587;
$mail->Username = 'MyUsername@gmail.com';
$mail->Password = 'valid password';
$mail->SMTPAuth = true;
$mail->From = 'MyUsername@gmail.com';
$mail->FromName = 'Mohammad Masoudian';
$mail->AddAddress('anotherValidGmail@gmail.com');
$mail->AddReplyTo('phoenixd110@gmail.com', 'Information');
$mail->IsHTML(true);
$mail->Subject = "PHPMailer Test Subject via Sendmail, basic";
$mail->AltBody = "To view the message, please use an HTML compatible email viewer!";
$mail->Body = "Hello";
if(!$mail->Send())
{
echo "Mailer Error: " . $mail->ErrorInfo;
}
else
{
echo "Message sent!";
}
?>
mais je reçois cette erreur suivante
Mailer Error: SMTP Error: The following recipients failed: anotherValidGmail@gmail.com
SMTP server error: SMTP AUTH is required for message submission on port 587
mon domaine est vatandesign.ir
12 réponses
$mail = new PHPMailer(); // create a new object
$mail->IsSMTP(); // enable SMTP
$mail->SMTPDebug = 1; // debugging: 1 = errors and messages, 2 = messages only
$mail->SMTPAuth = true; // authentication enabled
$mail->SMTPSecure = 'ssl'; // secure transfer enabled REQUIRED for Gmail
$mail->Host = "smtp.gmail.com";
$mail->Port = 465; // or 587
$mail->IsHTML(true);
$mail->Username = "email@gmail.com";
$mail->Password = "password";
$mail->SetFrom("example@gmail.com");
$mail->Subject = "Test";
$mail->Body = "hello";
$mail->AddAddress("email@gmail.com");
if(!$mail->Send()) {
echo "Mailer Error: " . $mail->ErrorInfo;
} else {
echo "Message has been sent";
}
ce code ci-dessus a été testé et a fonctionné pour moi.
il se peut que vous ayez besoin de $mail->SMTPSecure = 'ssl';
également assurez-vous que vous n'avez pas deux vérification étape allumée pour ce compte que cela peut causer des problèmes aussi.
UPDATED
vous pouvez essayer de changer $mail - > SMTP en:
$mail->SMTPSecure = 'tls';
il est intéressant de noter que certains serveurs SMTP bloquent les connexions.
Quelque Les serveurs SMTP ne prennent pas en charge les connexions SSL
(ou TLS
).
donc j'ai résolu ma propre erreur" Échec de connexion SMTP " et je voulais poster la solution juste au cas où il aide quelqu'un d'autre.
j'ai utilisé le code EXACT donné dans le PHPMailer exemple gmail.phps fichier. Cela a fonctionné tout simplement pendant que J'utilisais MAMP et ensuite j'ai eu l'erreur de connexion SMTP une fois que je l'ai déplacée sur mon serveur personnel.
toutes les réponses de dépassement de pile que j'ai lues, et toute la documentation de dépannage de PHPMailer dit que ce n'était pas un problème avec PHPMailer. Que c'était un problème de réglages du côté du serveur. J'ai essayé différents ports (587, 465, 25), j'ai essayé le cryptage 'SSL' et 'TLS'. J'ai vérifié qu'openssl était activé dans mon php.fichier ini. J'ai vérifié qu'il n'y avait pas de problème de pare-feu. Tout vérifié, et toujours rien.
la solution était que je devais enlever cette ligne:
$mail->isSMTP();
Maintenant tout fonctionne. Je ne sais pas pourquoi, mais ça fonctionne. Le reste de mon code est copié et collé à partir du fichier D'exemple PHPMailer.
vaut également la peine de noter que si vous avez une authentification à deux facteurs activée, vous aurez besoin de configurer un mot de passe spécifique à l'application à utiliser à la place du mot de passe de votre compte de messagerie.
vous pouvez générer un mot de passe spécifique à l'application en suivant ces instructions: https://support.google.com/accounts/answer/185833
puis $mail->Password
à votre mot de passe spécifique à votre application.
il semble que votre serveur ne réussisse pas à établir une connexion avec Gmail SMTP server. Voici quelques conseils pour résoudre ce: 1) vérifiez si SSL correctement configuré sur votre PHP (module qui le gère n'est pas installé par défaut sur PHP. Vous devez vérifier votre configuration dans phph.ini). 2) vérifiez si votre pare-feu autorise les appels sortants au port requis (ici 465 ou 587). Utilisez telnet pour ce faire. Si le port n'est pas ouvert, vous aurez alors besoin de l'aide de sysdmin pour configurer la configuration. Je espère que vous allez trouver une solution rapidement!
ouvrir ce lien et sélectionnez Suivre les instructions Google serveurs bloque toutes les tentatives de serveurs inconnus donc une fois que vous cliquez sur captcha vérifier chaque chose sera très bien
Google traitent comptes Gmail différemment selon les informations disponibles de l'utilisateur, probablement pour freiner les polluposteurs.
Je ne pouvais pas utiliser SMTP jusqu'à ce que je fasse la vérification du téléphone. J'ai fait un autre compte pour vérifier et j'ai pu le confirmer.
ne peut pas commenter mais oui, supprimer
$mail->isSMTP();
et tout ira bien!
ce code fonctionne très bien pour moi
$mail = new PHPMailer;
//Enable SMTP debugging.
$mail->SMTPDebug = 0;
//Set PHPMailer to use SMTP.
$mail->isSMTP();
//Set SMTP host name
$mail->Host = $hostname;
//Set this to true if SMTP host requires authentication to send email
$mail->SMTPAuth = true;
//Provide username and password
$mail->Username = $sender;
$mail->Password = $mail_password;
//If SMTP requires TLS encryption then set it
$mail->SMTPSecure = "ssl";
//Set TCP port to connect to
$mail->Port = 465;
$mail->From = $sender;
$mail->FromName = $sender_name;
$mail->addAddress($to);
$mail->isHTML(true);
$mail->Subject = $Subject;
$mail->Body = $Body;
$mail->AltBody = "This is the plain text version of the email content";
if (!$mail->send()) {
echo "Mailer Error: " . $mail->ErrorInfo;
}
else {
echo 'Mail Sent Successfully';
}
Anderscc a raison. Grâce. Ça a marché pour moi, mais pas à 100%.
j'ai dû mettre
$ mail - > SMTPDebug = 0; Le paramétrer à 1, peut causer des erreurs surtout si vous passez quelques données comme json à la page suivante. Exemple - effectuer la vérification si le courrier est envoyé, en utilisant JSON pour passer des données par ajax.
j'ai dû baisser les paramètres de sécurité de mon compte gmail pour me débarrasser des erreurs: "SMTP connect() failed" et " SMTP Erreur: la commande Password a échoué "
Solution: Ce problème peut être causé soit par des applications "moins sécurisées" essayant d'utiliser le compte email (c'est selon l'aide de google, pas sûr comment ils jugent ce qui est sécurisé et ce qui ne l'est pas) ou si vous essayez de vous connecter plusieurs fois d'affilée ou si vous changez de pays (par exemple utiliser VPN, déplacer le code vers un autre serveur ou essayer de se connecter à partir de différentes parties du monde).
liens qui fixent le problème (vous devez être connecté au compte google):
-
voir les récentes tentatives d'utilisation du compte et accepter l'accès suspect.
-
lien pour désactiver la fonction de blocage des applications suspectes/technologies:
Note: Vous pouvez aller au lien de réponse stackoverflow suivant pour plus de détails.
si vous utilisez cPanel vous devez juste cliquer La Petite boîte qui vous permet d'envoyer aux serveurs externes par SMTP.
Connexion au CPanel > Ajuster les Paramètres de > > > "Restreindre SMTP sortant de la racine, exim, et mailman (autrefois connue sous la dénomination SMTP Tweak)"
Comme réponse ici:
$mail->SMTPOptions = array(
'ssl' => array(
'verify_peer' => false,
'verify_peer_name' => false,
'allow_self_signed' => true
)
);
je pense que c'est un problème de connexion vous pouvez obtenir le code ici http://skillrow.com/sending-mail-using-smtp-and-php /
include(“smtpfile.php“);
include(“saslfile.php“); // for SASL authentication $from=”my@website.com“; //from mail id
$smtp=new smtp_class;
$smtp->host_name=”www.abc.com“; // name of host
$smtp->host_port=25;//port of host
$smtp->timeout=10;
$smtp->data_timeout=0;
$smtp->debug=1;
$smtp->html_debug=1;
$smtp->pop3_auth_host=””;
$smtp->ssl=0;
$smtp->start_tls=0;
$smtp->localhost=”localhost“;
$smtp->direct_delivery=0;
$smtp->user=”smtp username”;
$smtp->realm=””;
$smtp->password=”smtp password“;
$smtp->workstation=””;
$smtp->authentication_mechanism=””;
$mail=$smtp->SendMessage($from,array($to),array(“From:$from”,”To: $to”,”Subject: $subject”,”Date: ”.strftime(“%a, %d %b %Y %H:%M:%S %Z”)),”$message”);
if($mail){
echo “Mail sent“;
}else{
echo $smtp->error;
}