在ios端mono開發中,發送郵件可以選擇調用ios原生email程序。有兩種方式實現這種功能,一是程序跳轉到ipad中email程序,另外一種是將發送郵件的界面在自己應用裡彈出。
首先第一種方式的代碼:
sendEmail =
這種方式會直接打開ipad本地email程序,但這種方式有個缺點是無法傳送附件,並且會離開當前應用。
第二種方式,是可以發送附件並且可以在本應用中進行,mono中已經有封裝好的類MFMailComposeViewController去調用。
如果你ipad未設置郵箱賬戶,或者你的郵箱賬戶在設置裡未顯示激活狀態,則直接彈出此窗體會報錯。所以在調用代碼的時候,要先判斷MFMailComposeViewController.CanSendMail是否為true,如果為false的話,可以通過用第一種方式把設置郵箱賬戶的界面彈出來。在發送的時候,通過讀取保存在xml中的收件人信息,設置本次收件人的地址,這樣用戶就不需要每次都填寫收件人了。具體代碼如下:
SendEmail( subject, (!= = MailComposeDelegate(); mf.SetSubject(subject); 獲取上次發送郵件後保存在xml中的收件人 XmlDocument xmlDoct = xmlpath = System.IO.Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Personal), (xmlDoct != = xmlDoct.SelectSingleNode( (xmlNodeContinue != strReceiver =)); ;, ); 設置附件=, subject + .PresentModalViewController(mf, sendEmail =
這時候點擊發送或者取消,將會觸發郵件完成事件,在完成的時候,通過遞歸遍歷MFMailComposeViewController 中的控件(均繼承自UIView),找到收件人的UITextField,保存收件人的地址到xml。
遞歸遍歷代碼:
strReceiver = (view ((view UITextField).Text.Contains(= (view (view.Subviews.GetCount() > (UIView subView
保存收件人並響應完成發送具體事件的操作實現代碼如下:
(result == (!= xmlpath = System.IO.Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Personal), (xmlDoct != = xmlDoct.SelectSingleNode( (xmlNodeContinue != = message = flag = = = = += = = = (! controller.DismissModalViewControllerAnimated(
另外在mono中如果想讀取和修改xml,不能講xml文件放在程序目錄文件夾裡面,要把它copy到系統個人文件夾下面,應該是蘋果權限控制的比較死的原因。具體操作代碼如下:每次程序啟動的時候會執行檢測文件是否存在,不存在則拷貝到personal文件夾下面。
SystemSetPath=System.IO.Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Personal),(!
本次xml的結構如下:
<?xml version= encoding= ?> <Configuration> <MailReceiver></MailReceiver> </Configuration>
另外,附件(html格式)發送到qq郵箱,預覽時會亂碼!在大神(博客地址)的幫助下,解決了這個問題!解決方案如下:
喜歡這篇文章就推薦下吧!您的支持是我繼續的最大動力!