闲聊c/c++: vs2015编译libquickmail C语
2017-08-30 本文已影响175人
随风而行之青衫磊落险峰行
![](https://img.haomeiwen.com/i2635028/932f666f3d0c0b6c.jpg)
续:
本篇目的:
-
引入curlSDK给libquickmail进行编译(下篇)
-
配置腾讯qq邮箱,获取access token,用于smpts发送邮件
-
编写测试代码测试libquickmail
-
简单了解一下源码,知道libquickmail中是如何调用curl进行邮件发送的
引入curlSDK给libquickmail进行编译:
-
由于时间关系,我已经创建好vs工程目录和编译环境。如果要了解vs如何进行编译和链接,请参考我以前的文章Visual Studio c++必要的背景知识--链接与编译,非常详细的描述了如何编译和链接。
-
项目结构如下:
![](https://img.haomeiwen.com/i2635028/ff0c768ef5b8fbc4.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头文件路径:
修改curl头文件目录.png
因为我们自己编译了curl库并制成了SDK包,所以需要修改头文件路径(原本假设是将sdk包放在系统目录下,并且名字为curl,我们将sdk包放在了当前工程目录下,并使用了curlSDK字样,和原来的文件有出入,因此要修改)
-
设置vs预编译宏支持条件编译
![](https://img.haomeiwen.com/i2635028/b9a174271942c441.png)
- 设置问winsocket、curl链接库等,用于动态链接curl库(使用了winsocket,因此也要链接如winsocket库)
![](https://img.haomeiwen.com/i2635028/7e4d7e14977533cf.png)
- vs编译三步曲: 头文件路径设置,预编译宏设置,链接库设置。这三者ok后,就直接进行编译(F5编译运行,但是由于我们还没有设置好腾讯邮箱,因此无法运行,就ctrl+F7,仅编译而不运行,几秒钟,就完成编译)
配置腾讯邮箱,获取授权码:
![](https://img.haomeiwen.com/i2635028/60d0548834d311ea.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, "47178234@qq.com", "你的授权码填在这里");
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并配置腾讯邮箱发送邮件