1

スクリプトからメールを送信するために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サーバーが機能することはわかっています。このスクリプトでは、ユーザーの資格情報は他のアプリの場合と同じです。

私のPostfixサーバーはSASL_auth(CRAM-MD5で構成されている)を使用しています。PHP側またはPostfix側のいずれかにエラーメッセージなどが表示されたらいいのですが、接続してから切断するだけで、他の説明はありません。

4

2 に答える 2

2

私は数日前にこの問題を抱えていました。$mailer_params['auth'] = 'CRAM-MD5'また、追加情報については$mailer_params['debug']、コマンド ラインからスクリプトを実行してみてください。それでもうまくいかない場合は、 を試してください$mail_params['auth'] = 'LOGIN'

お役に立てれば。

于 2009-12-01T12:43:58.027 に答える
0

これが私が最初に試すことです.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. Postfix サーバーは他のアプリケーションと連携するとおっしゃいましたが、それらは同じサーバー上にありますか? これはリモート リクエストですか、それともメールと同じサーバー上のアプリケーションですか

  2. 稼働中のサーバーで何かをリバース エンジニアリングして、何が違うのかを確認できますか?

  3. サーバー上にあるものと同じドメインから電子メールを送信していますか?

質問 1 と 3 の背後にある根拠の一部は、多くのホストがメール送信をブロックまたは制限しているという事実です。これは、スパマーがアカウントを作成し、禁止されるまで悪用するためです。これにより、私たち正直な人にとってはメールを送信するのが難しくなりますが、それは毎日のことです。

これが考えの材料になることを願っています。返信して、問題を見つけることができるかどうか見てみましょう.

于 2009-11-19T07:44:35.637 に答える