0

私はWHM/Cpanelを使っています

私はパイプ技術を使用して収入メールをphpスクリプトに転送し、すべて問題ありません。ただし、パイプ中にエラーが発生した場合、たとえば次のメッセージが電子メールの送信者に返されます。

This message was created automatically by mail delivery software.
  A message that you sent could not be delivered to one or more of its recipients. This is a permanent error. The following address(es) failed:

  pipe to |/home/someuser/public_htmk/pipe.php
  generated by support@somecompany.net
  local delivery failed

メール support@somecompany.net|/home/someuser/public_htmk/pipe.php 用に Cpanel からパイプを作成していることに注意してください。

以下のphpスクリプトにはエラーはありません:)しかし、ファイルのパスはpublic_htmkではなくpublic_htmlにする必要があるため、エラーを作成するためにファイルのパスを定義しますが、このエラーを作成して、電子メールの送信者に返されたエラーメッセージを表示します。

とにかく、この返されたメッセージを制御するか、無効にする必要があります。たとえば、少なくとも電子メールをパイプするために実行しているphpファイルの物理アドレスを送信するように変更するかどうか?

ところで私は使用しています

WHM/Cpanel Dovecot PHP

これはパイプ スクリプトのサンプルです (このスクリプトにはエラーはありません)。

#!/usr/local/bin/php -q
<?php   

// read from stdin
$emg_stdf = fopen("php://stdin", "r");
$email = "";
while (!feof($emg_stdf))
{
    $emg_orgemailmsg .= fread($emg_stdf, 1024);
}
fclose($emg_stdf);

mail('me@example.org','From my email pipe!','"' . $emg_orgemailmsg . '"');

電子メールをスクリプトにパイプするときにエラーが発生したときに電子メールの送信者に返される返信メッセージをカスタマイズまたは無効にしようとしています。

何か案は?

4

3 に答える 3

2

面倒なコードをパイプ定義に入れることを主張しない場合は、スクリプトの周りにシェル スクリプト ラッパーを使用できますphp

#!/bin/bash
/home/someuser/public_htmk/pipe.php >&/home/someuser/pipe.errors.log || true

パイプ定義で使用します。

于 2011-12-05T19:23:49.357 に答える
0

私は同じ問題を抱えていて、root / etcフォルダーにexim.confという名前のファイルを追加することで解決しました。それは私のために働きました。以下はそのファイルの内容です。それが他の人にも役立つことを願っています!

# This transport is used for handling pipe deliveries generated by alias
# or .forward files. If the pipe generates any standard output, it is returned
# to the sender of the message as a delivery error. Set return_fail_output
# instead of return_output if you want this to happen only when the pipe fails
# to complete normally. You can set different transports for aliases and
# forwards if you want to - see the references to address_pipe in the directors
# section below.

address_pipe:
driver = pipe
return_fail_output

virtual_address_pipe:
driver = pipe
group = nobody
return_fail_output
user = "${lookup{$domain}lsearch* {/etc/virtual/domainowners}{$value}}"
于 2011-12-10T08:19:06.330 に答える
0

これは場合によっては問題を解決する可能性がありますが、display_errorsがオンになっていると、スクリプト内のエラー メッセージによって、php スクリプトから否定応答がトリガーされ、メッセージがバウンスする可能性があります。オフにすると、エラーは出力されず、MTA に返されません。

何らかの理由で解析エラーなどの致命的なエラーが発生した場合、それは役に立たない可能性があります。

返されたメッセージの内容を制御する方法があるかどうかはわかりませんが、それを防ぐか、メッセージを戻そうとする可能性があります。

成功を示すために電子メール プロセッサの最後に配置すると役立つexit(0);場合があります。そのため、スクリプトが最後に到達できた場合、スクリプトは正常に終了し、MTA が返信メッセージを送信できなくなる可能性があります。

これが違いを生むかどうかはわかりませんが、何らかの理由で失敗する可能性がある場合に php://stdin を開くことが成功したかどうかを確認し、それを読み取れない場合はスクリプトを終了することをお勧めします.

出力を制御するために、エラーを検出した場合は、メッセージをエコーするか、exit("status message");

返されるメッセージには、PHP から出力されたエラー メッセージや失敗の理由が含まれていますか?

于 2011-11-29T05:44:13.353 に答える