socket smtp 邮件带附件MFC编程
网上发邮件的MFC的代码还是比较多的,但都是不太完整,找到一个比较好的却没有验证帐号密码的。然后看代码封装的比较好的,
链接是:http://www.pudn.com/downloads229/sourcecode/windows/network/detail1075396.html
不过,如果你功底比较好,看起来可能会比较轻松的。
但用起来还是美中不足啊,缺个验证的。然后不知道原理的话修改实在很困难,不折腾个几天还真是搞不好啊。
我就折腾了几天 终于可以发文本邮件 html 以及附件发送。
对于初学者还是要学习知识为主,把原理搞清楚,才是最重要的。
首先,我做的时候找到了这个资料:
SMTP命令:http://blog.csdn.net/helihui123/article/details/6704189
文件下载地址:http://download.csdn.net/source/3534820
在“开始”-->”运行” 输入cmd 然后就可以按照资料一步一步的下去,这里需要注意的是那边的帐号密码是需要base64编码过的才行,那么可以进
http://tool.chinaz.com/Tools/Base64.aspx 这个链接,可以在线编码解码。
做完上面SMTP命令 的操作,惊奇的发现居然可以发邮件,哈哈~~ 至少可以发文本了。良好的开始是成功的一半嘛,快接近了 ~ 开心~~
然后呢,我们是程序实现的,然后根据所学的知识,知道可以用套接字(socket),然后就是模拟上面的命令发送给邮件服务器。
但在模拟前先冲冲电,邮件格式,这里要提到MIME协议:
文件下载地址:http://download.csdn.net/source/3534961
看完上面的协议大概了解邮件的格式了吧。
看看很简单的代码吧:(代码控制台的 C语言写的 相当简洁 肯定是你满意的,目前只是基于纯文本的 不能加附件什么的还要加的话得看下MIME协议)
源码下载地址:http://download.csdn.net/source/3535894
好了,现在来看看怎么发附件吧。当然最先的还是基础知识了,其实在上面那个MIME协议的介绍里面已经有了的。
记得有这么一段吧:来分析分析看看
1 From: "bhw98" bhw98@sina.com //邮件创建者 前面bhw98是邮件地址的别名而已
2 Reply-To: bhw98@sina.com //回复邮件地址
3 To: <bluesky7810@163.com> //收信方的邮件地址
4 Subject: Re: help //邮件标题
5 X-Mailer: Foxmail 4.2 [cn] //版本说明 这个X前缀的话是自己懂的 非标准的 可有可无
6 Mime-Version: 1.0 // mime协议版本
7 Content-Type: multipart/alternative; //MIME的内容类型 这个是最低的吧 内容只能包含超文本和文本。
8 boundary="=====002_Dragon307572345230_=====" //part1标记
9
10
11 This is a multi-part message in MIMEformat.
12
13 --=====002_Dragon307572345230_===== //part2标记
14 Content-Type: text/plain;charset="GB2312"
15 Content-Transfer-Encoding: quoted-printable
16
17 bluesky7810=A3=AC=C4=FA=BA=C3=A3=A1
18
19=A1=A1=A1=A1=D4=DA=CF=C2=C6=AA=D7=EE=BA=F3=BF=C9=D2=D4=CF=C2=D4=D8=B0=A1=A3=AC=C4=E3
... ... ... ...
30=A1=A1=A1=A1=A1=A1=A1=A1=A1=A1=A1=A1=A1=A1=A1=A1=A1=A1=A1=A1=A1=A1=A1=A1=A12003-04-07
31
32 --=====002_Dragon307572345230_=====
33 Content-Type: text/html;charset="GB2312"
34 Content-Transfer-Encoding: quoted-printable
35
36 <!DOCTYPE HTML PUBLIC "-//W3C//DTDHTML 4.0 Transitional//EN">
37 <HTML><HEAD>
38 <METAcontent=3D"text/html; charset=3Dgb2312"=
39 http-equiv=3DContent-Type>
40 <METAcontent=3D"MSHTML 5.00.2920.0" name=3DGENERATOR>
... ... ... ...
79 </HTML>
80
//上面的不解释了 最重要的附件这里貌似还没有 看这个
81 --=====002_Dragon307572345230_=====
82 Content-Type:application/octet-stream;
83 name="result.txt" //这个就是附件 这里为什么不用路径呢 这里只是给文件取个名字而已 真正的文件在下面
84 Content-Transfer-Encoding:base64
85 MQ== //就是这个 就是文件内容了 只不过已经编码过了 base64
--=====002_Dragon307572345230_=====--
看过上面那么一大段 其实我们发送的时候也就是动态的生成那么一段然后发送给服务器就可以了。
是不是思路比较清晰呢。。。 先不要想太多把握大局
更详细的MIME协议的学习比较好的资料:http://download.csdn.net/source/3536315 最好先看下
可能有了程序大家分析起来就容易多了 举例的程序会非常的简单
源码下载地址:http://download.csdn.net/source/3535756
看看源码应该就知道了 详细的注释的。
看看格式更多的资料看下面的扩展资料即可,我这里列举下比较重要的几点(正在不断更新...),
知识点一: Multipart Media Type(多部分类型)
在multipart entity(多部分实体)的例子中,一个或多个不同的数据集合并在一
个单一的body(体)中,一个"multipart"(多部分)类型 field的(域)必须出现在实
体的header(头域)。body(体)必须包括一个或多个body part(体部分),每一个位
于boundary(边界)定界符线之前,最后一个则跟着一个结束边界定界符线。在它的
边界定界符线后,每一个体部分由头域、空行、体组成。因此一个体部分在语法上类
似于RFC 822中的message(消息),但是在意义上是不同的。
知识点二:
编界定界符不能出现在压缩的原文里面,并且不能大于70个字符,不计算前面的连字符。
程序演示:
输入邮箱的帐号 密码:
好,发送成功了。
我们来看看真正成功了没。
收到了 o(∩_∩)o 哈哈~~~
更多拓展资料:http://man.lupaworld.com/content/develop/rfc/RFC2046.htm
http://www.w3school.com.cn/media/media_mimeref.asp
转载请注明:原作者博客: http://blog.csdn.net/helihui123
请尊重他人劳动成果,谢谢!