我正在尝试使用PHPMailer发送SMTP电子邮件,但我不断收到此错误消息,任何想法如何摆脱它?
我正在尝试通过端口465上的SSL进行连接。
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.
我的代码:
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();
}
常量定义:
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');
有什么想法吗?
答案 0 :(得分:25)
据我所知,你的代码一切正常。您的错误是:
SMTP错误:无法进行身份验证。
这表示您发送的凭据被SMTP服务器拒绝。确保主机,端口,用户名和密码良好。
如果您想使用TLS,请尝试添加:
$mail->SMTPSecure = 'tls';
如果您想使用SSL,请尝试添加:
$mail->SMTPSecure = 'ssl';
请记住:
也许this example可以提供帮助(GMail安全SMTP)。
答案 1 :(得分:4)
尝试通过手动/从交互式邮件程序(例如Mozilla Thunderbird)通过该SMTP服务器发送电子邮件。从错误中,服务器似乎不接受您的凭据。是SMTP在端口上运行,还是SSL + SMTP?您似乎没有在您发布的代码中使用安全连接,我不确定PHPMailer是否实际上支持SSL + SMTP。
(谷歌搜索SMTP服务器主机名的第一个结果:http://podpora.ebola.cz/idx.php/0/006/article/Strucny-technicky-popis-nastaveni-sluzeb.html似乎说“SMTPs邮件发送:安全SSL连接,端口:465”。)
看起来PHPMailer支持SSL;至少从this开始。所以,你需要改变这个:
define('SMTP_SERVER', 'smtp.ebola.cz');
进入这个:
define('SMTP_SERVER', 'ssl://smtp.ebola.cz');
答案 2 :(得分:2)
这似乎是在黑暗中拍摄,但如果SMTP需要SSL,请确保PHP已经符合OpenSSL。
要检查使用phpinfo()
希望它有所帮助!
答案 3 :(得分:2)
尝试端口25而不是456。
使用端口456时出现相同的错误,并将其更改为25对我有效。
答案 4 :(得分:1)
是的,您需要OpenSSL才能正常工作。我的备份测试站点工作,我的实时服务器没有。区别?实时服务器在PHP配置中没有OpenSSL。
答案 5 :(得分:1)
SMTP - &gt;来自服务器:
SMTP - &gt;来自服务器:
SMTP - &gt;错误:服务器不接受EHLO:
尝试使用不使用SSL的客户端连接到SSL服务的典型情况
SMTP错误:无法进行身份验证。
没有开始SMTP会话失败的意外 authentigation不是一个选项,。
phpmailer不执行隐式SSL(在连接上称为TLS,SMTPS) 如果没有重写smtp.class.php以包含对它的支持,那就无法按照你的要求去做。
使用端口587代替显式SSL(又名TLS,STARTTLS)。
答案 6 :(得分:1)
我有一个非常类似的问题,比如一个小时,直到我弄清楚出了什么问题。我的问题是,我使用 SSL 而不是 ssl 。检查代码中的区分大小写。 AlexV 引导我找到问题的根源。那helo / ehlo -stuff似乎无关紧要。
答案 7 :(得分:0)
使用带有tls / ssl smtp STARTTLS命令的php流套接字的简单smtp客户端: https://github.com/breakermind/PhpMimeParser/blob/master/PhpSmtpSslSocketClient.php
与gmail.com一起使用身份验证:
<?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;
}