curl实现HTTP请求、SMTP发送邮件、IMAP发送邮件测试结果整理: 在使用curl过程中主要使用curl库中的一下集中函数进行操作: (1).curl_easy_init();//创建一个简单的句柄 (2).curl_easy_setopt(CURL * handle,CURLoption选项,参数);//设置curl easy handle的选项 在使用这个函数过程中CURLoption选项参数有多个选项: CURLOPT_USERNAME-用于身份验证的用户名 CURLOPT_PASSWORD-用于身份验证的密码 CURLOPT_VERBOSE-启用/禁用详细模式 CURLOPT_READFUNCTION-读取上传数据的回调 CURLOPT_READDATA-传递给读取回调的自定义指针 CURLOPT_URL-提供要在请求中使用的URL CURLOPT_SSL_VERIFYPEER-验证对等方的SSL证书 CURLOPT_SSL_VERIFYHOST-针对主机验证证书的名称 CURLOPT_MAIL_FROM-SMTP发件人地址 CURLOPT_MAIL_RCPT-SMTP邮件收件人列表 CURLOPT_HEADER-将标头传递到数据流 CURLOPT_FTPSSLAUTH-设置使用FTP时尝试TLS与SSL的顺序 CURLOPT_UPLOAD-启用数据上传 (3).curl_slist_append(struct curl_slist * list, const char * string)//将字符串添加到列表 (4).curl_easy_perform(CURL * easy_handle);//执行阻止文件传输 (5).curl_easy_getinfo(CURL * curl,CURLINFO info,...);//从curl句柄中提取信息 使用此功能从curl会话中请求内部信息。第三个参数必须是一个指向long的指针,一个指向char *的指针, 一个指向curl_slist *结构的指针或一个指向double的指针(如本文档后面所述)。指向的数据将被相应 地填充,并且仅在函数返回CURLE_OK时才可依赖。如果要获取与传输相关的数据,请在执行传输后使用此功能。 (6).curl_slist_free_all(struct curl_slist * list);//释放整个curl_slist列表,删除以前构建的curl_slist链接列表的所有痕迹。 (7).curl_easy_cleanup(CURL * handle);//结束libcurl简易句柄 1、curl实现SMTP发送邮件: 功能实现:1.设置发送邮件名称、地址、用户账号、密码、SMTP服务器、添加收件人、设置主题、添加附件等准备操作; //设置smtp服务器、用户名、密码、端口(端口号其实不用指定,libcurl默认25,但如果是SMTPS则默认是465) //username-用户名 //password-密码 //servername-smtp服务器 //port-端口号 (1). SetSmtpServer(const std::string &username, const std::string& password, const std::string& servername, const std::string &port); //发送者名字 //sendname-发送者名字 (2). SetSendName(const std::string& sendname); //发送者邮箱 //sendmail-发送者邮箱 (3). SetSendMail(const std::string& sendmail); //添加收件人 //recvmail-收件人邮箱地址 (4). AddRecvMail(const std::string& recvmail); //设置邮件主题 //subject-邮件主题名 (5). SetSubject(const std::string& subject); //设置正文内容 //content-正文内容 (6). SetBodyContent(const std::string& content); //添加邮件附件 //filename-附件文件名 (7). AddAttachment(const std::string& filename); 2.发送邮件 (1). SendMail(); //回调函数,将MIME协议的拼接的字符串由libcurl发出 payload_source(void *ptr, size_t size, size_t nmemb, void *stream); //创建邮件MIME内容 CreatMessage(); //获取文件类型 GetFileType(std::string const& stype); //设置文件名 SetFileName(const std::string& FileName); //设置文件的contenttype SetContentType(std::string const& stype); //得到文件名 GetFileName(const std::string& file, std::string& filename); //得到文件类型 GetFileType(const std::string& file, std::string& stype); 方法和原理: 1.使用类中函数进行设置smtp服务器、端口(smtp默认25、SMTPS端口465)、发送邮箱地址、接收邮箱地址、发件人用户名、发件人密码、 收件人地址、邮件主题、邮件正文、邮件附件等基本数据;然后通过sendmail进行连接并发送邮件; 具体实现方式: 1.定义一个对象,调用类内函数: SetSmtpServer //设置smtp服务器、用户名、密码(由于是第三方登陆,所有密码为邮箱授权码)、端口 SetSendName //设置发送人名字 SetSendMail //设置发送人邮箱地址 AddRecvMail //设置接收人邮箱地址 SetSubject //设置邮件主题 SetBodyContent //设置邮件正文内容 AddAttachment //添加邮件附件 2.调用类内函数SendMail();进行发送邮件; 测试过程中出现连接失败,登陆失败,域名解析出错等错误,经过排查是smtp服务器以及密码等错误导致连接失败; 测试打印结果在smtps发送邮件test.txt文件中有显示, 2、curl实现IMAP发送邮件: 一开始通过官网的示例进行测试,由于虚拟客户端的curl库出错进行重装后进行测试,IMAP连接无异常,读取邮箱文件正常,测试发送文件, 返回无错误,但目标邮箱未接受邮件; 可使用smtp封装类进行修改,修改服务器名为imap://imap.exmple.com和端口号为143即可使用;(IMAP端口号为143,IMAPS端口号为:993) 带SSL验证的HTTP、SMTP、IMAP等的操作,在SendMail函数中添加两个函数的调用:curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER,true); curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, true); 两个函数在第三个参数上设置true即可添加SSL验证,使用时修改SMTP服务器名为xxxxs://xxxx.exmple.com即可 在curl高版本中不需要添加CA证书进行验证,curl自动验证;