使用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、前两步封装好的函数根据上面的流程调用,然后成功发送邮件。

原创粉丝点击