Я пытаюсь использовать PEAR Mail для отправки с использованием внешнего smtp-сервера. Кажется, он некоторое время зависает, тогда сценарий заканчивается. Он выводит все мои сообщения «эхо» до одного после отправки. Ничего не выводится после эха, которое говорит «перед отправкой». Может ли кто-нибудь сказать мне, что здесь может быть неправильно? (значения манекена заменяются значениями smtp). Почта не отправляется. Спасибо за помощь!
echo "start"; $n = $_POST['txtName']; $e = $_POST['txtEmail']; $t = 'Kenny <email@host.com>'; $f = 'Kenny <email@host.com>'; $s = 'CPA TEST'; $b = "name: $n email: $e"; include("mail.php"); echo "after include"; /* mail setup recipients, subject etc */ $recipients = $t; $headers["From"] = $f; $headers["To"] = $t; $headers["Subject"] = $s; $mailmsg = $b; /* SMTP server name, port, user/passwd */ $smtpinfo["host"] = "my_smtp_host"; $smtpinfo["port"] = "25"; $smtpinfo["auth"] = true; $smtpinfo["username"] = "my_email"; $smtpinfo["password"] = "my_password"; echo "before object"; /* Create the mail object using the Mail::factory method */ $mail_object =& Mail::factory("smtp", $smtpinfo); echo "before send"; /* Ok send mail */ $send = $mail_object->send($recipients, $headers, $mailmsg); echo "after send"; if (PEAR::isError($send)) { print($send->getMessage());}else{print "end";} echo "done";
Попробуйте, чтобы ваша почта работала:
<?php require_once "Mail.php"; $from = "Sandra Sender <sender@example.com>"; $to = "Ramona Recipient <recipient@example.com>"; $subject = "Hi!"; $body = "Hi,\n\nHow are you?"; $host = "mail.example.com"; $username = "smtp_username"; $password = "smtp_password"; $headers = array ('From' => $from, 'To' => $to, 'Subject' => $subject); $smtp = Mail::factory('smtp', array ('host' => $host, 'auth' => true, 'username' => $username, 'password' => $password)); $mail = $smtp->send($to, $headers, $body); if (PEAR::isError($mail)) { echo("<p>" . $mail->getMessage() . "</p>"); } else { echo("<p>Message successfully sent!</p>"); } ?>
Если это не сработает, вам нужно будет проверить свою конфигурацию PHP.
См. http://php.net/manual/en/function.mail.php для получения дополнительной информации.
Если кто-то работает на linux и сталкивается с той же проблемой, что и Jayme. Вот еще одно простое решение для установки отсутствующих классов «Net /». Эти недостающие классы заставляют скрипт прерываться.
sudo pear install Net_SMTP
Я столкнулся с тем же вопросом, где он висел на команде send. Мой первый шаг состоял в том, чтобы запустить из командной строки, чтобы увидеть полное сообщение об ошибке (как описано выше в Rap).
php mymailsample.php
Он выплевывает следующее
Warning: include_once(Net/SMTP.php): failed to open stream: No such file or directory in mail/Mail/smtp.php on line 348 PHP Warning: include_once(): Failed opening 'Net/SMTP.php' for inclusion (include_path='.:/usr/lib/php') in mail/Mail/smtp.php on line 348 PHP Fatal error: Class 'Net_SMTP' not found inmail/Mail/smtp.php on line 349
Я загрузил следующее и поместил их в / Net
http://pear.php.net/package/Net_SMTP/download
http://pear.php.net/package/Net_Socket/download
Мне пришлось настроить разрешения для библиотек SMTP и Socket, чтобы их можно было прочитать Apache.
И вуаля, это сработало!
Переустановка канала: //pear.php.net/Mail-1.2.0 не работает для меня (Ubuntu 12.04)
Просто удалите символ «&» перед новым
sudo vi /usr/share/php/Mail/smtp.php 349 /*$this->_smtp = &new Net_SMTP($this->host, */ 350 $this->_smtp = new Net_SMTP($this->host,
Сценарий Todd превосходный, но не решит вашу проблему, так как ваш браузер отключается до SMTP. Вот почему вы видите только половину своей страницы и не видите сообщений об ошибках, которые можно использовать для отладки настроек SMTP.
Решение заключается в непосредственном запуске скрипта PHP. Нет таймаута.
Если вы не можете этого сделать, потому что ваш интернет-провайдер не дает вам доступ к оболочке, создайте задание cron для запуска каждую минуту. Cron отправит вам по электронной почте результат, который будет содержать полную информацию об отладке.
Я столкнулся с той же проблемой. Сценарий производства сломался, и у меня было самое сложное время для его устранения. В основном потому, что было так много кода, что мешало появлению ошибок. В конечном счете, я использовал код Кенни Рэя, изменил его для работы в моей среде и провел тест. Оказалось, что Net_Socket как-то исчез. Я удалил и переустановил его, и все снова заработало. Я надеюсь, это поможет вам.