J'ai un site hébergé avec rackspace et mis à jour ma technologie de site de php5.4 à php5.6. Maintenant, je ne peux plus envoyer d'emails depuis le site. Le pire, c'est que je ne reçois même pas d'erreurs et les journaux ne montrent rien. J'utilise phpmailer 5.2.14.phpmailer et php5.6 ne fonctionne pas avec Office365
Voici mon script mail
require 'phpmailer/PHPMailerAutoload.php';
if (isset($_POST['contactForm'])) {
$email = $_POST['email'];
$subject = $_POST['subject'];
$message = $_POST['message'];
$body = '
<html>
<body>
<div style="float:left; width:100%; margin:0 0 25px 0; padding:20px; background:#222; text-align:center;">
<div style="display:inline-block; vertical-align:top;">
<a href="http://website.com"><img src="img/logoEmail.png" alt="waesf"></a>
</div>
</div>
<main style="float:left; width:100%; padding:20px;">
<p style="font-family:Arial; font-size:18px;">'.$message.'</p>
</main>
</body>
</html>';
$mail = new PHPMailer;
$mail->SMTPDebug = 3; // Enable verbose debug output
$mail->SMTPOptions = array(
'ssl' => array(
'verify_peer' => false,
'verify_peer_name' => false,
'allow_self_signed' => true
)
);
$mail->isSMTP(); // Set mailer to use SMTP
$mail->Host = 'smtp.office365.com'; // Specify main and backup SMTP servers
$mail->SMTPAuth = true; // Enable SMTP authentication
$mail->Username = '[email protected]'; // SMTP username
$mail->Password = 'secret'; // SMTP password
$mail->SMTPSecure = 'tls'; // Enable TLS encryption, `ssl` also accepted
$mail->Port = 587; // TCP port to connect to
$mail->SetFrom('[email protected]', 'Ballpoint Machinist');
$mail->AddAddress('[email protected]', "BPM"); // Add a recipient
$mail->addReplyTo('[email protected]', 'Information');
// $mail->addCC('[email protected]');
// $mail->addBCC('[email protected]');
// $mail->addAttachment('/var/tmp/file.tar.gz'); // Add attachments
// $mail->addAttachment('/tmp/image.jpg', 'new.jpg'); // Optional name
$mail->isHTML(true); // Set email format to HTML
$mail->Subject = $subject;
$mail->Body = $body;
$mail->AltBody = $body;
if (!$mail->send()) {
echo 'Message could not be sent.';
echo 'Mailer Error: ' . $mail->ErrorInfo;
} else {
echo 'Message has been sent';
}
}
Lorsque le script exécute le site se bloque alors pendant un certain temps donne alors un dit serveur a expiré et rien d'autre. Aucune erreur php ne code rien et quand je vérifie les logs il n'y a pas d'erreurs liées à mon code mail. Cependant, cela ne se produit qu'avec Office 365 lorsque je modifie les paramètres SMTP à Gmail puis j'ai au moins obtenir des erreurs PHP sur la page.
J'ai déjà lu un tas de discussions sur le sujet mais je ne comprends pas. J'ai également passé par https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting et ajouté le SMTPOptions pour exclure ssl mais cela n'a pas aidé.
Je suis perplexe que je ne reçois aucune erreur. J'ai SMTPDebug = 3 et error_reporting (E_ALL).
modifier avec la suggestion de Willy Pt. Ne fonctionne toujours pas lorsque le script exécute le délai d'expiration du serveur.
if (isset($_POST['contactForm'])) {
$email = $_POST['email'];
$subject = $_POST['subject'];
$message = $_POST['message'];
$body = '
<html>
<body>
<div style="float:left; width:100%; margin:0 0 25px 0; padding:20px; background:#222; text-align:center;">
<div style="display:inline-block; vertical-align:top;">
<a href="http://website.com"><img src="img/logoEmail.png" alt="Ballpoint Machinist"></a>
</div>
</div>
<main style="float:left; width:100%; padding:20px;">
<p style="font-family:Arial; font-size:18px;">'.$message.'</p>
</main>
</body>
</html>';
$mail = new PHPMailer(true);
// $mail->SMTPDebug = 4; // Enable verbose debug output
try {
$mail->SMTPOptions = array(
'ssl' => array(
'verify_peer' => false,
'verify_peer_name' => false,
'allow_self_signed' => true
)
);
$mail->isSMTP(); // Set mailer to use SMTP
$mail->Host = 'smtp.office365.com'; // Specify main and backup SMTP servers
$mail->SMTPAuth = true; // Enable SMTP authentication
$mail->Username = '[email protected]'; // SMTP username
$mail->Password = 'test'; // SMTP password
$mail->SMTPSecure = 'tls'; // Enable TLS encryption, `ssl` also accepted
$mail->Port = 587; // TCP port to connect to
$mail->SetFrom('[email protected]', 'Ballpoint Machinist');
$mail->AddAddress('[email protected]', "BPM"); // Add a recipient
$mail->addReplyTo('[email protected]', 'Information');
// $mail->addCC('[email protected]');
// $mail->addBCC('[email protected]');
// $mail->addAttachment('/var/tmp/file.tar.gz'); // Add attachments
// $mail->addAttachment('/tmp/image.jpg', 'new.jpg'); // Optional name
$mail->isHTML(true); // Set email format to HTML
$mail->Subject = $subject;
$mail->Body = $body;
$mail->AltBody = $body;
$mail->send();
echo "Message Sent OK\n";
/*if (!$mail->send()) {
echo 'Message could not be sent.';
echo 'Mailer Error: ' . $mail->ErrorInfo;
} else {
echo 'Message has been sent';
}*/
} catch (phpmailerException $e) {
echo $e->errorMessage(); //Pretty error messages from PHPMailer
} catch (Exception $e) {
echo $e->getMessage(); //Boring error messages from anything else!
}
}
}
Quelqu'un peut-il aider?
essayer de poster le stacktrace fourni par le PHPMailer en utilisant la même méthode que celle décrite dans cette réponse http://stackoverflow.com/questions/2386544/error-handling-with-phpmailer Il est préférable stacktrace de lecture plutôt que de voir le ErrorInfo seulement –
SMTPDebug = 4 est nécessaire pour afficher les informations de connexion de bas niveau. PHP était la seule chose que vous avez mise à jour? Si la connexion arrive à expiration, PHPMailer ne peut rien dire car il n'y a pas d'autres informations. Les délais d'attente sont généralement des problèmes de réseau - DNS et pare-feu. Essayez le telnet et d'autres contrôles dans le guide. – Synchro
@WillyPt J'ai ajouté un edit avec mon code en utilisant la suggestion que vous avez posté et toujours le même problème. Lorsque le script s'exécute, le site se bloque pendant un certain temps puis expire. – badsyntax