Envoyer des e-mails via SMTP avec PHPMailer
j'essaie d'envoyer des e-mails SMTP en utilisant PHPMailer, mais je continue à recevoir ce message d'erreur, des idées comment s'en débarrasser?
J'essaie de me connecter via SSL sur le port 465.
SMTP -> FROM SERVER:
SMTP -> FROM SERVER:
SMTP -> ERROR: EHLO not accepted from server:
Notice: fputs() [function.fputs]: send of 18 bytes failed with errno=32 Roura přerušena (SIGPIPE) in /home/www/amazonek.cz/subdomains/library/PHPMailer_v5.1/class.smtp.php on line 494
SMTP -> FROM SERVER:
SMTP -> ERROR: HELO not accepted from server:
Notice: fputs() [function.fputs]: send of 12 bytes failed with errno=32 Roura přerušena (SIGPIPE) in /home/www/amazonek.cz/subdomains/library/PHPMailer_v5.1/class.smtp.php on line 212
SMTP -> ERROR: AUTH not accepted from server:
SMTP Error: Could not authenticate.
mon code:
require_once('../library/PHPMailer_v5.1/class.phpmailer.php');
try{
$mail = new PHPMailer(true);
$mail->IsSMTP();
$mail->SMTPAuth = true;
$mail->Host = SMTP_SERVER;
$mail->Port = SMTP_PORT;
$mail->Username = SMTP_USERNAME;
$mail->Password = SMTP_PASSWORD;
$mail->SMTPDebug = 2;
$mail->SetFrom(MAIL_ORDERS_ADDRESS, MAIL_ORDERS_NAME);
$mail->Subject = 'AMAZONEK.cz - objednávka číslo '.$_SESSION['orderId'];
$mail->MsgHTML('<b>Ahoj</b>');
$mail->AddAddress($_SESSION['user']['email'], $_SESSION['user']['name'].' '.$_SESSION['user']['surname']);
$mail->AddBCC(MAIL_ORDERS_ADDRESS, MAIL_ORDERS_NAME);
if(!$mail->Send()) throw new Exception($mail->ErrorInfo);
}
catch(Exception $e){
echo $e->getMessage();
}
constantes définition:
define('SMTP_SERVER', 'smtp.ebola.cz');
define('SMTP_PORT', 465);
define('SMTP_USERNAME', 'myEmail@myDomain.tld');
define('SMTP_PASSWORD', '***CENSORED***');
define('MAIL_ORDERS_ADDRESS', 'myEmail@myDomain.tld');
define('MAIL_ORDERS_NAME', 'My Name');
des idées?
8 réponses
d'après ce que je vois, tout va bien avec votre code. Votre erreur est:
ErreurSMTP: Impossible à authentifier.
ce qui signifie que les informations d'identification que vous avez envoyées sont rejetées par le serveur SMTP. Assurez-vous que l'hôte, port, nom d'utilisateur et mot de passe sont bons.
si vous voulez utiliser TLS, essayez d'ajouter:
$mail->SMTPSecure = 'tls';
si vous voulez utiliser SSL, essayez d'ajouter:
$mail->SMTPSecure = 'ssl';
gardez à l'esprit que:
- certains serveurs SMTP peuvent interdire les connexions des "outsiders".
- certains serveurs SMTP ne prennent pas en charge les connexions SSL (ou TLS).
peut-être cet exemple peut aider (GMail secure SMTP).
essayez d'envoyer un e-mail à travers ce serveur SMTP manuellement/à partir d'un mailer interactif (par exemple Mozilla Thunderbird). Les erreurs, il semble que le serveur n'accepte pas vos informations d'identification. Est-ce que SMTP tourne sur le port, ou est-ce SSL+SMTP? Vous ne semblez pas utiliser secure connection dans le code que vous avez posté, et je ne suis pas sûr que PHPMailer supporte réellement SSL+SMTP.
(premier résultat de googler le nom d'hôte de votre serveur SMTP: http://podpora.ebola.cz/idx.php/0/006/article/Strucny-technicky-popis-nastaveni-sluzeb.html semble dire" envoi de courrier SMTPs: connexion SSL sécurisée,port: 465". )
il semble que PHPMailer supporte SSL; au moins à partir de ce . Vous devez donc changer ceci:
define('SMTP_SERVER', 'smtp.ebola.cz');
dans ceci:
define('SMTP_SERVER', 'ssl://smtp.ebola.cz');
cela peut sembler comme un shot in the dark mais assurez-vous que PHP a été respecté avec OpenSSL si SMTP nécessite SSL.
pour vérifier l'utilisation de phpinfo()
Espère que cela aide!
essayez le port 25 au lieu de 456.
j'ai eu la même erreur en utilisant le port 456, et le changer à 25 a fonctionné pour moi.
Oui, vous avez besoin D'OpenSSL pour fonctionner correctement. Mon site de test de sauvegarde a fonctionné, pas mon serveur en direct. Une différence? Live server n'avait pas OpenSSL dans la configuration PHP.
j'ai eu un problème similaire pendant environ une heure, jusqu'à ce que je comprenne ce qui a mal tourné. Mon problème était, que j'ai utilisé SSL , au lieu de ssl . Le contrôle est sensible à la casse dans le code. AlexV m'a guidé à la source du problème. Ce truc d'helo / ehlo semble hors de propos.
SMTP - > FROM SERVER:
SMTP - > À PARTIR DU SERVEUR:
SMTP -> ERREUR: EHLO pas acceptés à partir du serveur:
c'est typique d'essayer de se connecter à un service SSL avec un client qui n'utilise pas SSL
ErreurSMTP: Impossible à authentifier.
il n'y a rien d'étonnant à n'avoir pas réussi à lancer une conversation SMTP authentigation n'est pas une option,.
phpmailer ne fait pas de SSL implicite (alias TLS on connect, SMTPS)) A moins de réécrire smtp.classe.php pour inclure le soutien pour it là il n'y a aucun moyen de faire ce que vous demandez.
utilise le port 587 avec SSL explicite (alias TLS, STARTTLS) à la place.
simple client smtp avec socket php stream avec la commande TLS / ssl smtp STARTTLS: https://github.com/breakermind/PhpMimeParser/blob/master/PhpSmtpSslSocketClient.php
fonctionne avec gmail.com avec authentifié:
<?php
// Login email and password
$login = "your-email@cool.xx";
$pass = "123456";
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
$ctx = stream_context_create();
stream_context_set_option($ctx, 'ssl', 'verify_peer', false);
stream_context_set_option($ctx, 'ssl', 'verify_peer_name', false);
try{
// echo $socket = stream_socket_client('ssl://smtp.gmail.com:587', $err, $errstr, 60, STREAM_CLIENT_CONNECT, $ctx);
echo $socket = stream_socket_client('tcp://smtp.gmail.com:587', $err, $errstr, 60, STREAM_CLIENT_CONNECT, $ctx);
if (!$socket) {
print "Failed to connect $err $errstr\n";
return;
}else{
// Http
// fwrite($socket, "GET / HTTP/1.0\r\nHost: www.example.com\r\nAccept: */*\r\n\r\n");
// Smtp
echo fread($socket,8192);
echo fwrite($socket, "EHLO cool.xx\r\n");
echo fread($socket,8192);
// Start tls connection
echo fwrite($socket, "STARTTLS\r\n");
echo fread($socket,8192);
echo stream_socket_enable_crypto($socket, true, STREAM_CRYPTO_METHOD_SSLv23_CLIENT);
// Send ehlo
echo fwrite($socket, "EHLO cool.xx\r\n");
echo fread($socket,8192);
// echo fwrite($socket, "MAIL FROM: <hello@cool.com>\r\n");
// echo fread($socket,8192);
echo fwrite($socket, "AUTH LOGIN\r\n");
echo fread($socket,8192);
echo fwrite($socket, base64_encode($login)."\r\n");
echo fread($socket,8192);
echo fwrite($socket, base64_encode($pass)."\r\n");
echo fread($socket,8192);
echo fwrite($socket, "rcpt to: <to-email@boome.com>\r\n");
echo fread($socket,8192);
echo fwrite($socket, "DATA\n");
echo fread($socket,8192);
echo fwrite($socket, "Date: ".time()."\r\nTo: <to-email@boome.com>\r\nFrom:<zour-email@cool.xx\r\nSubject:Hello from php socket tls\r\n.\r\n");
echo fread($socket,8192);
echo fwrite($socket, "QUIT \n");
echo fread($socket,8192);
/* Turn off encryption for the rest */
// stream_socket_enable_crypto($fp, false);
fclose($socket);
}
}catch(Exception $e){
echo $e;
}