2010-03-02 196 views
4

我只是想知道如何使用C發送電子郵件?我將它搜索了一下,但找不到任何適當的東西。如何以C發送電子郵件?

+1

[從C發送電子郵件在linux/C++程序]的可能的複製(http://stackoverflow.com/questions/9317305/sending-an-email-from- acc-program-in-linux) – rogerdpack

回答

1

運行sendmail並將電子郵件傳遞到其標準輸入(在類Unix系統上),或使用某個SMTP客戶端庫連接到SMTP郵件服務器。

4

最明顯的選擇:

  1. 使用system()調用現有的命令行工具來發送郵件。不是很便攜(需要具有給定調用語法的外部工具等),但非常容易實現。
  2. 使用一些庫。
  3. 自己實施SMTP,並直接與郵件服務器通話。很多工作。
+0

事實上,我想學習如何在第三個選項中提到自己實現SMTP。你知道任何相關的教程,文章或源代碼嗎? – mehmet6parmak

+3

將來,請不要推薦system(),而應該推薦exec()系列函數。 –

+1

@rogue:謝謝。但system()更具可移植性,exec *()僅適用於Unix。 – unwind

4

在Unix類系統中,你可以使用systemsendmail如下:

#include <stdio.h> 
#include <string.h> 

int main() { 

     char cmd[100]; // to hold the command. 
     char to[] = "[email protected]"; // email id of the recepient. 
     char body[] = "SO rocks"; // email body. 
     char tempFile[100];  // name of tempfile. 

     strcpy(tempFile,tempnam("/tmp","sendmail")); // generate temp file name. 

     FILE *fp = fopen(tempFile,"w"); // open it for writing. 
     fprintf(fp,"%s\n",body);  // write body to it. 
     fclose(fp);    // close it. 

     sprintf(cmd,"sendmail %s < %s",to,tempFile); // prepare command. 
     system(cmd);  // execute it. 

     return 0; 
} 

我知道它的醜陋,有幾個更好的方法來做到這一點...但它的工作原理:)

2

您也可以使用郵件命令。

內使用mail命令和系統功能,您可以將郵件發送給用戶的C程序。

system("mail -s subject address < filename") 

    Example 
system ("mail -s test [email protected] < filename") 

注:該文件應該是存在的。如果你想輸入內容,yiu可以輸入文件內的內容,然後將該文件發送給接收者。

2

使用libcurl。它支持SMTP和TLS,以防您需要驗證發送。 他們提供一些example C code

1

更便攜的方式是使用libquickmailhttp://sf.net/p/libquickmail),在GPL下許可。 它甚至允許發送附件。

示例代碼:

quickmail_initialize(); 
    quickmail mailobj = quickmail_create(FROM, "libquickmail test e-mail"); 
    quickmail_set_body(mailobj, "This is a test e-mail.\nThis mail was sent using libquickmail."); 
    quickmail_add_attachment_file(mailobj, "attachment.zip", NULL); 
    const char* errmsg; 
    if ((errmsg = quickmail_send(mailobj, SMTPSERVER, SMTPPORT, SMTPUSER, SMTPPASS)) != NULL) 
    fprintf(stderr, "Error sending e-mail: %s\n", errmsg); 
    quickmail_destroy(mailobj);