您的位置:首页 > 编程语言 > C语言/C++

使用C语言编写一个smtp用户代理

2017-07-20 20:58 260 查看
写在前面:

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、前两步封装好的函数根据上面的流程调用,然后成功发送邮件。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐