MIME 并没有改动 SMTP 或取代它。
MIME 的意图是继续使用目前的 RFC 822 格式,但增加了邮件主体的结构,并定义了传送非ASCII 码的编码规则。
MIME 主要包括三个部分 :
1、5 个新的邮件首部字段,它们可包含在[RFC 822]首部中。这些字段提供了有关邮件主体的信息。
2、定义了许多邮件内容的格式,对多媒体电子邮件的表示方法进行了标准化。
3、定义了传送编码,可对任何内容格式进行转换,而不会被邮件系统改变。
MIME 增加 5 个新的邮件首部:
1、MIME-Version: 标志 MIME 的版本。现在的版本号是1.0。若无此行,则为英文文本。
2、Content-Description: 这是可读字符串,说明此邮件是什么。和邮件的主题差不多。
3、Content-Id: 邮件的唯一标识符。
4、Content-Transfer-Encoding: 在传送时邮件的主体是如何编码的。
5、Content-Type: 说明邮件的性质。
内容传送编码Content-Transfer-Encoding :
1、最简单的编码就是7 位 ASCII 码,而每行不能超过 1000 个字符。MIME 对这种由 ASCII 码构成的邮件主体不进行任何转换。
2、另一种编码称为quoted-printable,这种编码方法适用于当所传送的数据中只有少量的非 ASCII 码。
3、对于任意的二进制文件,可用base64 编码。
内容类型:
1、MIME着标准规定 Content-Type 说明必须含有两个标识符,即内容类型(type)和子类型(subtype),中间用“/”分开。
2、MIME 标准定义了 7 个基本内容类型和15 种子类型。
下面来简单讲讲SKPSMTPMessage发送邮件
首先肯定是下载开源库
导入cfnetwork.frame框架
导入头文件SKPSMTPMessage.h和NSData+Base64Additions.h
遵循SKPSMTPMessageDelegate协议,并实现两个协议方法
下面有个小demo
SKPSMTPMessage * mm=[[SKPSMTPMessage alloc] init];
[mm setSubject:@”this is subject!”];
[mm setToEmail:@”目标邮箱@126.com”];
[mm setFromEmail:@”发送者邮箱@126.com”];
[mm setRelayHost:@”smtp.126.com”];
[mm setRequiresAuth:YES];
[mm setLogin:@”发送者邮箱@126.com”];
[mm setPass:@”发送者邮箱密码”];
[mm setWantsSecure:YES];
NSDictionary * plainPart=[NSDictionary dictionaryWithObjectsAndKeys:@”text/plain”,kSKPSMTPPartContentTypeKey,[NSString stringWithCString:”测试正文”encoding:NSUTF8StringEncoding],kSKPSMTPPartMessageKey,@”8bit”,kSKPSMTPPartContentTransferEncodingKey, nil];
NSString * filePath=[[NSBundle mainBundle] pathForResource:@”imageName” ofType:@”png”];
NSData * data=[NSData dataWithContentsOfFile:filePath];
NSDictionary*vcfPart =[NSDictionary dictionaryWithObjectsAndKeys:@”text/directory;\r\n\tx-unix-mode=0644;\r\n\tname=”test.png””,kSKPSMTPPartContentTypeKey,
@”attachment;\r\n\tfilename=”test.png””,kSKPSMTPPartContentDispositionKey,
[dataencodeBase64ForData],kSKPSMTPPartMessageKey,@”base64″,kSKPSMTPPartContentTransferEncodingKey,nil];
[mm setParts:[NSArray arrayWithObjects:plainPart,vcfPart, nil]];
mm.delegate=self;
[mm send];
针对上面demo提一下其中参数。在demo中发送者的邮箱使用的是126邮箱,所以发送邮件的代理服务器主机是smtp.126.com,如果发送者邮箱是qq邮箱,那么设置setRelayHost的值应该是smtp.qq.com。setpart中参数是发送的邮件的信息,包括邮件首部字段、邮件内容格式和传输编码。
转自:http://blog.sina.com.cn/s/blog_7d280d7c0101da7d.html