问题描述
有很多帖子试图弄清楚PHPmailer在localhost上可以工作,但不能在服务器上工作,但是我的问题是很奇怪!
我的脚本在本地计算机(OSX上的XAMP)上运行良好。我在服务器上使用SMTP,并且一切正常!
<?PHP
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;
include 'PHPMailer/src/PHPMailer.PHP';
include 'PHPMailer/src/Exception.PHP';
include 'PHPMailer/src/SMTP.PHP';
$serverEmail = '[email protected]';
$email1 = $_GET['el1'];
$mail = new PHPMailer(true);
// SMTP config
$mail->isSMTP();
$mail->Host = 'lx14.hoststar.hosting';
$mail->SMTPAuth = true;
$mail->Username = $serverEmail;
$mail->Password = '***********';
$mail->SMTPSecure = PHPMailer::ENCRYPTION_SMTPS;
$mail->Port = 465;
/* disable some SSL checks. */
$mail->SMTPOptions = array(
'ssl' => array(
'verify_peer' => false,'verify_peer_name' => false,'allow_self_signed' => true
)
);
// Headers
$mail->setFrom($serverEmail,'Alarm system');
$mail->addReplyTo($serverEmail,'Alarm system');
$mail->addAddress($email1,$email1);
$mail->Subject = 'Something is wrong';
$mail->isHTML(true);
$mailContent = 'Some @R_133_4045@ion..';
$mail->Body = $mailContent;
if($mail->send()){
print_r("Sending: OK".$br);
}else{
print_r("Sending: ERROR".$br);
}
?>
所以我的网址是 localhost/api.PHP[email protected] ,并且运行正常。
问题!
如果我从其他来源(例如电话或局域网中的另一台计算机)调用相同的PHP文件,则将执行 10.0.0.8/api.PHP[email protected] strong>,这基本上是同一件事。
但是失败!各种错误都会弹出,例如:
致命错误:消息“以下发件人地址失败”的未捕获异常“ PHPMailer \ PHPMailer \ Exception”:[email protected]:MAIL FROM命令失败,访问被拒绝-无效的HELO名称(请参阅RFC2821 4.1.3) ,550,SMTP服务器错误:MAIL FROM命令失败详细信息:访问被拒绝-无效的HELO名称(请参阅RFC2821 4.1.3)SMTP代码:/Users/myself/eclipse-PHP/PHPMailer/src/PHPMailer.PHP:1869中的550'堆栈跟踪:#0 /Users/myself/eclipse-PHP/PHPMailer/src/PHPMailer.PHP(1601):PHPMailer \ PHPMailer \ PHPMailer-> smtpSend('Date:Mon,31 A ...',
以此类推。
从另一台计算机调用脚本时,是什么导致脚本失败?是相同的apache,相同的PHP,相同的PHPmailer,相同的文件,相同的SMTP服务器访问权限,相同的凭据...
那很长。谢谢大家的时间!
解决方法
这是问题的HELO名称。如果未明确设置,则PHPMailer尝试在this code中进行设置。在诸如10.0.0.0/8
之类的专用网络上,它可能以IP地址作为HELO名称结尾,但它本身是不允许的,但是,您可以按照RFC5321 § 4.1.3将其包装在方括号中。 PHPMailer不会为您执行此操作,但是您可以通过Helo
属性显式设置一个HELO名称:
$mail->Helo = 'localhost.localdomain';
或
$mail->Helo = '[10.0.0.8]';
尝试一下。