闲聊c/c++: vs2015编译libquickmail C语言库(下)【编译libquickmail并配置qq邮箱发送邮件】

闲聊c/c++: vs2015编译libquickmail C语言库(下)【编译libquickmail并配置qq邮箱发送邮件】_第1张图片
腾讯邮件测试.jpg

续:
本篇目的:

  1. 引入curlSDK给libquickmail进行编译(下篇)

  2. 配置腾讯qq邮箱,获取access token,用于smpts发送邮件

  3. 编写测试代码测试libquickmail

  4. 简单了解一下源码,知道libquickmail中是如何调用curl进行邮件发送的

引入curlSDK给libquickmail进行编译:

  • 由于时间关系,我已经创建好vs工程目录和编译环境。如果要了解vs如何进行编译和链接,请参考我以前的文章Visual Studio c++必要的背景知识--链接与编译,非常详细的描述了如何编译和链接。

  • 项目结构如下:

闲聊c/c++: vs2015编译libquickmail C语言库(下)【编译libquickmail并配置qq邮箱发送邮件】_第2张图片
项目结构.png

其中quickmail.h/c文件是来源于libquickmail库,由于我们使用了自己编译的curlSDK包,因此只需要这两个文件就能编译

SendEmail.h/cpp实现了
一个结构:EMail

struct EMail
{
    const char* from;
    const char* to;
    const char* cc;
    const char* bcc;
    const char* subject;
    const char* body;
    const char* attachmentFile;

    EMail() : from(0),to(0),cc(0),bcc(0),subject(0),body(0),attachmentFile(0)
    {}
};

为了简单测试使用,去掉了群发等功能

一个函数: bool SendFromQQMail(const EMail& mail);
代码后面看一下。

  • 修改curl头文件路径:


    闲聊c/c++: vs2015编译libquickmail C语言库(下)【编译libquickmail并配置qq邮箱发送邮件】_第3张图片
    修改curl头文件目录.png

    因为我们自己编译了curl库并制成了SDK包,所以需要修改头文件路径(原本假设是将sdk包放在系统目录下,并且名字为curl,我们将sdk包放在了当前工程目录下,并使用了curlSDK字样,和原来的文件有出入,因此要修改)

  • 设置vs预编译宏支持条件编译

闲聊c/c++: vs2015编译libquickmail C语言库(下)【编译libquickmail并配置qq邮箱发送邮件】_第4张图片
设置预编译宏.png
  • 设置问winsocket、curl链接库等,用于动态链接curl库(使用了winsocket,因此也要链接如winsocket库)
闲聊c/c++: vs2015编译libquickmail C语言库(下)【编译libquickmail并配置qq邮箱发送邮件】_第5张图片
链接两库.png
  • vs编译三步曲: 头文件路径设置,预编译宏设置,链接库设置。这三者ok后,就直接进行编译(F5编译运行,但是由于我们还没有设置好腾讯邮箱,因此无法运行,就ctrl+F7,仅编译而不运行,几秒钟,就完成编译)

配置腾讯邮箱,获取授权码:

闲聊c/c++: vs2015编译libquickmail C语言库(下)【编译libquickmail并配置qq邮箱发送邮件】_第6张图片
腾讯邮箱配置.png
  • 开启pop3和smtp支持
  • 用手机扫描二维码,生成授权码(非常机密的一串字符)
  • 如果你用nodejs/python来发送邮件,只要是需要smtps协议,都要该授权码(当然其他邮箱也类似,例如阿里云,网易邮箱等)

编写代码进行测试:

bool SendFromQQMail(const EMail& email)
{
    //最起码要有发送者和接收者
    if (email.from == NULL)
        return false;

    if (email.to == NULL)
        return false;

    int ret = -1;
    quickmail mailobj = NULL;

    ret = quickmail_initialize();
    if (ret)
        return false;

    mailobj = quickmail_create(NULL, NULL);
    if (!mailobj)
        return false;

    quickmail_set_from(mailobj, email.from);
    quickmail_add_to(mailobj, email.to);

    if (email.subject)
        quickmail_set_subject(mailobj, email.subject);

    if (email.cc)
        quickmail_add_cc(mailobj, email.cc);

    if (email.bcc)
        quickmail_add_bcc(mailobj, email.bcc);

    if (email.body)
        quickmail_set_body(mailobj, email.body);

    if (email.attachmentFile)
        quickmail_add_attachment_file(mailobj, email.attachmentFile,NULL);

    const char* errMsg = quickmail_send_secure(mailobj, "smtp.qq.com", 465, "[email protected]", "你的授权码填在这里");
    if (errMsg)
    {
        printf("%s\n", errMsg);
        quickmail_destroy(mailobj);
        quickmail_cleanup();
        return false;
    }
    else
    {
        quickmail_destroy(mailobj);
        quickmail_cleanup();
        return true;
    }
    
}

直接F5,立马从你的邮箱发送一份邮件,还是到你自己的邮箱(你可以修改成其他人的邮箱)

关于如何调用curl,请自行查看curl相关代码

其实内容有点多,如想更清楚了解实现,请看如下视频:
编译libquickmail并配置腾讯邮箱发送邮件

你可能感兴趣的:(闲聊c/c++: vs2015编译libquickmail C语言库(下)【编译libquickmail并配置qq邮箱发送邮件】)