前些天发现了十分不错的人工智能学习网站,通俗易懂,风趣幽默,没有广告,分享给大家,大家可以自行看看。(点击跳转人工智能学习资料)


微信公众号:创享日记
发送关键词:邮件系统
获取邮件发送端和接收端C语言实现源代码源文件



1.邮件发送客户端详细设计
首先将必要信息填写完整,然后调用socket ()函数创建一个socket并获得其文件描述符,然后定义并填写一个sockaddr_ in结构体作为后面connect ()函数的参数,接着调用connect函数来建立一个TCP连接;然后发送EHLO命令并打印出服务器的回复,然后是发送AUTH命令(AUTH login) 并打印服务器回复,接着发送用户名以及在邮箱中的得到的授权码并且分别打印服务器回复;接着发送邮件发送者的邮箱地址以及邮件接收者的邮箱地址并分别打印服务器回复;发送DATA命令(用于输入邮件内容,该命令后面发送的所有数据都将被当做邮件内容,直至遇到结束标志字符串)并打印服务器回复;接着开始发送邮件内容,依次发送邮件发送者信息、邮件接收者信息、正文、附件等信息,其中正文以及附件采用文件读写的方式,从文件中读出相应的信息再发送给服务器;最后发送QUIT命令并打印服务器回复。

send部分代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <sys/socket.h>
#include <netdb.h>
#include <unistd.h>
#include <getopt.h>
#include "base64_utils.h"#define MAX_SIZE 4095char buf[MAX_SIZE+1];// receiver: mail address of the recipient
// subject: mail subject
// msg: content of mail body or path to the file containing mail body
// att_path: path to the attachment
void send_mail(const char* receiver, const char* subject, const char* msg, const char* att_path)
{const char* end_msg = "\r\n.\r\n";const char* host_name = "smtp.qq.com"; // TODO: Specify the mail server domain nameconst unsigned short port = 25; // SMTP server portconst char* user = encode_str("1197879738@qq.com"); // TODO: Specify the userconst char* pass = encode_str("rvamphcwfujphffj"); // TODO: Specify the passwordconst char* from = "1197879738@qq.com"; // TODO: Specify the mail address of the senderchar dest_ip[16]; // Mail server IP addressint s_fd; // socket file descriptorstruct hostent *host;struct in_addr **addr_list;int i = 0;int r_size;// Get IP from domain nameif ((host = gethostbyname(host_name)) == NULL){herror("gethostbyname");exit(EXIT_FAILURE);}addr_list = (struct in_addr **) host->h_addr_list;while (addr_list[i] != NULL)++i;strcpy(dest_ip, inet_ntoa(*addr_list[i-1]));

2.邮件接收客户端详细设计
首先将必要信息填写完整,然后调用socket ()函数创建一个socket 并获得其文件描述符,然后定义并填写一个sockaddr_ _in 结构体作为后面connect () 函数的参数,接着调用connect 函数来建立一个TCP连接;然后发送用户名和授权码并分别打印服务器回复;接着依次发送STAT、LIST、 RETR 1、QUIT命令并分别打印服务器回复。

recv部分代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <sys/socket.h>
#include <netdb.h>
#include <unistd.h>#define MAX_SIZE 65535char buf[MAX_SIZE+1];void recv_mail()
{const char* host_name = "pop.qq.com"; // TODO: Specify the mail server domain nameconst unsigned short port = 110; // POP3 server portconst char* user = "1197879738@qq.com"; // TODO: Specify the userconst char* pass = "rvamphcwfujphffj"; // TODO: Specify the passwordchar dest_ip[16];int s_fd; // socket file descriptorstruct hostent *host;struct in_addr **addr_list;int i = 0;int r_size;// Get IP from domain nameif ((host = gethostbyname(host_name)) == NULL){herror("gethostbyname");exit(EXIT_FAILURE);}addr_list = (struct in_addr **) host->h_addr_list;while (addr_list[i] != NULL)++i;strcpy(dest_ip, inet_ntoa(*addr_list[i-1]));// TODO: Create a socket,return the file descriptor to s_fd, and establish a TCP connection to the POP3 servers_fd = socket(AF_INET, SOCK_STREAM, 0);struct sockaddr_in addr;struct sockaddr_in *addr_in=&addr;addr.sin_family = AF_INET;addr.sin_port = (port << 8) | (port >> 8);addr_in->sin_addr.s_addr = inet_addr(dest_ip);connect(s_fd, addr_in, sizeof(addr));// printf welcome messageif ((r_size = recv(s_fd, buf, MAX_SIZE, 0)) == -1){perror("recv");exit(EXIT_FAILURE);}buf[r_size] = '\0'; // Do not forget the null terminatorprintf("%s", buf);

邮件系统(基于SMTP协议和POP3协议-C语言实现)相关推荐

  1. 基于SMTP协议和POP3协议实现的邮件收发客户端

    一.概要设计 1.1 抽象数据类型定义 主要定义了三个抽象数据类型: Base64 功能:用于发送邮件时进行编码,以及接收邮件时进行解码 数据部分:无 操作部分:编码(encode).解码(decod ...

  2. php-ews发送邮件,node.js 基于 STMP 协议和 EWS 协议发送邮件

    本文主要介绍 node.js 发送基于 STMP 协议和 MS Exchange Web Service(EWS) 协议的邮件的方法.文中所有参考代码均以 TypeScript 编码示例. 1 基于 ...

  3. 91SMTP协议和POP3协议

    1. SMTP协议 简单邮件传输协议(Simple Mail Transfer Protocol,SMTP)是一种提供可靠且有效的电子邮件传输的协议,控制两个相互通信的SMTP进程交换信息.由于SMT ...

  4. tcp/ip协议详解——HTTP协议和POP3协议SSL加密协议

    http协议有两大特点: 1.哑服务:在链接进行之后,服务器不提示任何信息,所有命令需要客户端发出,服务器做出反应. 2.瞬时协议:客户端对服务器发出命令之后,服务器立刻做出反应,传输超文本,tcp链 ...

  5. TCP协议和UDP协议的区别及其应用

    下面是TCP和UDP的简单程序: 简单的TCP网络程序 https://blog.csdn.net/qq_37941471/article/details/80738319 简单的UDP网络程序 ht ...

  6. http协议与https协议+UDP协议和TCP协议+WebSocket协议下服务端主动去发送信息+对称加密与非对称加密+get和post请求方式区别详解+浏览器内核以及jsj解析引擎

    TCP和UDP协议是TCP/IP协议的核心. 在TCP/IP网络体系结构中,TCP(传输控制协议,Transport Control Protocol).UDP(用户数据报协议,User Data P ...

  7. 计算机网络整理:UDP协议和TCP协议

    系列文章目录 HTTP协议和HTTPS协议 文章目录 系列文章目录 一.TCP/IP 各层协议 二.UDP协议和TCP协议 1.TCP和UDP的区别 2.UDP 协议 3.TCP 协议 1)特点 2) ...

  8. 1.前端计网篇之HTTP协议和HTTPS协议

    目录 1.HTTP协议 1)GET和POST请求的区别 2)POST和PUT请求的区别 3)常见的HTTP请求头和响应头 (1)HTTP Request Header常见的请求头: (2)HTTP R ...

  9. Bytom BIP-32协议和BIP-44协议解读

    我们知道HD(分层确定性)钱包,基于 BIP-32:多币种和多帐户钱包,基于 BIP-44:最近比原社区的钱包开发者对比原的BIP-32和BIP-44协议有疑问,所以我今天就专门整理了一下该协议的内容 ...

最新文章

  1. java动态菜单显示实现,java – 为Spring MVC / AOP应用程序实现动态菜单
  2. java怎么获取ajax_Java学习路线
  3. Lintcode165 Merge Two Sorted Lists solution 题解
  4. JMS中的消息通信模型
  5. 为什么构造函数不能是虚函数
  6. MySQL安装和完全卸载-Linux ubantu18.04
  7. OMA 设备管理的通知发起的会话OMA Device Management Notification Initiated Session
  8. 修复IE下相对容器中绝对定位Bug
  9. mac python安装第三方库jupyter_Mac搭建jupyter环境
  10. 【金融申请评分卡】数据准备 - 缺失值数据清洗
  11. Spring笔记2——Spring中Bean的装配
  12. 性能VS功能,同为测试又有哪些不一样?
  13. 宇宙物质总量是否可以算出
  14. 单片机微型计算机 原理及接口技术,微机原理及单片机接口技术
  15. 04最大类间方差法(OTSU大津法)
  16. xbee模块和单片机_XBee® ZigBee 模块使用方法
  17. 学生计算机教室怎么连接网络,计算机(网络)教室学生使用守则
  18. 04- kubeadm init流程
  19. 原生实现freeCodeCamp上的Build a Personal Portfolio Webpage
  20. CSDN博客个人主页左侧栏添加微信二维码

热门文章

  1. packet = prelude + sql[: packet_size - 1] TypeError: can‘t concat tuple to bytes
  2. 【软件架构】运用RUP 4+1视图软件架构设计(逻辑视图、实现视图、进程视图、物理视图和用例视图)
  3. YOLOV5目标检测记录
  4. linux面试宝典 pdf,运维工程师面试题(面试版).pdf
  5. JAVA使用Tabula解析PDF表格
  6. jsp include中文乱码
  7. uniapp 小程序实现全局所有页面分享 ‘发送给朋友‘和‘分享到朋友圈‘
  8. java list 判断最后一个元素_java – ArrayList查找第一个和最后一个元素
  9. 安装vs2010后打开提示需要升级安装Service Pack 1
  10. python 【raise函数】