PHP: PEAR Mail подключается, но не отправляется (без ошибок)? - PullRequest
1 голос
/ 19 ноября 2009

Я использую почтовый пакет PEAR для отправки электронной почты из моего скрипта. Я почти уверен, что все подключено и объявлено правильно, но когда скрипт запускается, он просто подключается, а затем немедленно отключается от моего почтового сервера без фактической отправки электронной почты.

Из моих журналов Postfix:

Nov 18 16:15:49 mailer postfix/smtpd[30346]: connect from xxx-xxx-xxx-xxx.static.cloud-ips.com[xxx.xxx.xxx.xxx]
Nov 18 16:15:49 mailer postfix/smtpd[30346]: disconnect from xxx-xxx-xxx-xxx.static.cloud-ips.com[xxx.xxx.xxx.xxx]

Что дает?


<?php

  require_once('Mail.php'); // loads in PEAR Mail package

  $mailer_params['host'] = 'mailer.example.com';
  $mailer_params['port'] = 25;
  $mailer_params['auth'] = true;
  $mailer_params['username'] = 'user@mailer.example.com';
  $mailer_params['password'] = 'password';

  $mail =& Mail::factory('smtp', $mailer_params);

  $headers = array(
    'From' => 'user@example.com',
    'Reply-To' => 'user@example.com',
    'Subject' => 'Test Email'
  );

  $message = "whatever";

  $mail->send('Test <other.user@example.com>', $headers, $message);

?>

Я знаю, что мой сервер Postfix работает, так как у меня есть несколько других приложений, использующих его без проблем. В этом сценарии учетные данные пользователя такие же, как и для других приложений.

Мой сервер Postfix использует SASL_auth (настроенный с CRAM-MD5), если это помогает. Хотелось бы, чтобы у меня было сообщение об ошибке или что-то на стороне PHP или на стороне Postfix, но все, что он делает - просто подключается, затем отключается без других объяснений.

Ответы [ 2 ]

2 голосов
/ 01 декабря 2009

У меня была эта проблема несколько дней назад. Попробуйте $mailer_params['auth'] = 'CRAM-MD5', а также для получения дополнительной информации, попробуйте $mailer_params['debug'] и запустите скрипт из командной строки. Если это все еще не работает, попробуйте $mail_params['auth'] = 'LOGIN'.

Надеюсь, это поможет.

0 голосов
/ 19 ноября 2009

Вот первое, что я попробую, посмотрите, сможете ли вы получить ошибку исключения из PHP:

<?php

try {


      require_once('Mail.php'); // loads in PEAR Mail package

      $mailer_params['host'] = 'mailer.example.com';
      $mailer_params['port'] = 25;
      $mailer_params['auth'] = true;
      $mailer_params['username'] = 'user@mailer.example.com';
      $mailer_params['password'] = 'password';

      $mail =& Mail::factory('smtp', $mailer_params);

      $headers = array(
        'From' => 'user@example.com',
        'Reply-To' => 'user@example.com',
        'Subject' => 'Test Email'
      );

      $message = "whatever";

      $mail->send('Test <other.user@xxx.com>', $headers, $message);

    } catch (Exception $e) {
        echo "Exception: " . $e->getMessage();
    }

И у меня есть еще несколько вопросов, из любопытства:

  1. Вы упомянули, что ваш постфиксный сервер работает с другими приложениями, они находятся на одном сервере? Это удаленный запрос или приложение на том же сервере, что и почта

  2. Можете ли вы что-нибудь перепроектировать на рабочем сервере, чтобы увидеть, что происходит по-другому?

  3. Отправляете ли вы электронную почту с того же домена, что и на сервере?

В основе вопросов 1 и 3 лежит тот факт, что многие хосты либо блокируют, либо накладывают ограничения на почтовые сообщения. Это потому, что спамеры будут создавать учетные записи и злоупотреблять ими, пока они не будут забанены. Это делает отправку почты трудной для всех нас, честных людей, но это происходит каждый день.

Надеюсь, это даст пищу для размышлений, ответим и посмотрим, сможем ли мы найти проблему.

...