2011-12-27 28 views
0

我想通過郵件命令在linux C++中發送電子郵件,但execl導致錯誤。來自C++的Linux執行官

如何使用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; 
} 

我得到(未找到目錄)錯誤號= 2。

+1

你能告訴我們代碼和錯誤嗎? – cnicutar 2011-12-27 23:38:22

回答

4

您可能想使用system()而不是execl()。

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

野獸,忘了系統大聲笑...我會盡快回答你的答案。 – 2011-12-27 23:42:19

+3

如果您之前使用過system(),那麼您可能知道應該警惕用戶輸入泄漏到system()的調用中的可能性。這可以允許用戶執行任意代碼。使用system()會帶來很大的風險,但有時候這只是最簡單的事情。 – Sean 2011-12-27 23:45:54

+0

如果使用system(),並且任何這些字符串都由用戶控制或可能包含shell特有的字符,那麼您將需要添加代碼以確保它們正確引用。 – mark4o 2011-12-28 00:17:48

0

我猜|僅適用於外殼如cshshbash。因此,您需要將這些命令放在bash腳本中,或者在C++中執行輸入/輸出重定向。我會推薦前者。它更容易。如果您想使用後者,請查看pipe命令。

0

您還可以使用popen函數的從C,可以非常好地C++。