Ошибка отправки почты PHP - PullRequest
3 голосов
/ 10 апреля 2009

Пожалуйста, помогите мне, я новичок в PHP, и с последних 5 часов я пытаюсь отправлять почту и теперь очень устал. Спасибо.

Вот мой код. Я использую учетную запись Gmail.

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

$mail             = new PHPMailer();

$body             = $mail->getFile('contents.html');
$body             = eregi_replace("[\]",'',$body);

$mail->IsSMTP();
$mail->SMTPAuth   = true;                  // enable SMTP authentication
$mail->SMTPSecure = "ssl";                 // sets the prefix to the servier
$mail->Host       = "smtp.gmail.com";      // sets GMAIL as the SMTP server
$mail->Port       = 465;                   // set the SMTP port for the GMAIL server

$mail->Username   = "hussaintalha@gmail.com";  // GMAIL username
$mail->Password   = "xxxxxxxx";            // GMAIL password

$mail->AddReplyTo("hussaintalha@gmail.com","First Last");

$mail->From       = "hussaintalha@gmail.com.com";
$mail->FromName   = "First Last";

$mail->Subject    = "PHPMailer Test Subject via gmail";

//$mail->Body       = "Hi,<br>This is the HTML BODY<br>";                      //HTML Body
$mail->AltBody    = "To view the message, please use an HTML compatible email viewer!"; // optional, comment out and test
$mail->WordWrap   = 50; // set word wrap

$mail->MsgHTML($body);

$mail->AddAddress("hussaintalha@gmail.com", "John Doe");

$mail->AddAttachment("images/phpmailer.gif");             // attachment

$mail->IsHTML(true); // send as HTML

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

Когда я запускаю свой файл, я получаю эту ошибку:

Предупреждение: fopen (contents.html) [function.fopen]: не удалось открыть поток: нет такого файла или каталога в D: \ xampplite \ HTDOCS \ WebEng \ class.phpmailer.php по линии 1870

Предупреждение: fsockopen () [function.fsockopen]: невозможно подключиться к ssl: //smtp.gmail.com: 465 (Невозможно найти транспортный сокет "ssl" - вы забыли включить его когда вы настроили PHP?) в D: \ xampplite \ HTDOCS \ WebEng \ class.smtp.php на линии 122 Ошибка почтовой программы: Ошибка SMTP: Не удалось подключиться к узлу SMTP.

Ответы [ 2 ]

4 голосов
/ 10 апреля 2009

Прежде всего, когда вы получаете сообщения об ошибках, это здорово! Потому что в 90% случаев вы обнаружите, что они были у других, и поэтому вы найдете много информации в Интернете об этом сообщении об ошибке.

Итак, шаг 1, когда вы получаете сообщение об ошибке, о котором вы еще не знаете, всегда открывайте Google и скопируйте его туда. Но удалите любые пути или другие вещи, которые однозначно связаны с вашей системой.

Тогда о ваших ошибках. Особенно xampp light не поддерживает SSL. Может быть, вы сначала попробуйте более простой пример sendmail. Как очень маленький, а затем увеличить его шаг за шагом. Я всегда так делаю, когда не знаю, почему что-то не работает. Я начинаю с одной строки и вижу, что она делает, затем добавляю другую и т. Д.

Допустим, вы начали с этого и посмотрите, работает ли он:

<?php

include("class.phpmailer.php");

$mail             = new PHPMailer();

$mail->IsSMTP();
$mail->SMTPAuth   = true;                  // enable SMTP authentication
$mail->Host       = "smtp.gmail.com";      // sets GMAIL as the SMTP server
$mail->Port       = 465;                   // set the SMTP port for the GMAIL server
$mail->Username   = "hussaintalha@gmail.com";  // GMAIL username
$mail->Password   = "xxxxxxxx";            // GMAIL password

$mail->From       = "hussaintalha@gmail.com";
$mail->Subject    = "PHPMailer Test Subject via gmail";
$mail->Body       = "Hi, this is a test";           
$mail->AddAddress("hussaintalha@gmail.com", "Hussain");

$mail->send();
?>

о, и кстати. в вашей почте слишком много .com!

4 голосов
/ 10 апреля 2009

Ваша установка PHP (судя по всему, XAMPP) не поддерживает SSL. Убедитесь, что линия

extension=php_openssl.dll

- это , а не закомментировано в вашем php.ini, перезапустите Apache, и если это все еще не работает, попробуйте перезаписать (или скопировать) ssleay32.dll и libeay32.dll из вашего каталога PHP в двоичный файл Apache (.exe) и перезапустите Apache.

...