2017-01-01 4 views
1

У меня есть контактная форма PHPMailer, которая отправляет данные в учетную запись GMail. Он делает это успешно, когда сайт работает на локальном хосте, но я получаю следующую ошибку, когда я загрузил веб-страницу на сервер и попытался использовать форму контакта: Сообщение не может быть отправлено.Mailer Error: SMTP connect() не удалось ,Форма обратной связи PHPMailer не работает на сервере, но работает на localhost?

Я загружаю файлы через Plesk на сервер, хотя я сомневаюсь, что это актуально. Вот код:

<form action="currentFile.php" method="POST"> 
Full Name:<input required type="text" name="fullname"/> 
<input type="submit"/> 
</form> 

<?php 
require 'phpmailer/PHPMailerAutoload.php'; 

$mail = new PHPMailer; 

$mail->isSMTP();          
$mail->Host = 'smtp.gmail.com'; 
$mail->SMTPAuth = true;         
$mail->Username = '[email protected]';     
$mail->Password = 'pass';       
$mail->SMTPSecure = 'tls';        
$mail->Port = 587;          

$mail->addAddress('[email protected]');  

$mail->Subject = 'Contact Form'; 
$mail->Body = "Test"; 
$mail->AltBody = "Test"; 

if(!$mail->send()) { 
echo 'Message could not be sent.'; 
echo 'Mailer Error: ' . $mail->ErrorInfo; 
} else { 
echo 'Message has been sent'; 
} 
?> 

Я считаю изменение $mail->isSMTP(); в $mail->isMAIL(); нет никакой разницы. Что я могу сделать, чтобы данные формы отправляются по электронной почте, когда сайт находится в сети (на моем сервере)?

Примечание. Используемая учетная запись и пароль gmail должны быть «поддельными» в приведенном ниже коде. Я намерен настроить таргетинг на учетную запись GMail, и я успешно установил адрес и пароль Google Mail, поэтому скрипт успешно запущен на локальном хосте.

спасибо.

+0

Вы уверены, что порт 587 открыт (для исходящих соединений) на вашем сервере? – Dekel

+0

@Dekel Я арендую сервер у компании, это что-то, о чем я должен связаться с ними? Я попытался использовать порт 25 и порт 465, альтернативные варианты GMail, они также не работали на сервере. Между тем, 25 и 587 работают нормально на локальном хосте. – H3ll0

+0

Нет, если на арендованном сервере у вас должен быть root-доступ, чтобы открыть порт в брандмауэре. Метод, который будет зависеть от установленной ОС, панели управления и т. Д. Например, ubuntu использует ufw, любая ОС с установленной WHM/Cpanel должна иметь возможность устанавливать CSF (ConfigServerFirewall), который доступен через панель WHM – Chris

ответ

1

"@Fred-ii- Thanks this helped resolve my issue. Please post as an answer so I can give credit. – H3ll0 10 mins ago"

Действие action="currentFile.php" принадлежит <form>, а не вход и с использованием либо метода GET/POST.

Вам также необходимо использовать любой метод и назначить/использовать массив для ввода.

т.е .:

$var = $_POST['var']; // or $_GET depending on the preferred method. 

Там также должно быть в заголовке From:, так что может отправить mailout спам или отвергнута в целом.

т.е .:

$mail->setFrom('[email protected]', 'First Last'); 

Справочные ссылки для устранения неполадок:

Вот GitHub для PHPMailer:


Если у вас нет записи SPF (Sender Policy Framework), создание одного было бы полезно.

+0

Ответ был на самом деле связан с GMail, выяснилось, что использование отладки. Было оказано влияние на добавление отладки из-за ваших ссылок, спасибо. – H3ll0

+0

@ H3ll0 Справа, рад слышать, что вопрос был разрешен, * приветствия * –