C++發送郵件代碼

C++發送郵件和附件

http://wenku.baidu.com/view/69f20f747fd5360cba1adb5c.htmlphp

 http://blog.csdn.net/ybjx111/article/details/7031055html

http://download.csdn.net/download/okpfsje123/5304296      (Qt)ios

 

用C++發郵件

http://hi.baidu.com/sparkho/item/51f927cf7379300cc710b290    (libcurl)【整個 http://hi.baidu.com/sparkho/archive/tag/libcurl 都值得看一下】c++

{http://blog.csdn.net/jaylong35/article/details/7210291     (libcurl,其中sendMail這個函數的核心代碼與上面的是差很少的)編程

http://www.cnblogs.com/FengYan/archive/2013/01/01/2840982.html}服務器

 

 

cURL是一個利用URL語法在命令行下工做的文件傳輸工具,1997年首次發行。它支持文件上傳和下載,因此是綜合傳輸工具,但按傳統,習慣稱cURL爲下載工具。cURL還包含了用於程序開發的libcurl。app

cURL支持的通信協定有FTPFTPSHTTPHTTPSTFTPSFTPGopherSCPTelnetDICTFILELDAP、LDAPS、IMAPPOP3SMTPRTSPcurl

http://baike.baidu.com/view/1326315.htm) 函數

 

首先,從QQ郵箱的幫助中心,咱們能夠了解一些基本信息:
1)QQ郵箱 POP3 和 SMTP 服務器地址設置以下: 
pop.qq.com
smtp.qq.com(SMTP服務器須要身份驗證)
若是是設置POP3和SMTP的SSL加密方式,則端口以下:
POP3服務器(端口995)
SMTP服務器(端口465或587)。工具

2)一封郵件可以發送給多少收件人?
能夠將一封郵件最多發送給20個收件人。他們的電子郵件地址能夠分佈在「發給」、「抄送」和「密送」地址中。
呵呵,這點很重要:若是你的收件人超過20個,必遭QQ郵件服務器的拒絕--信件將發不出去,估計你還會傻乎乎的調試半天,覺得是編程的問題...另外,屢次測試後你纔會知道:QQ郵箱服務器還有另外一個不公開的限制,郵址列表(收件方)裏面的QQ郵箱不能超過8個,不然信件也發不出去。此舉,估計是想阻止某些惡意用戶羣發垃圾郵件吧,因而乎,要發郵件給8個以上的QQ用戶,你就必須發2次或以上;呵呵,對於C++編程者來講,亦非難事,也就是多幾行代碼而已。

 

下文給出c++利用libcurl發郵件的一個簡單範例,源於俺本身程序的簡化...

1)咱們能夠把發件人的賬號和密碼,放到一個txt文件裏,而後經過下面的函數讀出來:
int getsender(char * strUser,char * strSrv,char * strPass)
{
 char sbuf[100],*token;
 ifstream _sfile("D:\\SparkHo\\sender.txt"); //從sender.txt裏讀取發件人資料
 if(!_sfile)
 {
  _sfile.close();
  return -1;
 }
 _sfile.seekg(0, ios::beg);
 _sfile.getline(sbuf,100); //讀取第一行,如sparkho@qq.com
 token = strtok(sbuf,"@");
 strcpy(strUser, token);
 token = strtok(NULL,"@");
 strcpy(strSrv, token);
 _sfile.getline(sbuf,100); //讀取第二行,密碼:如1234567890
 strcpy(strPass, sbuf);
 _sfile.close();
 return 1;
}

 

2)回調函數,讀取發件內容,供libcurl調用:
size_t read_data(void *ptr, size_t size, size_t nmemb, void *data)
{
 FILE *fp = (FILE *)data;
 size_t return_size = fread(ptr, size, nmemb, fp);
 return return_size;

 

3)libcurl發郵件的主函數:
int curlMail()
{
 char strUser[100],strPass[100],strSrv[100];
 char ebuf[100],RevList[100];

 getsender(strUser, strSrv, strPass);                                      //從sender.txt裏讀取發件人資料
 string strfrom = (string)strUser+"@"+(string)strSrv;           //發送人郵址
 string SrvAdd = "smtp://smtp."+(string)strSrv;                   //郵件服務器地址
 FILE *fp = fopen("D:\\SparkHo\\etmp.txt", "rb");               //讀取發件內容
 if (fp == NULL) return -1;

 // 初始化libcurl
 CURL *curl;
 CURLcode return_code,res;
 return_code = curl_global_init(CURL_GLOBAL_WIN32);  //CURL_GLOBAL_WIN32只用於Windows平臺下,告訴libcurl初始化winsock庫。詳見Here
 if (CURLE_OK != return_code) return -1;

 struct curl_slist *slist=NULL;
 ifstream _efile("D:\\SparkHo\\email.txt");                            //讀取收件人email地址的列表
 if(!_efile)
 {
  _efile.close();
 }
 else
 {
  while(_efile.getline(ebuf,100))
  {
   sprintf(RevList,"<%s>",ebuf);
   slist = curl_slist_append(slist, RevList);  //郵件接收列表
  }
  _efile.close();
 }
 curl = curl_easy_init();
 if(curl)
 {
        curl_easy_setopt(curl, CURLOPT_VERBOSE, 1L);
        curl_easy_setopt(curl, CURLOPT_HEADER, 1L);
        curl_easy_setopt(curl, CURLOPT_FTPSSLAUTH, CURLFTPAUTH_SSL);                //無此句QQ郵箱沒問題,但其餘郵箱可能被系統認爲垃圾郵件而退信
        curl_easy_setopt(curl, CURLOPT_URL, SrvAdd.c_str());                                       //郵件服務器地址
        curl_easy_setopt(curl, CURLOPT_MAIL_FROM, strfrom.c_str());                          //發送人郵址
        curl_easy_setopt(curl, CURLOPT_MAIL_RCPT, slist);                                           //收件人列表
        curl_easy_setopt(curl, CURLOPT_USERNAME, strUser);                                       //用戶賬號
        curl_easy_setopt(curl, CURLOPT_PASSWORD, strPass);                                      //用戶密碼
        curl_easy_setopt(curl, CURLOPT_READDATA, fp);
        curl_easy_setopt(curl, CURLOPT_READFUNCTION, read_data);                           //回調函數,用於讀發送內容
 }
 res = curl_easy_perform(curl);
 fclose(fp);
 curl_slist_free_all(slist);
 curl_easy_cleanup(curl);
 curl_global_cleanup();
 return 1;
}

 

4)附件:

 

發件人信息,二行,存放於sender.txt:
sparkho@qq.com
1234567890

 

收件郵址列表,多行,存放於email.txt:
sparkho@msn.com
sparkho@qq.com
sparkho@139.com

 

信件正文,存放於etmp.txt:From: <sparkho@qq.com>To: <羣友>Content-Type: text/htmlSubject: 600141 週五的預警 覆盤測試1<DIV>巔峯飛越--預警通知,由sparkho.dll自動發送...</DIV><DIV>08/27/11 08:14:03</DIV><DIV><IMG src="http://image.sinajs.cn/newchart/min/n/sh600141.gif"></DIV><DIV><IMG src="http://image.sinajs.cn/newchart/daily/n/sh600141.gif"></DIV>

相關文章
相關標籤/搜索