计算机网路课程设计——电子邮件客户端的设计与实现——接收邮件(POP3协议)

2023-11-07

上一篇已经写了SMTP发送邮件客户端的代码
https://blog.csdn.net/dayexiaofan/article/details/85257320
这一篇我们来写一下POP3接收方的代码

注意这里的密码也是授权码

看代码
如果你能理解上一篇这一篇自然很好理解了

/**
    Email客户端接收(POP3)的实现
*/
#include<windows.h>
#include<stdio.h>
#include<WinSock.h>
#include<iostream>
using namespace std;
#pragma comment(lib,"ws2_32.lib")
int OpenSocket(struct sockaddr *addr);//打开socket套接字
// 发送邮件
int main()
{
    int sockfd ={0};
    char buf[1500]={0};
    char rbuf[1500]={0};//POP协议传送邮件的应答
    char login[128]={0};
    char pass[128]={0};
    WSADATA WSAData;
    struct sockaddr_in their_addr ={0};
    WSAStartup(MAKEWORD(2,2),&WSAData);
    memset(&their_addr,0,sizeof(their_addr));
    their_addr.sin_family =AF_INET;
    their_addr.sin_port =htons(110);
    hostent*hptr =gethostbyname("pop3.163.com"); // 用的是163服务器
    memcpy(&their_addr.sin_addr.S_un.S_addr,hptr->h_addr_list[0],hptr->h_length);
    printf("IP of pop3.163.com is : %d:%d:%d:%d\n",
    their_addr.sin_addr.S_un.S_un_b.s_b1,
    their_addr.sin_addr.S_un.S_un_b.s_b2,
    their_addr.sin_addr.S_un.S_un_b.s_b3,
    their_addr.sin_addr.S_un.S_un_b.s_b4);
    //OK,163邮箱的IP地址已获取到,下面就要开始进行连接了
    sockfd =OpenSocket((struct sockaddr *)&their_addr);
    cout<<"look:"<<sockfd<<endl;
    memset(rbuf,0,1500);
    while(recv(sockfd,rbuf,1500,0)==0)
    {
        cout<<"重新连接..."<<endl;
        Sleep(5);
        sockfd =OpenSocket((struct sockaddr *)&their_addr);
        memset(rbuf,0,1500);
    }
    cout<<rbuf<<endl;//返回220表示recv成功(访问163邮箱成功)

    // USER
    memset(buf,0,1500);
    sprintf(buf,"%s\r\n","user xxxxxxx");//输入你的邮箱账号
    send(sockfd,buf,strlen(buf),0);
    cout<<buf<<endl;
    memset(rbuf,0,1500);
    recv(sockfd,rbuf,1500,0);
    cout<<rbuf<<endl;

    // PASSWORD
    sprintf(buf,"%s\r\n","pass xxxxxxx");//你的邮箱密码
    send(sockfd,buf,strlen(buf),0);
    cout<<buf<<endl;
    memset(rbuf,0,1500);
    recv(sockfd,rbuf,1500,0);
    cout<<rbuf<<endl;
    //cout<<"通过"<<endl;

    //LIST
    memset(buf,0,1500);
    sprintf(buf,"%s\r\n","list");
    send(sockfd,buf,strlen(buf),0);
    cout<<buf<<endl;
    memset(rbuf,0,1500);
    recv(sockfd,rbuf,1500,0);
    cout<<rbuf<<endl;
    //cout<<"通过List"<<endl;

    //RETR
    string input;
    cout<<"请输入查询命令:"<<endl;
    getline(cin,input);
    sprintf(buf,"%s\r\n",input.c_str());
    send(sockfd,buf,strlen(buf),0);
    memset(rbuf,0,1500);
    recv(sockfd,rbuf,1500,0);
    cout<<rbuf<<endl;
    //cout<<"通过retr"<<endl;

    // QUIT
    sprintf(buf,"QUIT\r\n");
    send(sockfd,buf,strlen(buf),0);
    memset(rbuf,0,1500);
    recv(sockfd,rbuf,1500,0);
    cout<<"Quit Receive: "<<rbuf<<endl;

    //清理工作
    closesocket(sockfd);
    WSACleanup();
    return 0;
}
// 打开TCP Socket连接
int OpenSocket(struct sockaddr *addr)
{
    int sockfd =0;
    sockfd=socket(PF_INET,SOCK_STREAM,0);
    if(sockfd <0)
    {
        cout<<"Open sockfd(TCP) error!"<<endl;
        exit(-1);
    }
    if(connect(sockfd,addr,sizeof(struct sockaddr))<0)
    {
        cout<<"Connect sockfd(TCP) error!"<<endl;
        exit(-1);
    }
    return sockfd;
}

有问题评论区留言,看到会帮忙解决

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

计算机网路课程设计——电子邮件客户端的设计与实现——接收邮件(POP3协议) 的相关文章

  • 强智教务管理系统爬虫难关1

    强智教务系统的登录页面有个验证码 为了自动化和简单化 采用了联众答题模块 自动识别和验证 下面是我的点数 说明已经可以自动识别验证码并且可以使用了 当然 这个没有什么难度 今天解决的是账号密码加密问题 这个是我抓到的包 很显然 账号密码进行
  • Pyqt5 圆角窗口

    之前了解了通过样式表和绘画的方式 都感觉不太靠谱 样式表无法生效 绘画又会影响定义的其它窗口样式 后来发现还是setMask靠谱 def setMask self args setMask self QBitmap setMask self
  • 大端模式和小端模式

    一 什么是大端 什么是小端 0x123456在内存中的存储方式 大端模式 低地址 gt 高地址 0x12 0x34 0x56 小端模式 低地址 gt 高地址 0x56 0x34 0x12 不难看出大端模式比较符合人的直观认识 二 为什么会有
  • C++运算符重载总结

    一 C 操作符重载的意义 1 当运算符作用于类类型的运算对象时 可以通过运算符重载重新定义该运算符的含义 2 在模板编程实现的泛型编程中 对不同类型实现相同的语义 各自类通过操作符重载实现对应语义 例如 由模板类自己定义大小关系 FUNCT
  • 提升手机拍摄能力以满足用户社交需求,是个伪命题?

    本周话题 网上看到一个话题 分享给大家 目前各大厂商提升手机拍摄能力是为了满足用户社交需求 这是否是个伪命题 在所谓的社交满足感方面 拍照真的也许还不如微博手机型号的小尾巴 或是吃饭时把手机在桌扣过来露出的浴霸摄像头 18年款和19年款的手
  • [LeetCode] 7.整数反转 c++

    给你一个 32 位的有符号整数 x 返回将 x 中的数字部分反转后的结果 如果反转后整数超过 32 位的有符号整数的范围 2 31 2 31 1 就返回 0 假设环境不允许存储 64 位整数 有符号或无符号 输入 x 123 输出 321

随机推荐