mono中傳送郵件並儲存本次收件人的位址

2022-02-09 09:19:23 字數 2913 閱讀 8333

在ios端mono開發中,傳送郵件可以選擇呼叫ios原生email程式。有兩種方式實現這種功能,一是程式跳轉到ipad中email程式,另外一種是將傳送郵件的介面在自己應用裡彈出。

首先第一種方式的**:

string sendemail = "

mailto:收件人郵箱位址?cc=發件人郵箱位址&subject=主題&body=郵件內容

";

這種方式會直接開啟ipad本地email程式,但這種方式有個缺點是無法傳送附件,並且會離開當前應用。

第二種方式,是可以傳送附件並且可以在本應用中進行,mono中已經有封裝好的類mfmailcomposeviewcontroller去呼叫。

如果你ipad未設定郵箱賬戶,或者你的郵箱賬戶在設定裡未顯示啟用狀態,則直接彈出此窗體會報錯。所以在呼叫**的時候,要先判斷mfmailcomposeviewcontroller.cansendmail是否為true,如果為false的話,可以通過用第一種方式把設定郵箱賬戶的介面彈出來。在傳送的時候,通過讀取儲存在xml中的收件人資訊,設定本次收件人的位址,這樣使用者就不需要每次都填寫收件人了。具體**如下:

///

///傳送郵件

/// ///

郵件主題.

///郵件內容

protected

void sendemail(string subject, string

messagebody)

}#endregion;mf.setmessagebody(

"", true); //

設定郵件內容

#region 設定附件

nsdata data =nsdata.fromstring(messagebody, nsstringencoding.utf8);

mf.addattachmentdata(data,

@"text/html

", subject + "

.html");

#endregion

//彈出發送郵件窗體

this.presentmodalviewcontroller(mf, true

); }

else

}

這時候點選傳送或者取消,將會觸發郵件完成事件,在完成的時候,通過遞迴遍歷mfmailcomposeviewcontroller 中的控制項(均繼承自uiview),找到收件人的uitextfield,儲存收件人的位址到xml。

遞迴遍歷**:

///

設定傳送完成後的委託事件

class

mailcomposedelegate:mfmailcomposeviewcontrollerdelegate

return

; }

if (view.subviews.getcount() > 0

) }

}///傳送郵件或取消傳送後的完成事件

public

override

void

finished(mfmailcomposeviewcontroller controller, mfmailcomposeresult result, nserror error)

}

儲存收件人並響應完成傳送具體事件的操作實現**如下:

///

傳送郵件或取消傳送後的完成事件

public

override

void

finished(mfmailcomposeviewcontroller controller, mfmailcomposeresult result, nserror error) }}

}string message = string

.empty;

bool flag = false

;

switch

(result)

if (!string

.isnullorempty(message))

if(flag) }}

另外在mono中如果想讀取和修改xml,不能講xml檔案放在程式目錄資料夾裡面,要把它copy到系統個人資料夾下面,應該是蘋果許可權控制的比較死的原因。具體操作**如下:每次程式啟動的時候會執行檢測檔案是否存在,不存在則拷貝到personal資料夾下面。

string systemsetpath=system.io.path.combine(environment.getfolderpath(environment.specialfolder.personal),"

sysconfiguration.xml");

if(!system.io.file.exists(systemsetpath))

本次xml的結構如下:

<?xml version="

1.0" encoding="

utf-8

" ?>

另外,附件(html格式)傳送到qq郵箱,預覽時會亂碼!在大神(部落格位址)的幫助下,解決了這個問題!解決方案如下:

//替換為

byte messagebytes=system.text.encoding.getencoding("

gb2312

").getbytes(messagebody);

nsdata data = nsdata.fromarray(messagebytes);

C 中傳送郵件

using system using system.collections.generic using system.componentmodel using system.data using system.drawing using system.linq using system.text u...

Linux中傳送告警郵件

1.準備乙個測試郵箱賬號 如fr 163.com,作為發件人。注意 保證郵箱的pop3 smtp是開啟狀態 如下 並且開通授權碼,記下自己郵箱的授權碼。set smtp auth password 剛剛的授權碼 set smtp auth login 3.測試一下 echo test content...

springMVC中傳送郵件可傳送附件

以html傳送 bodypart bodypart new mimebodypart bodypart.setcontent content,text html charset utf 8 multipart multipart new mimemultipart multipart.addbody...