计算机网络课设-电子邮件客户端程序设计与实现(C/C++语言)

参考博客:https://www.cnblogs.com/cttcarrotsgarden/p/10154139.html

1.Telnet配置

参考 百度经验 telnet配置和telnet用法
选中Telnet服务器 ,Telnet客户端
在这里插入图片描述

2.设置QQ邮箱

1.在设置->账号中启动POP3/SMTP服务和IMAP/SMTP服务
2.获取授权码,用于在第三方客户端登录邮箱(在这里第三方客户端即等会的c程序)
在这里插入图片描述
在这里插入图片描述

3.程序实现

//参考
//https://www.cnblogs.com/cttcarrotsgarden/p/10154139.html

#include <iostream>
#include <string>
#include <WinSock2.h>
#include <stdio.h>
using namespace std;
#pragma comment(lib, "ws2_32.lib") /*链接ws2_32.lib动态链接库*/

int main()
{
    char buff[500]; //收到recv函数返回的结果
    string message;
    string info;
    string subject;


    WSADATA wsaData;
    WORD wVersionRequested = MAKEWORD(2, 1);
    //WSAStarup,即WSA(Windows SocKNDs Asynchronous,Windows套接字异步)的启动命令
    int err = WSAStartup(wVersionRequested, &wsaData);

    SOCKET sockClient; //客户端的套接字
    sockClient = socket(AF_INET, SOCK_STREAM, 0); //建立socket对象

    HOSTENT* pHostent;//hostent是host entry的缩写,该结构记录主机的信息,包括主机名、别名、地址类型、地址长度和地址列表

    pHostent = gethostbyname("smtp.qq.com"); //得到有关于域名的信息,链接到qq邮箱服务器

    SOCKADDR_IN addrServer; //服务端地址
    addrServer.sin_addr.S_un.S_addr = *((DWORD *)pHostent->h_addr_list[0]); //得到smtp服务器的网络字节序的ip地址
    addrServer.sin_family = AF_INET;
    addrServer.sin_port = htons(25); //连接端口25
    //int connect (SOCKET s , const struct sockaddr FAR *name , int namelen ); //函数原型
    err = connect(sockClient, (SOCKADDR*)&addrServer, sizeof(SOCKADDR)); //向服务器发送请求
    buff[recv(sockClient, buff, 500, 0)] = '\0';

    /*
    登录邮件服务器
    */
    message = "ehlo qq.com\r\n";
    send(sockClient, message.c_str(), message.length(), 0); //发送ehlo命令
    buff[recv(sockClient, buff, 500, 0)] = '\0';   //接收返回值


    message = "auth login \r\n";
    send(sockClient, message.c_str(), message.length(), 0);
    buff[recv(sockClient, buff, 500, 0)] = '\0';

    /*
    发送base64加密的用户名、密码
    */
    message = "base64 编码的的qq号码\r\n";
    send(sockClient, message.c_str(), message.length(), 0);
    buff[recv(sockClient, buff, 500, 0)] = '\0';


    message = "base64 编码的授权码\r\n";
    send(sockClient, message.c_str(), message.length(), 0);
    buff[recv(sockClient, buff, 500, 0)] = '\0';
    /*
    使用 MAIL 命令指定发送者
    使用 RCPT 命令指定接收者,可以重复使用RCPT指定多个接收者
    */

    string mail;
    cout << "请输入收件人邮箱:";
    cin >> mail;
    message = "MAIL FROM:<填充自己的qq号码@qq.com> \r\nRCPT TO:<";

    message.append(mail);
    message.append("> \r\n");


    send(sockClient, message.c_str(), message.length(), 0);

    buff[recv(sockClient, buff, 500, 0)] = '\0';

    buff[recv(sockClient, buff, 500, 0)] = '\0';
    /*
    使用 DATA 命令告诉服务器要发送邮件内容
    */
    message = "DATA\r\n";
    send(sockClient, message.c_str(), message.length(), 0);
    buff[recv(sockClient, buff, 500, 0)] = '\0';


    message = "From: 填充自己的qq号码@qq.com\r\n\To: XXX@163.com"+mail+"\r\n\subject:";

    cout<<"主题:";
    cin>>subject;
    message.append(subject);
    message.append("\r\n\r\n");
    cout<<"内容:";
    cin>>info;
    message.append(info);
    message.append("\r\n.\r\n");

    send(sockClient, message.c_str(), message.length(), 0);
    message = "QUIT\r\n";
    send(sockClient, message.c_str(), message.length(), 0);
    buff[recv(sockClient, buff, 500, 0)] = '\0';

    cout << "发送成功!"<<endl;
    system("pause");
}

只需修改其中的以下代码即可
message = “base64 编码的的qq号码\r\n”;
message = “base64 编码的授权码\r\n”;
以及后面两处需要填充自己的qq号码

4.输出效果

在这里插入图片描述在这里插入图片描述

关于问题的统一回复:

不少同学遇到一些问题…统一回复下,遇到问题请先找找自己的步骤和文中步骤的不同,先用自己的小脑袋瓜和搜索引擎找找解决方案。

遇到问题请检查以下事项:

  • telnet服务端和客户端是否都开启了
  • 邮箱需要开启的服务是否已经开启了
  • 代码中需要base64加密的地方是否加密了

关于telnet服务端,win7设置项有服务端和客户端,win10只能设置项客户端,那咋办?百度和谷歌都是好东西
win10安装telnet服务(附服务端下载链接)

Windows10 telnet 服务端 缺失

我当时是学校机房电脑win7做的课设。
还不行,那我也没辙了。

  • 12
    点赞
  • 130
    收藏
    觉得还不错? 一键收藏
  • 32
    评论
程序设计教程通常会涵盖编程的基本概念、语法、算法和数据结构等内容。在C/C++语言编程方面,它们是广泛使用的编程语言,可用于开发不同类型的应用程序,从简单的命令行程序到复杂的桌面应用和嵌入式系统。 在程序设计教程中,首先会介绍C/C++语言的基本语法,包括变量、数据类型、运算符、控制结构和函数等。学习者会通过编写简单的程序来理解如何声明变量、使用运算符进行计算、使用条件语句和循环结构来控制程序流程,以及如何定义和调用函数。 接下来,教程会介绍C/C++语言的核心概念,如指针、数组和字符串等。学习者会了解如何使用指针来操作内存地址,如何使用数组来存储和处理多个数据,以及如何处理字符串和字符操作。 在更高级的教程中,会介绍C/C++语言的面向对象编程(OOP)概念,如类、对象、继承和多态等。学习者将学习如何使用类和对象来组织和管理程序,如何使用继承和多态来实现代码的重用和灵活性。 此外,教程还可能包含常用算法和数据结构的介绍,如排序算法、查找算法和链表等。学习者可以学习如何实现这些算法和数据结构,并将其应用于解决实际问题。 总之,在C/C++语言程序设计教程中,学习者将通过理论和实践相结合的方式,逐步掌握编程的基础知识和技能,从而能够独立开发和维护各种类型的程序。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 32
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值