2013-04-18 85 views
4

目標是在Unix機器上發送電子郵件,例如php mail功能。在StackOverflow上我已經找到了一個這樣做的功能,但也許有人可以建議一個更優雅的解決方案或解決方案,沒有fprintffwrite?因爲我沒有在我的C++程序使用printf使用unix sendmail發送郵件

#include<stdio.h> 
#include<errno.h> 
int sendmail(const char *to, const char *from, const char *subject, const char *message) 
{ 
    int retval = -1; 
    FILE *mailpipe = popen("usr/lib/sendmail -t", "w"); 
    if (mailpipe != NULL) 
    { 
     fprintf(mailpipe, "To: %s\n", to); 
     fprintf(mailpipe, "From: %s\n" from); 
     fprintf(mailpipe, "Subject: %s\n\n", subject); 
     fwrite(message, 1, strlen(message), mailpipe); 
     fwrite(".\n", 1, 2, mailpipe); 
     pclose(mailpipe); 
     retval = 0; 
    } 
    else 
    { 
     perror("Failed to invoke sendmail」); 
    } 
    return retval; 
} 
+0

AFAIK沒有標準的方法。 –

+0

最簡單或最簡單的方法?似乎php寫在c + +。如何php實現這個功能? – abrahab

+0

PHP是用C語言編寫的。大多數情況下,您可以隨意使用C和C++。 –

回答

1

恕我直言,你只有兩個這樣做的方法。首先是使用sendmail子進程。在較低級別,您將通過管道與AFAIK進行通信,但沒有將C++流與管道關聯的標準方法。所以你將不得不使用好舊的write,fwritefprints來輸出你的數據。

另一種方式是直接打開一個套接字到SMTP服務器並使用SMTP協議(EHLO或HELO,MAIL FROM:,RCPT TO:DATA和BYE),處理服務器的響應...... :-(無論如何,沒有更多的標準方法來從套接字創建C++流!

如果你不想使用fwrite和fprintf的原因是你不想使用C標準庫,直接使用系統調用:準備要用C++字符串或strstream發送的字符串,並直接用寫入將結果發送到管道。如果您不想使用寫入,只需問問自己,C++庫寫入文件...

相關問題