0

こんにちは、qmail で問題が発生しました。プログラムからメールを送信したいのですが、qmail-inject から 111 エラー コードが返されました。しかし、コマンドラインから同じメールを送信しようとすると、うまくいきます。

私のコードでは:

if ((pid = fork()) < 0) {
        logger.error("error creating on new process");
}

else if (pid == 0) {
      logger.info("qmail-inject is calling now for Dlp Notify");
      if (execl("/opt/program/bin/sendmail","sendmail", notifySender, tempMail,(char*)   0) == -1)  {
        logger.error("notify operation failed: %s", strerror(errno));
        exit(1);
    }
}

sendmail は次のようなスクリプトです。

/bin/cat $2 | /opt/smtp/bin/qmail-inject -f   $1

このスクリプトをコマンドラインで実行すると、うまく機能します。しかし、動作しない私のプログラムから。

どんな助けでも大歓迎です。

4

1 に答える 1

0

実行するCコードqmail-injectは、少なくとも私たちに示したものからは問題ないように見えます。

man qmail-inject 終了コード111が一時的なエラーを示していることを示します

qmail-injectのソース(v1.03、ここではnetqmail 1.06と同じように見えます)は次のことを示しています。

void temp() { _exit(111); }
void die_nomem() {
 substdio_putsflush(subfderr,"qmail-inject: fatal: out of memory\n"); temp(); }
void die_invalid(sa) stralloc *sa; {
 substdio_putsflush(subfderr,"qmail-inject: fatal: invalid header field: ");
 substdio_putflush(subfderr,sa->s,sa->len); perm(); }
void die_qqt() {
 substdio_putsflush(subfderr,"qmail-inject: fatal: unable to run qmail-queue\n"); temp(); }
void die_chdir() {
 substdio_putsflush(subfderr,"qmail-inject: fatal: internal bug\n"); temp(); }
void die_read() {
 if (errno == error_nomem) die_nomem();
 substdio_putsflush(subfderr,"qmail-inject: fatal: read error\n"); temp(); }

後者から(さらにいくつかのルックアップとともに) 、111で終了するqmail-inject.cための次の考えられる原因を引き出すことができます。qmail-inject

  • メモリ不足
  • 無効なヘッダーフィールド(構成/制御ファイルに渡される-fか、構成/制御ファイルから読み取られます)
  • 実行できませんqmail-queue(おそらく存在しないか、検索パスがないため)
  • の制御/設定ファイルフォルダchdirにできないqmail
  • qmailの設定/制御ファイルを読み取ることができない

あなたの側のログをチェックすることも役立つかもしれません。

于 2012-11-16T14:23:01.977 に答える