Проблема с PHP PEAR Mail
Я пытаюсь использовать PEAR Mail для отправки с использованием внешнего smtp-сервера. Кажется, он некоторое время зависает, затем заканчивается script. Он выводит все мои сообщения "эхо" до одного после отправки. Ничего не выводится после эха, которое говорит "перед отправкой". Может ли кто-нибудь сказать мне, что здесь может быть неправильно? (значения манекена заменяются значениями smtp). Почта не отправляется. Спасибо за помощь!
echo "start";
$n = $_POST['txtName'];
$e = $_POST['txtEmail'];
$t = 'Kenny <[email protected]>';
$f = 'Kenny <[email protected]>';
$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";
Ответы
Ответ 1
Попробуйте, чтобы ваша почта работала:
<?php
require_once "Mail.php";
$from = "Sandra Sender <[email protected]>";
$to = "Ramona Recipient <[email protected]>";
$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.
Ответ 2
Если кто-то работает в Linux и работает с той же проблемой, что и Jayme. Вот еще одно простое решение для установки отсутствующих классов "Net/". Эти недостающие классы приводят к прерыванию script.
sudo pear install Net_SMTP
Ответ 3
Я столкнулся с той же проблемой, где она зависала в команде send. Мой первый шаг состоял в том, чтобы запустить из командной строки, чтобы увидеть полное сообщение об ошибке (как сказал Рэп выше).
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.
И вуаля, это сработало!
Ответ 4
Повторная установка канала://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,
Ответ 5
Todd script отлично, но не решит вашу проблему, так как ваш браузер отключается до SMTP. Вот почему вы видите только половину своей страницы и не видите сообщений об ошибках, которые можно использовать для отладки настроек SMTP.
Решение заключается в непосредственном запуске PHP script. Нет таймаута.
Если вы не можете этого сделать, потому что ваш интернет-провайдер не дает вам доступ к оболочке, создайте задание cron для запуска каждую минуту. Cron отправит вам по электронной почте результат, который будет иметь полные детали отладки.
Ответ 6
Я столкнулся с той же проблемой. Производство script сломалось, и у меня было самое сложное время для его устранения. В основном потому, что было так много кода, что мешало появлению ошибок. В конечном счете, я использовал код Kenny Ray, изменил его для работы в моей среде и провел тест. Оказалось, что Net_Socket как-то исчез. Я удалил и переустановил его, и все снова заработало. Надеюсь, это поможет вам.