2017-08-10 2 views
0

J'ai donc cette application que j'ai construit qui utilise PHPMailer pour envoyer du courrier. Le code fonctionne parfaitement avec ma machine locale, et il fonctionnait parfaitement sur le serveur jusqu'à hier. Cependant, maintenant, quand je cours le code sur mon serveur, je reçois:PHPMailer tout à coup ne fonctionne pas

Le message n'a pas pu être envoyé.Mailer Error: SMTP connect() failed. https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting

J'ai littéralement tout essayé. Je n'arrive pas à comprendre pourquoi cela ne fonctionne pas. Du serveur en tant qu'utilisateur le site est installé à, je peux telnet localhost 465 et je peux telnet localhost 587 ainsi le serveur est en place, et ses connexions ne bloquent pas à lui-même. La seule chose que je peux penser est, étant un serveur Cpanel une sorte de mise à jour doit avoir eu lieu avec Apache/PHP qui a causé quelque chose de ne pas fonctionner correctement avec cela. Je sais que le problème n'est pas avec le serveur mail et pas avec le code (puisqu'il fonctionne quand j'exécute exactement ce code depuis ma machine locale) qui ne laisse que la configuration PHP/Apache sur le serveur ...

Quelqu'un at-il un aperçu de ce que cela pourrait être? PS-Je dois utiliser SSL, c'est la seule chose que mon serveur supporte que je sache, au moins je n'ai jamais eu de chance en utilisant TLS ou non crypté.

Voici mon code:

require("vendor/autoload.php"); 
$mail = new \PHPMailer; 
// set up mail settings 
$mail->isSMTP(); 
$mail->Host = 'my.host.com'; 
$mail->SMTPAuth = true; 
$mail->Username = 'username'; 
$mail->Password = 'password'; 
$mail->SMTPSecure = 'ssl'; 
$mail->Port = 465; 

$mail->Debugoutput = function($str, $level) { 
    $GLOBALS['debug'][] = $Host . " - " . $str . " - " . $level; 
}; 

$mail->SMTPDebug = 2; 
$mail->CharSet = "UTF-8"; 
$mail->setFrom(.....); 
$mail->addAddress(.....); 
$mail->isHTML(true); 
$mail->Subject = 'Here is the subject'; 
$mail->Body = '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional //EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html><body>This is the HTML message body <b>in bold!</b></body></html>'; 

if(!$mail->send()) { 
    echo 'Message could not be sent.'; 
    echo 'Mailer Error: ' . $mail->ErrorInfo; 
} else { 
    echo 'Message has been sent'; 
} 

EDIT:

J'ai changé le niveau de débogage à 3 (pour le débogage de connexion, DERP) et je reçois ceci:

[0] => string (88) "- Connexion: ouverture à ssl: //host.redf1sh.com: 465, timeout = 300, options = array() - 3"

[1] => chaîne (291) "- Échec de la connexion Erreur # 2: stream_socket_client(): échec de l'opération SSL ed avec le code 1. Messages d'erreur OpenSSL: erreur: 14090086: routines SSL: ssl3_get_server_certificate: vérification du certificat a échoué [/path/to/vendor/phpmailer/phpmailer/class.smtp.php ligne 294] - 3 "

[2 ] => string (175) "- La connexion a échoué. Erreur n ° 2: stream_socket_client(): Echec de l'activation de crypto [/path/to/vendor/phpmailer/phpmailer/class.smtp.php ligne 294] - 3 "

[3] => chaîne (215)" - La connexion a échoué. Erreur n ° 2: stream_socket_client(): impossible de se connecter à ssl: //my.host.com: 465 (Erreur inconnue) [/path/to/vendor/phpmailer/phpmailer/class.smtp.php line 294] - 3 "

[4] => string (52) "- erreur SMTP: Echec de la connexion au serveur: (0) - 1"

[5] = string> (89) "- SMTP connect() a échoué . https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting - 3" }

J'avais raison, le SSL lié ... Alors quelqu'un sait comment résoudre ce problème

+0

Pourquoi le vote négatif? – SublymeRick

+0

La prochaine étape logique serait de Google vos erreurs un peu. Encore une fois, si vous n'avez rien changé, peut-être que votre fournisseur de messagerie a changé ses paramètres? Ou est-ce votre propre serveur? Avez-vous essayé simplement de définir le cryptage sur 'tls'? – GregKos

+0

Ouais, je le google. Je sais que je peux passer à côté de ça avec des ssloptions mais je préférerais que la chaîne de certification fonctionne. J'attends d'entendre les gens du serveur. – SublymeRick

Répondre

1

La même chose est arrivé avec un de nos sites en direct un certain temps passé quelques-uns. heures de dépannage du code (nous utilisons aussi PHPMailer), mais cela a fini par être une mise à jour du pare-feu sur le centre de données Vérifiez vos paramètres cPanel et/ou ouvrez un ticket avec votre fournisseur d'hébergement. t changer quoi que ce soit sur votre code et il a soudainement cessé de fonctionner, il ne s'agit probablement pas d'un problème avec votre code.Dans mon cas, c'était le pare-feu du serveur qui bloquait les connexions sortantes. Regarde ça.

+0

Je travaille avec mon fournisseur sur ce, howerver j'ai vérifié que ce n'est pas un problème de pare-feu, j'ai même écrit un script php pour ouvrir un connexion socket au même hôte et le port et il renvoie vrai, PHP est donc en mesure d'ouvrir une connexion socket à l'hôte et le port que j'utilise dans ma configuration. Ça doit être une négociation SSL. – SublymeRick

+0

Avez-vous essayé d'utiliser le mode de débogage détaillé avec PHPMailer? – GregKos

+0

OMG Je n'ai jamais réalisé qu'il y avait un niveau de débogage plus élevé que 2. 3 est ce dont j'avais besoin. Voir modifier à la question pour la mise à jour! Merci! – SublymeRick