发送电子邮件通过SMTP与PHPMailer
题
我想送SMTP电子邮件的使用PHPMailer,但我继续得到这种错误信息,任何想法如何摆脱它吗?
我试图通过SSL port465.
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');
任何想法?
解决方案
据我所知,您的代码一切正常。你的错误是:
SMTP 错误:无法验证。
这意味着 SMTP 服务器拒绝您发送的凭据。确保主机、端口、用户名和密码正确。
如果您想使用 TLS,请尝试添加:
$mail->SMTPSecure = 'tls';
如果您想使用 SSL,请尝试添加:
$mail->SMTPSecure = 'ssl';
请记住:
- 某些 SMTP 服务器可以禁止来自“外部”的连接。
- 某些 SMTP 服务器不支持 SSL(或 TLS)连接。
或许 这个例子 可以提供帮助(GMail 安全 SMTP)。
其他提示
试图发送电子邮件的通过,SMTP server手动/从一个交互式的邮件(例如Mozilla的雷鸟).从错误,它似乎在服务器不会接受您的凭据。是SMTP上运行的港口,或者是SSL+SMTP?你似乎并不能使用安全连接在代码你已经发布,并且我不知道如果PHPMailer实际上支持SSL+SMTP。
(第一结果的谷歌上搜索你的SMTP server的hostname: http://podpora.ebola.cz/idx.php/0/006/article/Strucny-technicky-popis-nastaveni-sluzeb.html 似乎在说"SMTPs邮件发送:安全SSL连接、港口:465".)
它看起来像PHPMailer并支持SSL;至少从 此.所以,你会需要改变这样的:
define('SMTP_SERVER', 'smtp.ebola.cz');
到这个:
define('SMTP_SERVER', 'ssl://smtp.ebola.cz');
试端口25,而不是456。
我使用端口456时,它改变到25为我工作得到了同样的错误。
这似乎是一个瞎猜,但如果做SMTP需要SSL确保PHP已经遵守了OpenSSL的。
要检查使用phpinfo()
希望它能帮助!
是的,你需要OpenSSL的工作正常。我的备份试验场的工作,我活的服务器没有。区别? Live服务器没有PHP配置中有OpenSSL的。
SMTP - >从服务器:结果 SMTP - >从服务器:点击 SMTP - >错误:EHLO不从服务器接受:
这是典型的试图连接到未使用SSL与客户端的SSL服务
SMTP错误:无法验证
没有惊喜有具有启动失败,SMTP会话 authentigation不是一个选项。
PHPMailer的不执行隐式SSL(又名TLS上连接,SMTPS) 重写smtp.class.php短,包括支持它有它没办法的事,你问什么。
使用端口587与明确的SSL(又名TLS,STARTTLS)来代替。
我有这样的事情一个小时非常类似的问题,直到我想通了什么地方出了错。我的问题是,我用的 SSL 的,而不是的 SSL 的。检查的区分大小写强>中的代码。 AlexV 引导我到问题的来源。也就是说HELO / EHLO -stuff似乎不相关的。
简单SMTP客户端用PHP流套接字与TLS / SSL SMTP STARTTLS命令: https://github.com/breakermind/PhpMimeParser/blob/master/PhpSmtpSslSocketClient。 PHP
可与gmail.com带有authenticate:
<?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;
}