使用C语言编写一个smtp用户代理
2017-07-20 20:58
260 查看
写在前面:
1、写这个主要是想练习一下socket编程。
2、就本次完成的目标是发送一个邮件,邮件中包含一条消息,不带附件。
3、只是针对smtp.qq.com邮件服务器。
4、我新手,代码写的不好,协议也不熟悉,有错误的地方欢迎大家指正。
接下来就是了解一下smtp协议的流程。针对的是qq邮件服务器。
好了,流程分析完了,开始分析一下怎么写代码。
1、先写socket操作,把常用的socket操作封装成方便的函数,写到一个模块中。
2、开始针对smtp协议的每个命令,例如 FROM / TO /DATA等 封装函数。
3、前两步封装好的函数根据上面的流程调用,然后成功发送邮件。
1、写这个主要是想练习一下socket编程。
2、就本次完成的目标是发送一个邮件,邮件中包含一条消息,不带附件。
3、只是针对smtp.qq.com邮件服务器。
4、我新手,代码写的不好,协议也不熟悉,有错误的地方欢迎大家指正。
接下来就是了解一下smtp协议的流程。针对的是qq邮件服务器。
第一句是问候之后的回复,其实这里我不是很清楚,因为这里需要发送两次EHLO, > [S] 220 smtp.qq.com Esmtp QQ Mail Server > //这里是客户端发送EHLO [C] EHLO localhost //这里是接受到回复内容,这些内容的最后一条的连字符是空格而不是 '-' [S] 250-smtp.qq.com [S] 250-PIPELINING [S] 250-SIZE 73400320 [S] 250-AUTH LOGIN PLAIN [S] 250-AUTH=LOGIN [S] 250-MAILCOMPRESS [S] 250 8BITMIME //检查之后发现服务器支持LOGIN,所以用LOGIN方法认证。 Server does not support AUTH CRAM-MD5 Using AUTH LOGIN //开始认证,这里要注意的是使用的用户名和密码都是经过base64编码的 [C] AUTH LOGIN [S] < 4000 span class="hljs-number">334 VXNlcm5hbWU6 [C] NzMxNjM0NTM5QHFxLmNvbQ== [S] 334 UGFzc3dvcmQ6 [C] eWp3bGJjbXRod3RnYmVjZg== [S] 235 Authentication successful //认证成功之后发送FROM命令 [C] MAIL FROM: <xxxxxxxxx@qq.com> [S] 250 Ok //发送RCPT TO [C] RCPT TO:<xxxxxxxxx@qq.com> [S] 250 Ok //发送DATA [C] DATA [S] 354 End data with <CR><LF>.<CR><LF> //服务器做出如上提示的时候开始输入消息,消息的内容如下,对于我们本次的目的这些并不是都有用。 Subject: auto test From: <xxxxxxxxx@qq.com> Date: Thu, 20 Jul 2017 20:43:51 +0800 To: <xxxxxxxxx@qq.com> X-Mailer: @(#) mailsend v1.19 (Unix) X-Copyright: BSD. It is illegal to use this software for Spamming Message: Your test resault! Mime type: text/plain Disposition: inline Encoding type: none --kWf+dmY0yK27AAvb-- //发送 . 停止发送 [C] . [S] 250 Ok: queued as //退出 [C] QUIT [S] 221 Bye //成功发送 Mail sent successfully
好了,流程分析完了,开始分析一下怎么写代码。
1、先写socket操作,把常用的socket操作封装成方便的函数,写到一个模块中。
2、开始针对smtp协议的每个命令,例如 FROM / TO /DATA等 封装函数。
3、前两步封装好的函数根据上面的流程调用,然后成功发送邮件。
相关文章推荐
- C语言编写smtp用户代理之socket操作
- C语言编写smtp用户代理之协议操作
- C语言编写smtp用户代理之代码综合和管理
- 【c语言】编写一个函数reverse_string(char * string) 实现:将参数字符串中的字符反向排列。 要求:不能使用C函数库中的字符串操作函数
- 用c语言实现 编写一个函数实现n^k,使用递归实现
- 【C语言】编写一个函数实现n^k,使用递归实现。
- c语言:使用for循环编写一个判断闰年的程序
- 【C语言】编写一个函数reverse_string(char * string) 实现:将参数字符串中的字符反向排列。要求:不能使用C函数库中的字符串操作函数。
- 编写一个程序库,实现定时器的功能,它能为用户提供在同一进程中多次使用的定时器。
- C语言:编写一个函数实现n^k,使用递归实现
- 编写一个程序,要求用户输入最多10个高尔夫成绩,并将其存储在一个数组中。 程序允许用户提早结束输入,并在一行上显示所有成绩,然后报告平均成绩。 请使用3个数组处理函数来分别进行输入、显示和计算
- 使用write函数来编写一个程序,在程序中指定一个文件,用户可以向程序中一次写入不超过80个字符的数
- 编写代码,由用户输入一个字符串,使用foreach循环遍历出此字符串中有多个字母,多少个数字,多少个标点
- C语言 编写代码实现,模拟用户登录场景 ( for循环,if语句的使用)
- Rhino 是一个完全使用Java语言编写的开源JavaScript实现。Rhino通常用于在Java程序中,为最终用户提供脚本化能力。它被作为J2SE 6上的默认Java脚本化引擎。
- 【C语言】编写一个函数实现n^k,使用递归实现
- 编写一个简单的用户管理系统(工厂代理模式)
- C语言 编写一个函数,将参数字符串中的字符反向排列。要求:不能使用C函数库中的字符串操作函数,
- 【C语言】编写一个函数实现n^k,使用递归实现
- C语言 编写一个函数实现n^k,使用递归实现