使用C语言编写一个smtp用户代理
来源:互联网 发布:留学生回国 知乎 编辑:程序博客网 时间:2024/06/08 01:20
写在前面:
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-MD5Using AUTH LOGIN//开始认证,这里要注意的是使用的用户名和密码都是经过base64编码的[C] AUTH LOGIN[S] 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 testFrom: <xxxxxxxxx@qq.com>Date: Thu, 20 Jul 2017 20:43:51 +0800To: <xxxxxxxxx@qq.com>X-Mailer: @(#) mailsend v1.19 (Unix)X-Copyright: BSD. It is illegal to use this software for SpammingMessage: Your test resault!Mime type: text/plainDisposition: inlineEncoding 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、前两步封装好的函数根据上面的流程调用,然后成功发送邮件。
阅读全文
0 0
- 使用C语言编写一个smtp用户代理
- C语言编写smtp用户代理之socket操作
- C语言编写smtp用户代理之协议操作
- C语言编写smtp用户代理之代码综合和管理
- C语言使用SMTP发送邮件
- C语言编写一个电话本
- C语言编写windows用户账户管理
- C语言 编写代码实现,模拟用户登录场景 ( for循环,if语句的使用)
- 用 C 语言编写一个网络蜘蛛
- 用 C 语言编写一个网络蜘蛛
- 用 C 语言编写一个网络蜘蛛
- 用 C 语言编写一个网络蜘蛛
- 用c语言编写一个万年历
- 【C语言】编写一个折半查找函数
- 编写C语言程序 输出一个菱形
- 使用Geany编写一个 HelloWorld 的C语言程序+100以内素数+java helloworld
- 【C语言】编写一个函数实现n^k,使用递归实现
- C语言 编写一个函数实现n^k,使用递归实现
- JAVA异常使用_用过、但未必都用得好
- 在Linux服务器上安装lxml
- JDK的目录结构及结构图
- Bash prompt tips and tricks
- 判断文件夹,是否存在,不存在则创建
- 使用C语言编写一个smtp用户代理
- github 配置有共有sshkey
- HDU5968 异或密码 —— 二分 + 边界的细节处理
- iOS全景SDK
- 对自己的反省和总结
- 多种方法获取json中的键(key)与值(value)
- python3 [爬虫入门实战]scrapy爬取盘多多五百万数据并存mongoDB
- CSS 伪类的效果
- [HDU4366]Successor 线段树