2016-03-12 3 views
0

Я сделал контактную форму и, очевидно, хотел бы получить письмо с подтверждением при заполнении пользователем этой формы на моем сайте.Ошибка PHPMailer - Ошибка SMTP: данные не принимаются

Я использую PHPMailer. Когда я проверяю код на своем компьютере как localhost, все работает нормально, и подтверждающее сообщение получено правильно.

Здесь вы РНР скрипт:

<?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 protected]"); 


$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 = "[email protected]"; 
$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>"; 

} 

?> 

Проблема заключается в том, когда я загрузить этот PHP скрипт на веб-хостинга (т.е. 123-reg.co.uk), то это не распространяется работу.

Сообщение об ошибке:

SMTP Error: Data not accepted 

Здесь вы РНР скрипт:

<?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 protected]"); 


$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 protected]"; 
$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>"; 

} 

?> 

Я попытался загрузки и выполнения этого сценария РНР с другой бесплатный веб-хостинг, но это было не воспользоваться.

Я как бы новичок в PHP, особенно при работе с почтовыми функциями.

В чем причина? Любая дополнительная помощь будет оценена по достоинству.

Заранее за вашу помощь.

+1

Вы используете старую версию PHPMailer и основали свой код на устаревшем примере. [Получить последнюю версию] (https://github.com/PHPMailer/PHPMailer). Вы показали два бита кода, которые делают то же самое - я предполагаю, что второй правильный. Вам нужно показать вывод отладки, который вы видите с помощью SMTPDebug = 2. Если вы используете 123-reg, я вам жаль. – Synchro

+0

Спасибо за ваш комментарий, Synchro. Я использую PHPMailer 5.2.4, который, я думаю, является последней версией PHPMailler. Вы рекомендуете мне другой веб-хостинг? Который из? – laluk

+0

Нет, 5.2.4 устарели. Было бы быстрее для вас просто нажать ссылку, которую я вам дал, а не набирать этот комментарий. Я бы порекомендовал gandi.net для хостинга; не так дешево, как 123, но они действительно выполняют свою работу должным образом. – Synchro

ответ

3

Ваш сервер не разрешает другого отправителя и имя пользователя, вы должны конфиг: $mail->From как $mail->Username

Кроме того ...

В большинстве случаев я видел это сообщение электронной почты получает успешно отправлен в любом случае, но не всегда. Для отладки, установите:

$mail->SMTPDebug = true; 

Вы можете повторить отладочные сообщения или войти используя их error_log():

// 'echo' or 'error_log' 
$mail->Debugoutput = 'echo'; 

Вероятным кандидатом, особенно на сильно загруженном сервере являются SMTP таймауты:

// default is 10 
$mail->Timeout = 60; 

class.smtp.php также имеет свойство Timelimit, используемое для чтения с сервера!

Надеюсь, эта информация поможет! :)

+1

Помимо вашего первого утверждения (что может быть неверно для 123), все это неправильно или неэффективно. 'SMTPDebug' - числовое значение, и вы не увидите ответы сервера, если вы не установите его на 2.« Debugoutput »по умолчанию« echo ». По умолчанию 'Timeout' это 300, а не 10. – Synchro

+0

Здесь вы отладочный вывод: ' SMTP -> ОТ СЕРВЕРА: 220 smtp.gmail.com ESMTP gg7sm19589714wjd.10 gsmtp SMTP -> ОТ СЕРВЕРА: 250-Smtp .gmail.com к вашим услугам [IP] 250- SIZE 35882577 250-8BITMIME 250-AUTH LOGIN PLAIN XOAUTH2 ОБЫЧНЫХ-CLIENTTOKEN OAUTHBEARER XOATUH 250-ENHANCEDSTATUSCODES 250-PIPELINING 250-отрывы 250 SMTPUTF8 gsmtp SMTP -> ОТ СЕРВЕРА: 250 2.1.5 Сброс gg7sm19589714wjd.10 - gsmtp Ошибка SMTP: не удалось аутентифицировать Любое предложение? Заранее спасибо! – laluk

+0

Кажется, «Имя пользователя и пароль не принимаются» Можете ли вы войти в свою учетную запись вручную? –

Смежные вопросы