• C++发送邮件代码


    C++发送邮件和附件

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

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

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

    用C++发邮件

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

    {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。

    cURL支持的通讯协定有FTPFTPSHTTPHTTPSTFTPSFTPGopherSCPTelnetDICTFILELDAP、LDAPS、IMAPPOP3SMTPRTSP

    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/html
    Subject: 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>

  • 相关阅读:
    LeetCode解题报告—— Permutations & Permutations II & Rotate Image
    LeetCode解题报告—— Combination Sum & Combination Sum II & Multiply Strings
    LeetCode解题报告—— Search in Rotated Sorted Array & Search for a Range & Valid Sudoku
    顺利通过EMC试验(2)
    CSS复合选择器
    Emmet快速生成HTML和CSS
    Spring 三种创建Bean的方式
    Spring BeanFactory和ApplicationContext的区别
    Spring ApplicationContext的三个实现类详解
    CSS的引入方式
  • 原文地址:https://www.cnblogs.com/edgarli/p/3553153.html
Copyright © 2020-2023  润新知