2011-12-27 8 views
0

私はLinuxのC++でメールコマンドを使って電子メールを送信しようとしていますが、execlはエラーを引き起こしています。Linux exec from C++

このコマンドをexecと一緒に送信するにはどうすればよいですか?

/bin/echo llol |/usr/bin/mail -s "testt" [email protected]

ありがとうございます。ここで

コードです:

void AppConfig::sendEmail(string to, string subject, string body) 
{ 
    stringstream ss; 

    ss << "/bin/echo " << body << " | /usr/bin/mail -s \"" << subject << "\" " << to; 
    cout << ss.str(); 
    cout << "rofl"; 
    errno = 0; 
    int ret = execl(ss.str().c_str(), "", (char*) 0); 
    cout << "ret=" << ret << " errno=" <<errno; 
} 

私が手にerrno = 2(ディレクトリが見つかりません)。

+1

コードとエラーを表示できますか? – cnicutar

答えて

4

おそらく、execl()の代わりにsystem()を使用します。私は|推測

system("/bin/echo llol | /usr/bin/mail -s "testt" [email protected]"); 
+0

獣、システムを忘れてしまった...私はできるだけ早く答えを受け入れるだろう。 –

+3

system()を使用したことがある場合は、system()の呼び出しにユーザー入力が漏れる可能性があることに注意する必要があります。これにより、ユーザーは任意のコードを実行できます。 system()の使用は大きなリスクを伴いますが、ときには最も簡単なことです。 – Sean

+0

system()を使用していて、それらの文字列のいずれかがユーザーによって制御されている場合、またはシェルにとって特別な文字が含まれている可能性がある場合は、コードを適切に引用する必要があります。 – mark4o

0

は、このようなcshshまたはbashなどのシェル上で動作します。したがって、これらのコマンドをbashスクリプトで囲むか、C++で入出力リダイレクトを行う必要があります。私は前者をお勧めします。それは簡単です。後者を使用したい場合は、pipeコマンドを見てください。

2

あなたが実行しているプロセスにテキストを流したがっているので、popen()を使う方が良いかもしれません。これにより、エコーの必要がなくなり、/ usr/bin/mailをpopen()することができます。あなたはまた、C++で非常にうまく機能し、Cからpopenの機能を使用することができます

http://pubs.opengroup.org/onlinepubs/009604499/functions/popen.html