在ios開發中,有時候我們會需要用到郵件傳送的功能。比如,接收使用者反饋和程式崩潰通知等等。其實這個功能是很常用的,因為我目前就有傳送郵件的開發需求,所以順便整理下ios傳送郵件的方法。
ios原生自帶有兩種方法傳送郵件的方法,另一種是使用第三方庫:
1)openurl(原生)
——使用者體驗較差,程式會進入後台,跳轉至郵件傳送介面。
2)mfmailcomposeviewcontroller(原生)
——不會進入後台,使用模態彈出郵件傳送檢視。
3)skpsmtpmessage( )
——你可以不需要告知使用者將要進行郵件傳送的事情,我在想這個是不是不符合蘋果的理論。當然你也可以在傳送之前弄個彈出框告知使用者,並讓使用者選擇是否傳送。
以下**均在真機(ios8.0)進行測試,並通過測試。
一、使用openurl傳送郵件:
nsmutablestring *mailurl = [[nsmutablestring alloc] init];新增收件人:
新增抄送人:
view code
新增密送人:
view code
新增郵件主題和郵件內容:
效果圖:
二、使用mfmailcomposeviewcontroller傳送郵件
使用前注意:
1)專案需要匯入框架:messageui.framework
2)使用的controlelr裡匯入標頭檔案:#import
獲取使用者是否設定了郵件賬戶:
if ([mfmailcomposeviewcontroller cansendmail])
sendemailaction方法**:
- (void)sendemailaction
mfmailcomposeviewcontrollerdelegate的**方法:
- (void)mailcomposecontroller:(mfmailcomposeviewcontroller *)controller程式執行效果圖:didfinishwithresult:(mfmailcomposeresult)result
error:(nserror *)error //關閉郵件傳送檢視 [self dismissviewcontrolleranimated:yes completion:nil]; }
三、 使用第三方庫skpsmtpmessage傳送郵件
使用前注意:
2)匯入類#import "skpsmtpmessage.h"、#import "nsdata+base64additions.h"
設定基本引數:
skpsmtpmessage *mail = [[skpsmtpmessage alloc] init];設定郵件正文內容:[mail setsubject:@"我是主題"]; //設定郵件主題
[mail settoemail:@"填你們自己的@qq.com"]; //目標郵箱 [mail setfromemail:@"填你們自己的@qq.com"]; //傳送者郵箱 [mail setrelayhost:@"smtp.qq.com"]; //傳送郵件**伺服器 [mail setrequiresauth:yes]; [mail setlogin:@"填你們自己的@qq.com"]; //傳送者郵箱賬號 [mail setpass:@"填你們自己的"]; //傳送者郵箱密碼 [mail setwantssecure:yes]; //需要加密 [mail setdelegate:self];
nsstring *content = [nsstring stringwithcstring:"測試內容" encoding:nsutf8stringencoding];新增附件(以下**可在skpsmtpmessage庫的dmeo裡找到):nsdictionary *plainpart = @;
nsstring *vcfpath = [[nsbundle mainbundle] pathforresource:@"test"oftype:@"vcf"];執行傳送郵件**:nsdata *vcfdata = [nsdata datawithcontentsoffile:vcfpath]; nsdictionary *vcfpart = [nsdictionary dictionarywithobjectsandkeys:@"text/directory;\r\n\tx-unix-mode=0644;\r\n\tname=\"test.vcf\"",kskpsmtppartcontenttypekey, @"attachment;\r\n\tfilename=\"test.vcf\"",kskpsmtppartcontentdispositionkey,[vcfdata encodebase64fordata],kskpsmtppartmessagekey,@"base64",kskpsmtppartcontenttransferencodingkey,nil];
[mail setparts:@[plainpart, vcfpart]]; // 郵件首部字段、郵件內容格式和傳輸編碼skpsmtpmessage**,可以獲知成功/失敗進行後續步驟處理:[mail send];
- (void)messagesent:(skpsmtpmessage *)message效果圖:- (void)messagefailed:(skpsmtpmessage *)message error:(nserror *)error
什麼效果圖?沒有效果圖,只因任性。
這裡採取的是不通知使用者傳送郵件,所以沒效果圖。
小結:本來第三方庫那個我是不想寫出來的,因為總感覺不安全,不要問我為什麼,男人的直覺?其實是**太難看懂了,可能是我技術太菜了。
說法二ios系統框架提供的兩種傳送email的方法:openurl 和 mfmailcomposeviewcontroller。借助這兩個方法,我們可以輕鬆的在應用裡加入如使用者反饋這類需要傳送郵件的功能。
1.openurl
使用openurl呼叫系統郵箱客戶端是我們在ios3.0以下實現發郵件功能的主要手段。我們可以通過設定url裡的相關引數來指定郵件的內容,不過其缺點很明顯,這樣的過程會導致程式暫時退出。下面是使用openurl來發郵件的乙個小例子:
#pragma mark - 使用系統郵件客戶端傳送郵件
mfmailcomposeviewcontroller是在ios3.0新增的乙個介面,它在messageui.framework中。通過呼叫mfmailcomposeviewcontroller,可以把郵件傳送視窗整合到我們的應用裡,傳送郵件就不需要退出程式了。mfmailcomposeviewcontroller的使用方法:
//
// viewcontroller.h
// maildemo
//
// created by luoyl on 12-4-4.
//
#import
#import
@inte***ce viewcontroller : uiviewcontroller
@end
#pragma mark - 在應用內傳送郵件
//啟用郵件功能
if (![mailclass cansendmail])
[self displaymailpicker];
}
//調出郵件傳送視窗
- (void)displaymailpicker
#pragma mark - 實現 mfmailcomposeviewcontrollerdelegate
- (void)mailcomposecontroller:(mfmailcomposeviewcontroller *)controller didfinishwithresult:(mfmailcomposeresult)result error:(nserror *)error
[self alertwithmessage:msg];
}
c 傳送Email方法整理
emailinfotb private int ms paranums email的主題的引數個數 private string ms subject email的主題 private string ms from email的傳送者,這裡填寫公司管理者郵箱 private string ms to...
linux shell 傳送email 郵件
方法一 簡單郵件傳送 echo hello world mail s subject t yanggang ithomer.com,yanggang 2050 163.com a from 463103470 qq.com 效果截圖 方法二 文字格式傳送郵件 python view plain co...
php傳送郵件email
header content type text html charset utf 8 include class.phpmailer.php include class.smtp.php mail new phpmailer mail issmtp 設定使用smtp伺服器傳送 mail host ...