C++ 向QQ邮箱发送文件
问题补充:
我就是想在输入某个字符串后,将这个字符串发送到我的QQ邮箱里
最佳答案
测试代码如下:
- #include"Smtp.h"#include<iostream>usingnamespacestd;intmain(){CSmtpsmtp(25,/*smtp端口*/"smtp.163.com",/*smtp服务器地址*/"it_is_just_a_test@163.com",/*你的邮箱地址*/"XXXXXXX",/*邮箱密码*/"it_is_just_a_test@126.com",/*目的邮箱地址*/"好啊!",/*主题*/"XXX同学,你好!收到请回复!"/*邮件正文*/);/**//添加附件时注意,\一定要写成\\,因为转义字符的缘故stringfilePath("D:\\课程设计报告.doc");smtp.AddAttachment(filePath);*//*还可以调用CSmtp::DeleteAttachment函数删除附件,还有一些函数,自己看头文件吧!*///filePath="C:\\Users\\Desktop\\sendEmail.cpp";//smtp.AddAttachment(filePath);interr;if((err=smtp.SendEmail_Ex())!=0){if(err==1)cout<<"错误1:由于网络不畅通,发送失败!"<<endl;if(err==2)cout<<"错误2:用户名错误,请核对!"<<endl;if(err==3)cout<<"错误3:用户密码错误,请核对!"<<endl;if(err==4)cout<<"错误4:请检查附件目录是否正确,以及文件是否存在!"<<endl;}system("pause");return0;}
#ifndef __SMTP_H__ //避免重复包含 #define __SMTP_H__ #include #include #include using namespace std; const int MAXLEN = 1024; const int MAX_FILE_LEN = 6000; static const char base64Char[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; struct FILEINFO /*用来记录文件的一些信息*/ { char fileName[128]; /*文件名称*/ char filePath[256]; /*文件绝对路径*/ }; class CSmtp { public: CSmtp(void); CSmtp( int port, string srvDomain, //smtp服务器域名 string userName, //用户名 string password, //密码 string targetEmail, //目的邮件地址 string emailTitle, //主题 string content //内容 ); public: ~CSmtp(void); public: int port; public: string domain; string user; string pass; string targetAddr; string title; string content; /*为了方便添加文件,删除文件神马的,使用list容器最为方便,相信大家在数据结构里面都学过*/ list listFile; public: char buff[MAXLEN + 1]; int buffLen; SOCKET sockClient; //客户端的套接字 public: bool CreateConn(); /*创建连接*/ bool Send(string &message); bool Recv(); void FormatEmailHead(string &email);//格式化要发送的邮件头部 int Login(); bool SendEmailHead(); //发送邮件头部信息 bool SendTextBody(); //发送文本信息 //bool SendAttachment(); //发送附件 int SendAttachment_Ex(); bool SendEnd(); public: void AddAttachment(string &filePath); //添加附件 void DeleteAttachment(string &filePath); //删除附件 void DeleteAllAttachment(); //删除所有的附件 void SetSrvDomain(string &domain); void SetUserName(string &user); void SetPass(string &pass); void SetTargetEmail(string &targetAddr); void SetEmailTitle(string &title); void SetContent(string &content); void SetPort(int port); int SendEmail_Ex(); /*关于错误码的说明:1.网络错误导致的错误2.用户名错误3.密码错误4.文件不存在0.成功*/ char* base64Encode(char const* origSigned, unsigned origLength); }; #endif // !__SMTP_H__ #include "Smtp.h" #include #include using namespace std; #pragma comment(lib, "ws2_32.lib") /*链接ws2_32.lib动态链接库*/ /*base64采用别人的编码,不过,这不是重点,重点是我完成了我的一个比较好的邮件发送客户端*/ char* CSmtp::base64Encode(char const* origSigned, unsigned origLength) { unsigned char const* orig = (unsigned char const*)origSigned; // in case any input bytes have the MSB set if (orig == NULL) return NULL; unsigned const numOrig24BitValues = origLength / 3; bool havePadding = origLength > numOrig24BitValues * 3; bool havePadding2 = origLength == numOrig24BitValues * 3 + 2; unsigned const numResultBytes = 4 * (numOrig24BitValues + havePadding); char* result = new char[numResultBytes + 3]; // allow for trailing "/0" // Map each full group of 3 input bytes into 4 output base-64 characters: unsigned i; for (i = 0; i sockClient = sockClient; if (false == Recv()) { return false; } return true; } bool CSmtp::Send(string &message) { int err = send(sockClient, message.c_str(), message.length(), 0); if (err == SOCKET_ERROR) { return false; } string message01; cout
最佳答案由网友 信任我信任我 提供
其他回答
其它网友回答:
你查找下 关于国际EM什么的 协议吧,有个端口号,配合一些东西,不是很清楚