0

Linuxシステムに次のC++コードをデプロイしました

int sendEMail ( string sEMailAddress, string sEMailSubject , string sEMailText )
{

int nRc = nOK;
    // send email here
    const int nBUFFERSIZE = 55000;
    static char szCommand [ nBUFFERSIZE ] = { 0 };
    const char * szEmailText = NULL;


    FILE *fpipe = popen("sendmail -t", "w");

    szEmailText=sEMailText.c_str();

    if ( fpipe != NULL )
    {
        fprintf(fpipe, "To: %s\n", sEMailAddress.c_str());
        fprintf(fpipe, "From: %s\n", "test@mail.de");
        fprintf(fpipe, "Subject: %s\n\n", sEMailSubject.c_str());
        fwrite(sEMailText.c_str(), 1, strlen(sEMailText.c_str()), fpipe);
        pclose(fpipe);
    }
    else
    {
        Logger_log ( 1 , "ERROR: Cannot create pipe to mailx" );
                nRc = -1;

    }
    return nRc;
}

このコードは正常に機能します。sendmail がシステム上にあることを確認する必要があります。問題が発生したためです。PATH 変数が正しく設定されていません。そのため、sendmail がシステム上に見つかりませんでした。私が受け取ったエラーメッセージはありませんでした。メールが送信されるようです。しかし、そうではありませんでした。Sendmail プロセスが見つからない場合、コード (リターンまたはエラー コード) 内でエラー メッセージを受け取ることをどのように認識できますか? 事前にサンクス

4

2 に答える 2

0

1つの方法(コマンドが見つからないエラーを具体的にチェックするため)

2(stderr)Linux システムのデフォルトのファイル記述子です。

このエラーをファイルerrorfileにリダイレクトします。エラーファイルの内容を比較し、内容に文字列が含まれている場合、command not foundコマンドが見つからないことが保証されます。

FILE* fpipe = popen("sendmail 2>errorfile", "w");

FILE* file = fopen("complete path to errorfile", "r");

char buf[124];

fgets(buf, 100, file);

printf("%s", buf);

if(strstr(buf, "command not found")!=NULL)
  printf("Command not found");

他の方法では、

system機能が使える

#include <stdlib.h>

int i;
i = system("sendmail");
printf("The return value is %d", i);

この戻り値を使用して、コマンドが正常に実行されたかどうかを確認できます。戻り値はマシンの OS に依存するため、戻り値が何であるかを確認してください。ただし、成功の場合は通常ゼロです。

于 2013-10-07T08:24:15.923 に答える