VC中文网-VC-MFC编程论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 1800|回复: 1

5分钟!教你用C语言发送邮件:附送源码+教学!

[复制链接]

9

主题

51

帖子

23

金币

连长

Rank: 7Rank: 7Rank: 7

积分
132
发表于 2018-9-3 01:23:07 | 显示全部楼层 |阅读模式
5分钟!教你用C语言发送邮件:附送源码+教学!-1.jpg




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

前言

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

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

5分钟!教你用C语言发送邮件:附送源码+教学!-2.jpg




言归正传,代码写起来!

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

第一步

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

5分钟!教你用C语言发送邮件:附送源码+教学!-3.jpg

这是正确写法



5分钟!教你用C语言发送邮件:附送源码+教学!-4.jpg

毛病写法



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

5分钟!教你用C语言发送邮件:附送源码+教学!-5.jpg

毛病提示



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

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

5分钟!教你用C语言发送邮件:附送源码+教学!-6.jpg




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

第二步

初始化

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

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

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

5分钟!教你用C语言发送邮件:附送源码+教学!-7.jpg




建立套接字

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

5分钟!教你用C语言发送邮件:附送源码+教学!-8.jpg




输入办事器信息

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

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

5分钟!教你用C语言发送邮件:附送源码+教学!-9.jpg




连接办事器

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

5分钟!教你用C语言发送邮件:附送源码+教学!-10.jpg




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

5分钟!教你用C语言发送邮件:附送源码+教学!-11.jpg

SOCKADDR_IN强制转换成SOCKADDR类型



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

第三步

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

5分钟!教你用C语言发送邮件:附送源码+教学!-12.jpg




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

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

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

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

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

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

5分钟!教你用C语言发送邮件:附送源码+教学!-13.jpg

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




5分钟!教你用C语言发送邮件:附送源码+教学!-15.jpg




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

5分钟!教你用C语言发送邮件:附送源码+教学!-16.jpg




最后

这是程序运行之后的结果

5分钟!教你用C语言发送邮件:附送源码+教学!-17.jpg




以下是全部代码↓

5分钟!教你用C语言发送邮件:附送源码+教学!-18.jpg




5分钟!教你用C语言发送邮件:附送源码+教学!-19.jpg




5分钟!教你用C语言发送邮件:附送源码+教学!-20.jpg




5分钟!教你用C语言发送邮件:附送源码+教学!-21.jpg




5分钟!教你用C语言发送邮件:附送源码+教学!-22.jpg




5分钟!教你用C语言发送邮件:附送源码+教学!-23.jpg




5分钟!教你用C语言发送邮件:附送源码+教学!-24.jpg




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

更多内容回复查看:
游客,如果您要查看本帖隐藏内容请回复
C VC C++ MFC 汇编 函数 脚本 辅助 多开 注入 内存 插件 破解 基址 窗口 大漠 绑定 编程 交流 论坛 实例 源码

0

主题

8

帖子

29

金币

班长

Rank: 4

积分
30
发表于 2021-8-2 00:22:49 | 显示全部楼层
学习,膜拜大佬
C VC C++ MFC 汇编 函数 脚本 辅助 多开 注入 内存 插件 破解 基址 窗口 大漠 绑定 编程 交流 论坛 实例 源码
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

豫ICP备14012807号-2|小黑屋|联系客服|金币冲值|VC中文网

GMT+8, 2021-9-22 16:47 , Processed in 0.187502 second(s), 25 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表