5分钟!教你用C语言发送邮件:附送源码+教学!-1.jpg (10.71 KB, 下载次数: 0)

2018-9-3 02:21 上传

关注《一碳科技》,获取更多知识!

前言

相信年夜家都有过被C语言网络编程所支配的恐惧吧?其实,小编在方才学习这方面的知识的时候也有这样的感触感染,并且所有的资料都是从网络寻找的,可是,现在你们不合了,因为这篇文章将会带你们一步步地,写出你们第一个使用SMTP协议来发送邮件的C语言程序,这个和小编刚学习的时候可不合呀!

文章末尾有总结,这是精髓哦

5分钟!教你用C语言发送邮件:附送源码+教学!-2.jpg (30.79 KB, 下载次数: 0)

2018-9-3 02:21 上传

言归正传,代码写起来!

首先,这篇文章不是讲理论的文章,而是让你们脱手实践的文章,目的在于让各位看官能脱手写出能编译成功、能成功运行、能成功发送邮件的C语言程序,这篇文章不会涉及太多的理论知识,并且代码也没有经过特另外封装,旨在让各位看官能编写出这个程序,所以看官跟着文章脱手做就可以了。

第一步

首先,引用stdio.h、winsock2.h、windows.h(可有可无,下文讲到),注意,这里有一个处所有很多人会出错,如果你要引用windows.h的话,就得在引用winsock2.h之后才能引用windows.h,不然会呈现“未界说标识符”的情况,如下图↓

5分钟!教你用C语言发送邮件:附送源码+教学!-3.jpg (29.04 KB, 下载次数: 0)

2018-9-3 02:21 上传

这是正确写法

5分钟!教你用C语言发送邮件:附送源码+教学!-4.jpg (22.38 KB, 下载次数: 0)

2018-9-3 02:21 上传

毛病写法

依照毛病写法进行调试的话,会呈现以下毛病提示↓

5分钟!教你用C语言发送邮件:附送源码+教学!-5.jpg (7.59 KB, 下载次数: 0)

2018-9-3 02:21 上传

毛病提示

然后我们再声明一个变量和两个函数,变量是用来贮存办事器返回的数据的,两个函数别离是用来建立套接字(socket)和接收办事器返回数据的,这里我们声明了一个字符型数组,数组年夜小我们用BUFSIZ取代,这里有人就会问了:“为什么用BUFSIZ作为数组年夜小呢?”,谜底是:“减轻系统承担”,不睬解?没关系,先把代码运行起来,然后再慢慢研究。

除以上步调,我们还需要写入以下两行代码,加入两个库文件,其中User32.lib是可有可无的,加入User32.lib只是为了能够挪用MessageBox()函数罢了。

5分钟!教你用C语言发送邮件:附送源码+教学!-6.jpg (61.45 KB, 下载次数: 0)

2018-9-3 02:21 上传

到这里,我们的第一步完成了!接下来是第二步

第二步

初始化

前期的准备工作做好了,我们现在开始编写我们要用到的函数——socket_connect_server(void),从字面的意思上来看,年夜家都应该明白这个函数是干吗的吧?没错,它是用来建立套接字并连接SMTP办事器的。

我们要建立一个套接字,初始化完成后,我们要把它记在某个处所,要不然“忘记”了怎么办?所以我们要声明一个变量来寄存套接字初始化后的数据——WSADATA wd,wd就是用来寄存这些数据的变量。

好了,我们用到的主要变量已经声明完毕,接下来要初始化,我们要向编译器说明,我们要用到Ws2_32.lib和Winsock2.h中的哪个库文件(简单来说就是初始化罢了),如图,代码可以这么写↓

5分钟!教你用C语言发送邮件:附送源码+教学!-7.jpg (29.89 KB, 下载次数: 0)

2018-9-3 02:21 上传

建立套接字

开始建立socket,这里我们要用到socket()函数,socket()需要三个参数,可是一般情况下,依照图中的代码写也是可以的,所以,这行代码各位看官照抄就行了!其实,这三个参数很容易理解,这里就不“搬书”了。

5分钟!教你用C语言发送邮件:附送源码+教学!-8.jpg (8.58 KB, 下载次数: 0)

2018-9-3 02:21 上传

输入办事器信息

这里解释一下inet_addr()函数,它的功能是将一个点分十进制的IP转换成一个长整数型数(u_long类型),说白了,就是数据类型转换,将IP地址的数据类型成能够存到addr这个结构体的数据类型。

还有一个htons()函数,它的作用是将括号里面的数值,转化成网络字节顺序(TCP/IP中规定命据表示形式),简单点讲,就是将括号里面的数值转化成另一种表示形式。

5分钟!教你用C语言发送邮件:附送源码+教学!-9.jpg (44.21 KB, 下载次数: 0)

2018-9-3 02:21 上传

连接办事器

套接字有了,办事器也有了,接下来要干吗呢?那就是连接办事器!连接办事器我们要用到connet()函数而不是bind()函数,这里简单的记一下“connet()用在客户端,bind()用在办事器”。

5分钟!教你用C语言发送邮件:附送源码+教学!-10.jpg (22.87 KB, 下载次数: 0)

2018-9-3 02:21 上传

这里跟年夜家说一下,connet()函数其中第一个参数是SOCKADDR类型,而我们这里为什么用SOCKADDR_IN类型呢?请看下图↓

5分钟!教你用C语言发送邮件:附送源码+教学!-11.jpg (17.52 KB, 下载次数: 0)

2018-9-3 02:21 上传

SOCKADDR_IN强制转换成SOCKADDR类型

图中的代码将smtp邮箱IP地址寄存在SOCKADDR_IN的S_addr成员中,然后再将端口号放在sin_port成员中,分隔进行,而SOCKADDR就不一样了,它将IP地址和端口号一起放在sa_data[14]这个成员中,这样看来SOCKADDR是一种通用的套接字地址,SOCKADDR_IN是internet环境下套接字的地址形式。说白了,就是“SOCKADDR_IN更适合用于网络编程”,记住这句话就对了!

第三步

就是我们的recv_show()函数,这个函数比较简单,这里就不多说了,照抄!

5分钟!教你用C语言发送邮件:附送源码+教学!-12.jpg (10.16 KB, 下载次数: 0)

2018-9-3 02:21 上传

办事器已经连接了、接收数据并打印的函数也有了,接下来就是依照SMTP协议发送数据

这里会用到send()函数,它有三个参数,别离是已连接的socket、发送的字符串、发送字符串长度、挪用执行体例(一般为0)。

代码书写示例:send(socket_use,"发送的数据\r\n",strlen("发送的数据\r\n"),0),为什么后面会有\r\n?这个跟SMTP协议有关,\r\n与CMD命令行发送邮件时的“回车”效果一样。

注意:

发送的账号、密码要通过base64加密,不会如何加密?那么,请百度搜索:“base64”发送和接收的邮箱要开启smtp办事!发件人和收件人可以是同一个邮箱发送邮件的最后三行语句特别重要,注意格式(文章末尾有)

接下来就是依照SMTP协议来发送数据和接收数据了

如图,参照CMD命令通过SMTP协议发送邮件的实例,来写C语言发送邮件的代码↓

5分钟!教你用C语言发送邮件:附送源码+教学!-13.jpg (58.61 KB, 下载次数: 0)

2018-9-3 02:21 上传

CMD发送邮件的过程

举个例子,我们第一步要发送“helo 163.com”,那么,我们用C语言发送是这样的,send(socket_use,"helo 163.com\r\n",strlen("helo 163.com\r\n"),0),依照这行代码,以此类推写下去,然后再用recv_show()输出办事器应答的信息。

5分钟!教你用C语言发送邮件:附送源码+教学!-14.jpg (29.7 KB, 下载次数: 0)

2018-9-3 02:21 上传

5分钟!教你用C语言发送邮件:附送源码+教学!-15.jpg (30.3 KB, 下载次数: 0)

2018-9-3 02:21 上传

注意这三行C语言代码,跟CMD发邮件过程对比以下↓

5分钟!教你用C语言发送邮件:附送源码+教学!-16.jpg (26.04 KB, 下载次数: 0)

2018-9-3 02:21 上传

最后

这是程序运行之后的结果

5分钟!教你用C语言发送邮件:附送源码+教学!-17.jpg (28.73 KB, 下载次数: 0)

2018-9-3 02:21 上传

以下是全部代码↓

5分钟!教你用C语言发送邮件:附送源码+教学!-18.jpg (34.05 KB, 下载次数: 0)

2018-9-3 02:21 上传

5分钟!教你用C语言发送邮件:附送源码+教学!-19.jpg (40.25 KB, 下载次数: 0)

2018-9-3 02:21 上传

5分钟!教你用C语言发送邮件:附送源码+教学!-20.jpg (43.29 KB, 下载次数: 0)

2018-9-3 02:21 上传

5分钟!教你用C语言发送邮件:附送源码+教学!-21.jpg (11.89 KB, 下载次数: 0)

2018-9-3 02:21 上传

5分钟!教你用C语言发送邮件:附送源码+教学!-22.jpg (30.03 KB, 下载次数: 0)

2018-9-3 02:21 上传

5分钟!教你用C语言发送邮件:附送源码+教学!-23.jpg (45.37 KB, 下载次数: 0)

2018-9-3 02:21 上传

5分钟!教你用C语言发送邮件:附送源码+教学!-24.jpg (10.16 KB, 下载次数: 0)

2018-9-3 02:21 上传

图片看不清?那就关注《一碳科技》,私信我们拿源码哦!

更多内容回复查看:

游客,如果您要查看本帖隐藏内容请回复

自动发邮件的程序 c语言,5分钟!教你用C语言发送邮件:附送源码+教学!相关推荐

  1. 如何用c语言编写发邮件程序,想学C语言发邮件程序?5分钟教会你:附送源码+教学!...

    关注<一碳科技>,获取更多知识! 前言 相信大家都有过被C语言网络编程所支配的恐惧吧?其实,小编在刚刚学习这方面的知识的时候也有这样的感受,并且所有的资料都是从网络寻找的,但是,现在你们不 ...

  2. C语言二叉树的lowest common ancestor最低公共祖先(附完整源码)

    C语言二叉树的lowest common ancestor最低公共祖先 C语言二叉树的lowest common ancestor最低公共祖先完整源码(定义,实现,main函数测试) C语言二叉树的l ...

  3. C语言二叉搜索树返回key的树级(附完整源码)

    C语言二叉搜索树返回key的树级 C语言二叉搜索树返回key的树级完整源码(定义,实现,main函数测试) C语言二叉搜索树返回key的树级完整源码(定义,实现,main函数测试) #include ...

  4. C语言最简单的sleep sort睡眠排序实现(附完整源码)

    C语言最简单的sleep sort睡眠排序实现 C语言最简单的sleep sort睡眠排序实现完整源码(定义,实现,main函数测试) C语言最简单的sleep sort睡眠排序实现完整源码(定义,实 ...

  5. C语言求在算术级数中找到缺少的数字(附完整源码)

    C语言求在算术级数中找到缺少的数字 在算术级数中找到缺少的数字 C语言求在算术级数中找到缺少的数字完整源码(定义,实现,main函数测试) 在算术级数中找到缺少的数字 Examples: Input: ...

  6. C语言二分法在一个有序数组查找数的算法(附完整源码)

    C语言二分法在一个有序数组查找数 二分法在一个有序数组查找数 C语言分治法来计算pow(x,y)完整源码(定义,实现,main函数测试) 二分法在一个有序数组查找数 给定一个排序数组和一个数字. 用户 ...

  7. C语言通过链表指针删除链表节点的算法(附完整源码)

    C语言通过链表指针删除链表节点的算法 C语言通过链表指针删除链表节点的算法完整源码(定义,实现,main函数测试) C语言通过链表指针删除链表节点的算法完整源码(定义,实现,main函数测试) #in ...

  8. C语言Huffman Encode霍夫曼编码的算法(附完整源码)

    C语言Huffman Encode霍夫曼编码的算法 C语言Huffman Encode霍夫曼编码的算法完整源码(定义,实现,main函数测试) C语言Huffman Encode霍夫曼编码的算法完整源 ...

  9. C语言检查列表是否是回文的算法(附完整源码)

    C语言检查列表是否是回文的算法 C语言检查列表是否是回文的算法完整源码(定义,实现,main函数测试) C语言检查列表是否是回文的算法完整源码(定义,实现,main函数测试) #include < ...

最新文章

  1. PTA团体程序设计天梯赛-L2-023 图着色问题
  2. Linux命令——cp
  3. MySQL带关系运算符的查询
  4. loadrunner监控linux性能指标,使用LoadRunner监控Linux系统性能.doc
  5. win10切第二屏幕_Win10特有的31个快捷键,装逼利器,赶快收藏吧!学习电脑知识...
  6. 计算机网络(二)-性能指标
  7. cocos creator 方法数组_基于 Cocos 游戏引擎的音视频研发探索
  8. 卷积神经网络的几种典型架构
  9. 深入学习webpack(四)
  10. select coun等于0查出来不等于0_飞蚊症不需要治疗,是真的吗?
  11. 步进电机速度不够怎么办?
  12. 离散数学计算机专业论文,【计算机专业《离散数学》教学研究】计算机专业离散数学...
  13. Android模拟地图gps定位
  14. uci数据集汇总及翻译
  15. C语言从入门到精通(第一期之结构框架)
  16. MT7612芯片技术资料解析,MT7612处理器简介
  17. ProGuard Usage 翻译
  18. c++ grpc 实现一个传图服务(同步方式,流式传输)
  19. python requests post 中文结果请求得到unicode
  20. C语言:switch语句与if语句的区别

热门文章

  1. redis面试全家桶
  2. 【带你重拾Redis】Redis数据结构及使用场景
  3. 使用Ef框架进行分页..EF模糊查询..EF多表内连接查询
  4. 我用Python爬取英雄联盟的皮肤,隔壁家的小弟弟都馋哭了
  5. 10年开发经验大佬分享一个数据库系统知识图谱
  6. 大佬教你怎样防止同事用 QQ 邮箱提交公司代码?
  7. java静态链表_数据结构笔记:静态链表(C语言)
  8. java自定义监听器例子_Spring 实现自定义监听器案例
  9. 教程:1、Linux简介
  10. php8的jit如何使用,PHP JIT 是什么?PHP8 新特性之 JIT 图文详解