Я пытаюсь настроить страницу php для автоматической отправки электронного письма с подтверждением. Я хотел бы использовать серверы gmail smtp, и везде, где я смотрел, предлагается использовать PHPMailer. Я установил его и использовал следующий пример кода:PHPMailer загружает некоторое время, а затем дает 500 - Ошибка внутреннего сервера
ini_set('display_errors', 1);
error_reporting(E_ALL);
require_once ("incl\PHPMailer\PHPMailerAutoload.php");
$mail = new PHPMailer();
$mail->IsSMTP();
$mail->SMTPAuth = true;
$mail->SMTPSecure = "tls";
$mail->Host = "smtp.gmail.com";
$mail->Port = 587;
$mail->Username = "[email protected]";
$mail->Password = "mypassword";
$mail->SetFrom('[email protected]','Me');
$mail->AddAddress("[email protected]");
$mail->Subject = "Verify your email";
$mail->Body = "Thank you for signing up. Please verify your email using the link below:";
$mail->IsHTML (true);
if($mail->Send()){
echo "Success";
}else{
echo "Error";
}
При попытке открыть страницу с помощью Firefox, страница будет загружаться в течение нескольких минут, затем дать эту ошибку:
500 - Internal server error.
There is a problem with the resource you are looking for, and it cannot be displayed.
Сервер является Windows Server 2008 R2 Стандарт работает IIS 7.5 и PHP Version 5.5.8. Я могу получить доступ ко всем другим страницам без проблем, но попытка вызвать $mail->Send()
кажется, что это время или что-то в этом роде. Я знаю это, потому что я прокомментировал каждую строку и медленно добавил части назад, и $mail->Send()
- это линия, которая вызывает поведение.
Мои возможности Google не позволяют мне здесь, так как я просто не могу понять, как это сделать. Любые идеи о том, что может быть неправильным?
Update
Я открыл журнал сервера затем попытался снова загрузить страницу, но новые ошибки не были добавлены в журнал. Тем не менее, я заметил следующие ошибки с сегодняшнего дня в System32\LogFiles\httperr1.log
2014-10-27 06:29:21 1.161.23.122 3148 212.83.145.123 80 HTTP/1.0 CONNECT mx2.mail2000.com.tw:25 400 - URL -
2014-10-27 10:10:12 95.183.244.244 33553 212.83.145.123 80 HTTP/1.1 GET/400 - Hostname -
2014-10-27 11:25:25 207.38.185.197 51157 212.83.145.123 80 HTTP/1.1 GET /tmUnblock.cgi 400 - Hostname -
2014-10-27 12:46:21 1.168.221.158 7952 212.83.145.123 80 - - - - - Timer_ConnectionIdle -
UPDATE 2
Я уверен, что мои личные данные аккаунта Gmail, являются правильными и протестировали отправки из него с помощью Thunderbird на сервере. При попытке отправить без защищенных методов, как это было предложено в this comment я получаю эту ошибку:
MAIL FROM command failed,550,5.7.3 Requested action aborted; user not authenticated
Мой PHP Mailer версия 5.2.9 и я теперь тоже попробовал следующая:
- Использование
\\
в пути к файлу вместо\
- Без изменений
- Включая
class.phpmailer.php
вместоPHPMailerAutoload.php
Fatal error: Class 'SMTP' not found in C:\inetpub\wwwroot\incl\PHPMailer\class.phpmailer.php on line 1195
- Использование SSL через порт 465
SMTP connect() failed
- Посылающий с адресом HOTMAIL через порт 25 с
$mail->SMTPAuth = false;
MAIL FROM command failed,550,5.7.3 Requested action aborted; user not authenticated
Update 3
После перезагрузки страницы проблема, я проверил через средства просмотра событий и увидел новую запись в ОС Windows Logs -> Система:
PHP Error : syntax error, unexpected BOOL_TRUE in C:\PHP\php.ini on line 101
Эта линия:
php_flag display_errors on
Ошибка 500 не имеет смысла сама по себе. В журналах веб-сервера вы должны найти значимое сообщение об ошибке. Либо это, либо установите 'display_errors' значение true в вашем скрипте или php.ini, чтобы сделать его видимым. Это не относится к PHPMailer - это верно для любой фатальной ошибки PHP. – Synchro
Я попытался добавить 'ini_set ('display_errors', 1);' в начало скрипта, но он не изменил вывод. Обновлен вопрос с некоторыми подробностями из файла журнала. –
Если вы видите 500 ошибок в своем браузере, но ничего не регистрируется, что-то не так с вашей конфигурацией веб-сервера. Ошибки, которые вы указали, - это ошибки 400 (плохой запрос). Вы также должны попытаться включить отчет об ошибках: 'error_reporting (E_ALL);' – Synchro