2016-11-03 6 views
1

Я создаю этот проект, где система принимает регистрацию, а затем отправляет информацию через почту владельцу. Я использую PEAR: Mail Mime для этого. Отправка почты на самом деле работает на моем локальном компьютере, но после загрузки этого проекта на сайт хостинга (GoDaddy) он больше не отправляется.PEAR: Mail Mime - Не удается отправить электронное письмо после загрузки на сайт хостинга - GoDaddy

Я сделал чек об ошибке, чтобы увидеть, что мешает отправке почты, и я получил это сообщение:

Не удалось подключиться к SSL: //smtp.gmail.com: 465 [SMTP: Не удалось подключить разъем: Соединение отклонено (код: -1, ответ:)]

Я использую GMail учетной записи для отправки сообщений электронной почты, а также использовать этот код, чтобы сделать это:

/* INCLUDE PREREQUISITES IN ORDER TO SEND AN EMAIL */ 
include('../../application/third_party/Mail-1.3.0/Mail-1.3.0/Mail.php'); 
require_once '../../application/third_party/Mail_Mime-1.10.0/Mail_Mime-1.10.0/Mail/mime.php'; 

/* HEADER INFORMATION */ 
$from = '<***@gmail.com>'; 
$to = '<***@gmail.com>'; 
$subject = 'Someone registers'; 
$crlf = "\r\n"; 

$headers = array(
    'From' => $from, 
    'To' => $to, 
    'Subject' => $subject 
); 

// CREATING THE MIME MESSAGE 
$mime = new Mail_mime($crlf); 

$html = ' 
    <html> 
     <body> 
      Message here 
     </body> 
    </html>'; 

// SETTING THE BODY OF THE EMAIL TO HTML 
$mime->setHTMLBody($html); 

$body = $mime->get(); 
$headers = $mime->headers($headers); 

// SENDER INFORMATION 
$smtp = Mail::factory('smtp', array(
    'host' => 'ssl://smtp.gmail.com', 
    'port' => '465', 
    'auth' => true, 
    'username' => '***@gmail.com', 
    'password' => '***' 
)); 

$mail = $smtp->send($to, $headers, $body); 

if (PEAR::isError($mail)) { 
    $errormessage = '<p>'.$mail->getMessage().'</p>'; // ERROR MESSAGE 
    $mail->getUserInfo(); 
} 

Да, я поворачиваю ed на Access for less secure apps счета отправителя GMail.

И да, отображение ошибки включено.

ini_set('display_errors', 1); 
error_reporting(E_ALL); 

Любые решения, которые я, возможно, пропустил?

ответ

0

Нашли ответ об исходящей почте в этом поле - Sending email through gmail SMTP on GoDaddy.

Это связано с хостинг-провайдером GoDaddy, который ограничивает порт SSL GMail (465) и другие порты, такие как 25 и 587. Благодаря этой статье - Troubleshooting PHPMailer Problems - от GitHub для очистки. Пользователям прибегают вместо этого использовать почтовый сервер GoDaddy.

Но я все-таки удалось отправить электронное письмо с помощью GMail, выполнив:

$smtp = Mail::factory('smtp'); 
/* SETTINGS WILL BE IN DEFAULT (E.G. HOST:LOCALHOST, PORT: 45) */ 

вместо

$smtp = Mail::factory('smtp', array(
    'host' => 'ssl://smtp.gmail.com', 
    'port' => '465', 
    'auth' => true, 
    'username' => '***@gmail.com', 
    'password' => '***' 
)); 

Но приемник получает отправленное по электронной почте, как «спам» - результат будет, что получатель не заметит входящие письма из системы (не очень хороший выбор). И нет записей в отправленных элементах отправителя (означает, что вы «использовали» письмо для отправки электронной почты, но не полностью).

Итак, мы вернулись с почтовым сервером GoDaddy. Во-первых, вы должны определить сервер ретрансляции своей учетной записи хостинга, проверив это What is the name of my hosting account's relay server?, которое было опубликовано самим GoDaddy. В моем случае Linux (cPanel), который я буду использовать localhost в качестве моего хоста.

$smtp = Mail::factory('smtp', array(
    'host' => 'localhost', 
    'auth' => true, 
    'username' => '***@***.com', 
    'password' => '***' 
)); 

Но, как ни странно, до сих пор нет записей отправленных предметов. Надеюсь, что представитель GoDaddy читает это.