Проблема с PHP PEAR Mail - PullRequest
       18

Проблема с PHP PEAR Mail

15 голосов
/ 18 февраля 2010

Я пытаюсь использовать 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";

Ответы [ 6 ]

46 голосов
/ 03 января 2013

Если кто-то работает в Linux и сталкивается с той же проблемой, что и Jayme. Вот еще одно простое решение для установки отсутствующих классов "Net /". Эти отсутствующие классы вызывают прерывание сценария.

sudo pear install Net_SMTP

15 голосов
/ 07 июля 2011

Я столкнулся с той же проблемой, что и зависание команды send.Моим первым шагом было запустить из командной строки, чтобы увидеть полное сообщение об ошибке (как Рэп предлагал выше).

php mymailsample.php

Выдается следующееи поместите их в / Net

http://pear.php.net/package/Net_SMTP/downloadhttp://pear.php.net/package/Net_Socket/download

Мне пришлось настроить разрешения библиотек SMTP и Socket, чтобы они могли быть прочитаны Apache.

И вот, это сработало!

5 голосов
/ 18 февраля 2010

Попробуйте, чтобы убедиться, что ваша почта работает:

<?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 для получения дополнительной информации.

4 голосов
/ 25 февраля 2014

Переустановка канала: //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,
1 голос
/ 04 мая 2011

Сценарий Тодда превосходен, но он не решит вашу проблему, которая заключается в том, что ваш браузер отключился раньше, чем SMTP. Вот почему вы видите только половину своей страницы и не видите сообщений об ошибках, которые можно использовать для отладки настроек SMTP.

Решение - запустить скрипт PHP напрямую. Нет времени ожидания.

Если вы не можете этого сделать, потому что ваш провайдер не предоставляет вам доступ к оболочке, создайте задание cron, которое будет выполняться каждую минуту. Cron вышлет вам по электронной почте вывод с полными отладочными данными.

0 голосов
/ 16 марта 2012

Я действительно столкнулся с той же проблемой. Производственный сценарий вышел из строя, и мне было труднее его устранить. Главным образом потому, что было так много кода, который предотвращал появление ошибок. В конечном итоге я использовал код Кенни Рэя, изменил его для работы в своей среде и провел тест Оказалось, что Net_Socket как-то исчез. Я удалил и переустановил его, и все снова заработало. Я надеюсь, что это поможет вам.

...