c语言socket/smtp 邮件 附件,socket smtp 邮件带附件MFC编程

socket smtp 邮件带附件MFC编程

网上发邮件的MFC的代码还是比较多的,但都是不太完整,找到一个比较好的却没有验证帐号密码的。然后看代码封装的比较好的,

不过,如果你功底比较好,看起来可能会比较轻松的。

但用起来还是美中不足啊,缺个验证的。然后不知道原理的话修改实在很困难,不折腾个几天还真是搞不好啊。

我就折腾了几天 终于可以发文本邮件  html  以及附件发送。

对于初学者还是要学习知识为主,把原理搞清楚,才是最重要的。

首先,我做的时候找到了这个资料:

在“开始”-->”运行” 输入cmd  然后就可以按照资料一步一步的下去,这里需要注意的是那边的帐号密码是需要base64编码过的才行,那么可以进

做完上面SMTP命令 的操作,惊奇的发现居然可以发邮件,哈哈~~ 至少可以发文本了。良好的开始是成功的一半嘛,快接近了  ~  开心~~

然后呢,我们是程序实现的,然后根据所学的知识,知道可以用套接字(socket),然后就是模拟上面的命令发送给邮件服务器。

但在模拟前先冲冲电,邮件格式,这里要提到MIME协议:

看完上面的协议大概了解邮件的格式了吧。

看看很简单的代码吧:(代码控制台的 C语言写的 相当简洁  肯定是你满意的,目前只是基于纯文本的  不能加附件什么的还要加的话得看下MIME协议)

好了,现在来看看怎么发附件吧。当然最先的还是基础知识了,其实在上面那个MIME协议的介绍里面已经有了的。

记得有这么一段吧:来分析分析看看

1 From: "bhw98" bhw98@sina.com    //邮件创建者 前面bhw98是邮件地址的别名而已

2 Reply-To: bhw98@sina.com  //回复邮件地址

3 To:  //收信方的邮件地址

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

37

38

39 http-equiv=3DContent-Type>

40

... ... ... ...

79

80

//上面的不解释了  最重要的附件这里貌似还没有 看这个

81 --=====002_Dragon307572345230_=====

82 Content-Type:application/octet-stream;

83 name="result.txt"  //这个就是附件 这里为什么不用路径呢 这里只是给文件取个名字而已  真正的文件在下面

84 Content-Transfer-Encoding:base64

85 MQ==  //就是这个 就是文件内容了 只不过已经编码过了  base64

--=====002_Dragon307572345230_=====--

看过上面那么一大段  其实我们发送的时候也就是动态的生成那么一段然后发送给服务器就可以了。

是不是思路比较清晰呢。。。  先不要想太多把握大局

可能有了程序大家分析起来就容易多了 举例的程序会非常的简单

看看源码应该就知道了  详细的注释的。

看看格式更多的资料看下面的扩展资料即可,我这里列举下比较重要的几点(正在不断更新...),

知识点一: Multipart Media Type(多部分类型)

在multipart entity(多部分实体)的例子中,一个或多个不同的数据集合并在一

个单一的body(体)中,一个"multipart"(多部分)类型 field的(域)必须出现在实

体的header(头域)。body(体)必须包括一个或多个body part(体部分),每一个位

于boundary(边界)定界符线之前,最后一个则跟着一个结束边界定界符线。在它的

边界定界符线后,每一个体部分由头域、空行、体组成。因此一个体部分在语法上类

似于RFC 822中的message(消息),但是在意义上是不同的。

知识点二:

编界定界符不能出现在压缩的原文里面,并且不能大于70个字符,不计算前面的连字符。

程序演示:

0818b9ca8b590ca3270a3433284dd417.png

输入邮箱的帐号 密码:

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.png

好,发送成功了。

我们来看看真正成功了没。

0818b9ca8b590ca3270a3433284dd417.png

收到了 o(∩_∩)o 哈哈~~~

请尊重他人劳动成果,谢谢!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值