2014-06-18 3 views
-1

PHPMailer скрипт отлично работает на локальный, но как только загрузил на 000webhost.com это дает мне сообщение об ошибке:PHPMailer не работает после того, как прошел

SMTP -> ERROR: Failed to connect to server: Connection timed out (110) 
The following From address failed: [email protected] : Called Mail() without being connected   Mailer Error: The following From address failed: [email protected] : Called Mail() without being connected 

Вот мой сценарий:

<?php 
require_once('class.phpmailer.php'); 
//include("class.smtp.php"); // optional, gets called from within class.phpmailer.php   if not already loaded 

////////extracting form data from POST///////// 

$course = $_REQUEST["Course__2"]; 
$receiver_name = $_REQUEST["Name__1"]; 
$receiver_email = $_REQUEST["Email__3"]; 
///////////////// 

$mail    = new PHPMailer(); 

$body    = "Hi ."; 

$mail->IsSMTP(); // telling the class to use SMTP 
$mail->Host  = "smtp.gmail.com";  // sets GMAIL as the SMTP server 
$mail->Port  = 587;     // set the SMTP port for the GMAIL server 
$mail->SMTPAuth = true;     // enable SMTP authentication 
$mail->Username = "[email protected]"; // GMAIL username 
$mail->Password = "00000000";   // GMAIL password 
$mail->SMTPSecure = "tls";     // sets the prefix to the servier 


$mail->SMTPDebug = 1;      // enables SMTP debug information (for testing) 
             // 1 = errors and messages 
             // 2 = messages only 




$mail->SetFrom('[email protected]', ' Global'); //sender's  email address 

$mail->AddReplyTo("[email protected]","Global"); //A reply to address 

$mail->Subject = "10% Off Voucher"; 

$mail->AltBody = "To view the message, please use an HTML compatible email viewer!";  // optional, comment out and test 

$mail->MsgHTML($body); 

$address = $receiver_email; //receiver's address 
$mail->AddAddress($address, $receiver_name); //name of receiver 

if(!$mail->Send()) { 
    echo "Mailer Error: " . $mail->ErrorInfo; 
} else { 
    echo "Message sent!"; 
} 



?> 

Является ли это проблема с хостинг-провайдером или что-то не так с моим кодом?

+0

Он отлично работает на моем сервере. Вы используете бесплатный хостинг 000webhost или платный? –

+0

Тот же код, я тестировал на своем XAMPP. Это хорошо работает. –

+0

Извините, люди. Неверная коробка. Вот комментарий: 000webhost блокирует Gmail. Вы используете бесплатный аккаунт? Вам нужно будет проверить их, чтобы подтвердить, но я уверен, что это проблема. –

ответ

-1

Может быть, у вашего хоста нет расширений OpenSSL, активированных для Apache с PHP по какой-либо причине.

При этом вам не нужен SMTP для отправки писем. Фактически типичный способ отправки почты на хост Unix/Linux осуществляется через локальный sendmail SMTP. Поскольку вы используете PHPMailer в папке examples/ в репозитории PHPMailershows there is a sendmail example. Я пустошь рекомендую вам использовать это вместо SMTP на удаленном хосте:

require '../PHPMailerAutoload.php'; 

//Create a new PHPMailer instance 
$mail = new PHPMailer(); 

// Set PHPMailer to use the sendmail transport 
$mail->isSendmail(); 

//Set who the message is to be sent from 
$mail->setFrom('[email protected]', 'First Last'); 

//Set an alternative reply-to address 
$mail->addReplyTo('[email protected]', 'First Last'); 

//Set who the message is to be sent to 
$mail->addAddress('[email protected]', 'John Doe'); 

//Set the subject line 
$mail->Subject = 'PHPMailer sendmail test'; 

//Read an HTML message body from an external file, convert referenced images to embedded, 
//convert HTML into a basic plain-text alternative body 
$mail->msgHTML(file_get_contents('contents.html'), dirname(__FILE__)); 

//Replace the plain text body with one created manually 
$mail->AltBody = 'This is a plain-text message body'; 

//Attach an image file 
$mail->addAttachment('images/phpmailer_mini.png'); 

//send the message, check for errors 
if (!$mail->send()) { 
    echo "Mailer Error: " . $mail->ErrorInfo; 
} else { 
    echo "Message sent!"; 
} 

Кроме того, еще один способ проверить, если ваш удаленный сервер в 000WebHost это обеспечивает доступ к порту TLS Google заключается в использовании этого сценария found in this answer. Возьмите это и поместите его в файл PHP на свой хост &, затем загрузите его в веб-браузере.

<?php 
$fp = fsockopen('tls://smtp.gmail.com:465'); 
if(!$fp) 
{ 
    echo 'Unable to connect'; 
} 
else 
{ 
    $response = fgets($fp, 256); 
    echo 'Response: ' . $response; 
} 
?> 

сообщение успех я получаю:

Response: 220 mx.google.com ESMTP r14sm2233165qga.4 - gsmtp

Если он не ответ будет что-то вроде этого:

Warning: fsockopen(): php_network_getaddresses: getaddrinfo failed: nodename nor servname provided, or not known in /Applications/MAMP/htdocs/test.php on line 3

И если это не удается, то вы знаете, что есть проблемы с 000WebHost и вывод TLS-соединений в Gmail.

+0

@Zoubeir Ну, если вы получите сообщение об ошибке, это означает, что '000WebHost' блокирует SMTP-порты. Я бы порекомендовал вам использовать 'sendmail', как показано в моем примере. – JakeGould

+0

Да, это должно быть так, потому что я также получаю следующую ошибку при использовании sendmail: Ошибка Mailer: Не удалось выполнить:/usr/sbin/sendmail – Zoubeir

+0

спасибо! Извините, я не могу проголосовать за ваш ответ, потому что у меня нет репутации, но, тем не менее, для помощи. Мне нужно было бы найти другой хост (бесплатный), который мог бы поддерживать sendmail как минимум. – Zoubeir

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