近期迭代版本要增加app內(nèi)發(fā)送郵件的功能,由于以前沒(méi)做過(guò),所以直接去百度找了資源,果然好多文檔,大體分為兩種,第一種就是使用內(nèi)置的MFMailComposeViewController發(fā)送郵件,第二種就是通過(guò)第三方類庫(kù)SKPSMTPMessage發(fā)送郵件,類庫(kù)下載地址為:https://github.com/jetseven/skpsmtpmessage
下面我就只介紹第二種了,自我感覺(jué)第一種是沒(méi)多少需求的。
SKPSMTPMessage發(fā)送:
這個(gè)第三方類庫(kù)出現(xiàn)的比較早,引用的也比較多,把常用的郵件發(fā)送都封裝到了起來(lái),直接調(diào)用,是一個(gè)很簡(jiǎn)單的事情,下載之后會(huì)看到一個(gè)Demo和一個(gè)SMTPLibrary,直接將SMTPLibray拷貝到項(xiàng)目中,引用即可:

注意:
我是手動(dòng)高進(jìn)工程里,應(yīng)為這東西是mrc的開發(fā)的,于是乎就要設(shè)置了,在Build Phases下添加-fno-objc-arc
①需要發(fā)送的控制器上導(dǎo)入SKPSMTPMessage和NSData+Base64Additions頭文件
#import "SKPSMTPMessage.h"
#import "NSData+Base64Additions.h"
②實(shí)現(xiàn)SKPSMTPMessageDelegate協(xié)議;
③具體發(fā)送方法:
SKPSMTPMessage *myMessage = [[SKPSMTPMessage alloc] init];
myMessage.fromEmail=@"keso@163.com";
myMessage.toEmail=@"FlyElephant@qq.com";
myMessage.bccEmail=@"Goodman@qq.com";
myMessage.relayHost=@"smtp.163.com";
myMessage.requiresAuth=YES;
if (myMessage.requiresAuth) {
myMessage.login=@"keso@163.com";
myMessage.pass=@"keso";
}
myMessage.wantsSecure =YES; //為gmail郵箱設(shè)置 smtp.gmail.com
myMessage.subject = @"博客園-FlyElephant";
myMessage.delegate = self;
//設(shè)置郵件內(nèi)容
NSDictionary *plainPart = [NSDictionary dictionaryWithObjectsAndKeys:@"text/plain; charset=UTF-8",kSKPSMTPPartContentTypeKey,
@"做一個(gè)簡(jiǎn)簡(jiǎn)單單,快快樂(lè)樂(lè)的程序員~keso",kSKPSMTPPartMessageKey,@"8bit",kSKPSMTPPartContentTransferEncodingKey,nil];
myMessage.parts = [NSArray arrayWithObjects:plainPart,nil];
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
[myMessage send];
});
④設(shè)置發(fā)送之后的處理:
- (void)messageSent:(SKPSMTPMessage *)message
{
NSLog(@"恭喜,郵件發(fā)送成功");
}
- (void)messageFailed:(SKPSMTPMessage *)message error:(NSError *)error
{
NSLog(@"不好意思,郵件發(fā)送失敗");
}
使用時(shí)候要注意兩點(diǎn):
使用前需要需要注意一下5點(diǎn):
1. 郵件主題為中文時(shí),KPSMTPMessage.m文件中的sendParts方法中,需要修改 NSDatamessageData = [message dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES] 為NSData messageData = [message dataUsingEncoding:NSUTF8StringEncoding allowLossyConversion:YES], 否則會(huì)出現(xiàn)中文亂碼問(wèn)題。
2. 發(fā)送方的郵箱需要開啟 SMTP 服務(wù),不然郵件無(wú)法從發(fā)送方郵箱發(fā)出。
3. 如果發(fā)送的時(shí)候報(bào)出503的code時(shí),要檢查您發(fā)送郵件的賬號(hào)密碼是否正確,這時(shí)的登陸密碼不是設(shè)置的密碼,要開啟SMTP服務(wù)器自己設(shè)置的一個(gè)授權(quán)碼的
4. 如果爆出連接三次的都連不上郵箱服務(wù)器的話那就是網(wǎng)絡(luò)有問(wèn)題的
5. gmail的郵箱是不用填授權(quán)碼的,直接填登陸密碼就好了
只要是郵箱賬號(hào)密碼正確,且開啟SMTP服務(wù),都是可以實(shí)現(xiàn)發(fā)送郵件功能的,有問(wèn)題的可以留言的,謝謝