PHPMailer 错误 - SMTP 错误:数据不被接受

lal*_*luk 0 php email smtp phpmailer

我已经完成了一个联系表格,显然我希望在用户在我的网站上填写此表格时收到一封确认电子邮件。

我正在使用 PHPMailer。当我以本地主机身份在我的计算机上测试代码时,一切正常,并且可以正确接收确认消息。

这是 PHP 脚本:

<?php

$Name= $_POST['Name'];
$Email = $_POST['Email'];
$Message = $_POST['Message'];

if ($Name=='' || $Email=='' || $Message==''){

echo "<script>alert('Please fill out mandatory fields');location.href ='javascript:history.back()';</script>";

}else{

require("archivosformulario/class.phpmailer.php");
$mail = new PHPMailer();

$mail->From     = $Email;
$mail->FromName = $Name; 
$mail->AddAddress("myemail@gmail.com");


$mail->WordWrap = 50; 
$mail->IsHTML(true);     
$mail->Subject  =  "Contact Form";
$mail->Body     =  "Name: $name \n<br />".    
"Email: $Email \n<br />".    
"Message: $Message\n<br />";


// SMTP Server

$mail->IsSMTP(); 
$mail->SMTPDebug  = 2;    
$mail->Host = "smtp.gmail.com";
$mail->SMTPAuth = true; 
$mail->Port = 465;
$mail->SMTPSecure = "ssl"; 
$mail->Username = "myemail@gmail.com"; 
$mail->Password = "mypassword"; 

if ($mail->Send())
echo "<script>alert('We have received your message. We will contact you shortly.');location.href ='javascript:history.back()';</script>";
else
echo "<script>alert('Error');location.href ='javascript:history.back()';</script>";

}

?>
Run Code Online (Sandbox Code Playgroud)

问题是当我在网络托管(即 123-reg.co.uk)上上传这个 PHP 脚本时,它不起作用。

错误信息:

SMTP Error: Data not accepted
Run Code Online (Sandbox Code Playgroud)

这是 PHP 脚本:

<?php

$Name= $_POST['Name'];
$Email = $_POST['Email'];
$Message = $_POST['Message'];

if ($Name=='' || $Email=='' || $Message==''){

echo "<script>alert('Please fill out mandatory fields');location.href ='javascript:history.back()';</script>";

}else{

require("archivosformulario/class.phpmailer.php");
$mail = new PHPMailer();

$mail->From     = $Email;
$mail->FromName = $Name; 
$mail->AddAddress("email@mydomainat123-reg.com");


$mail->WordWrap = 50; 
$mail->IsHTML(true);     
$mail->Subject  =  "Contact Form";
$mail->Body     =  "Name: $name \n<br />".    
"Email: $Email \n<br />".    
"Message: $Message\n<br />";


// SMTP Server

$mail->IsSMTP(); 
$mail->SMTPDebug  = 2;    
$mail->Host = "smtp.123-reg.co.uk";
$mail->SMTPAuth = true; 
$mail->Port = 25;
$mail->Username = "email@mydomainat123-reg.com"; 
$mail->Password = "password"; 

if ($mail->Send())
echo "<script>alert('We have received your message. We will contact you shortly.');location.href ='javascript:history.back()';</script>";
else
echo "<script>alert('Error');location.href ='javascript:history.back()';</script>";

}

?>
Run Code Online (Sandbox Code Playgroud)

我曾尝试从另一个免费的网络托管上传和执行这个 PHP 脚本,但它没有用。

我是 PHP 新手,尤其是在处理邮件功能方面。

原因是什么?任何额外的帮助将不胜感激。

在此先感谢您的帮助。

Sha*_*hah 5

您的服务器不允许您配置不同的发件人和用户名:$mail->From例如$mail->Username

而且...

大多数时候,我看到这条消息,电子邮件无论如何都会成功发送,但并非总是如此。要调试,请设置:

$mail->SMTPDebug = true;
Run Code Online (Sandbox Code Playgroud)

您可以回显调试消息或使用error_log()以下命令记录它们:

// 'echo' or 'error_log'
$mail->Debugoutput = 'echo';
Run Code Online (Sandbox Code Playgroud)

一个可能的候选,尤其是在负载很重的服务器上是 SMTP 超时:

// default is 10
$mail->Timeout = 60;
Run Code Online (Sandbox Code Playgroud)

class.smtp.php 还有一个用于从服务器读取的 Timelimit 属性!

希望这些信息有帮助!:)