基於MailKit的傳送郵件輔助類

2021-08-20 18:51:09 字數 3852 閱讀 5312

mailkit是net下免費開源的郵箱類庫,其github位址為:

一般情況下,mailkit都工作的很好,但可能是姿勢不對,在傳送附件時,只要附件名為中文名,接收方接收到的附件名必然是亂碼或者tcmime.xx.xx.xx.bin 這種完全不明覺厲的東東(具體會亂碼還是顯示tcmime跟檔名長度有關),作為對於郵件協議不明覺厲,僅僅只是想要發封郵件的使用方,對此完全措手無策,幸好萬能的網際網路已經有了這個問題的解決方案,所以此處對傳送郵件及附件這個過程進行了封裝並予以記錄

using mailkit.net.smtp;

using mimekit;

using mimekit.text;

/// /// 基於mailkit的郵件幫助類

///

public static class emailhelper

/// /// 郵件伺服器port

///

public static int port

/// /// 郵件伺服器是否是ssl

///

public static bool usessl

/// /// 傳送郵件的賬號友善名稱

///

public static string username

/// /// 傳送郵件的賬號位址

///

public static string useraddress

/// /// 發現郵件所需的賬號密碼

///

public static string password

/// /// 傳送電子郵件,預設傳送方為///

/// 郵件主題

/// 郵件內容主題

/// 接收方資訊

/// 內容主題模式,預設textformat.text

/// 附件

/// 是否自動釋放附件所用stream

///

public static async task sendemailasync(string subject, string content, ienumerabletoaddress, textformat textformat = textformat.text, ienumerableattachments = null, bool dispose = true)

, toaddress, textformat, attachments, dispose).configureawait(false);

}/// /// 傳送電子郵件

///

/// 郵件主題

/// 郵件內容主題

/// 傳送方資訊

/// 接收方資訊

/// 內容主題模式,預設textformat.text

/// 附件

/// 是否自動釋放附件所用stream

///

public static async task sendemailasync(string subject, string content, mailboxaddress fromaddress, ienumerabletoaddress, textformat textformat = textformat.text, ienumerableattachments = null, bool dispose = true)

, toaddress, textformat, attachments, dispose).configureawait(false);

}/// /// 傳送電子郵件

///

/// 郵件主題

/// 郵件內容主題

/// 傳送方資訊

/// 接收方資訊

/// 內容主題模式,預設textformat.text

/// 附件

/// 是否自動釋放附件所用stream

///

public static async task sendemailasync(string subject, string content, ienumerablefromaddress, ienumerabletoaddress, textformat textformat = textformat.text, ienumerableattachments = null, bool dispose = true)

;mimeentity entity = body;

if (attachments != null)

;foreach (var att in attachments)

}entity = mult;

}message.body = entity;

message.date = datetime.now;

using (var client = new smtpclient())}}

}private static string converttobase64(string inputstr, encoding encoding)

private static string convertheadertobase64(string inputstr,encoding encoding)

return inputstr;}}

/// /// 附件資訊

///

public class attachmentinfo : idisposable

/// /// 檔名稱

///

public string filename

/// /// 檔案傳輸編碼方式,預設contentencoding.default

///

public contentencoding contenttransferencoding = contentencoding.default;

/// /// 檔案陣列

///

public byte data

private stream stream;

/// /// 檔案資料流,獲取資料時優先採用此部分

///

public stream stream

return this.stream;

}set

}/// /// 釋放stream

///

public void dispose()

}}

對於附件,此處定義了 attachmentinfo 來作為附件的載體類,其支援兩種方式進行附件上傳:byte以及stream,具體的使用例子如下
emailhelper.host = "smtp.exmail.qq.com";

emailhelper.port = 465;

emailhelper.usessl = true;

emailhelper.username = "你要展示的傳送方名稱";

emailhelper.password = "你的郵箱密碼";

emailhelper.useraddress = "你的郵箱位址";

var subject = "測試多個附件郵件";

var content = "just a test!";

var attachs = new list();

//從指定資料夾內讀取要傳送的附件

foreach (var file in directory.getfiles("emailattach"))

;attachs.add(att);

}await emailhelper.sendemailasync(subject, content, new mailboxaddress , attachments: attachs);

最後,如果要支援抄送和密送,那麼只需要修改下上面的封裝**,支援cc以及bcc即可

郵件的傳送

問題描述 當hr發布乙個緊急需求的時候,會向所有的員工傳送一條關於本次緊急需求詳情的郵件。嘗試解決方案 net傳送郵件 system.net.mail.mailmessage message new system.net.mail.mailmessage aa 126.com bb 126.com ...

傳送郵件的筆記

傳送郵件 1 mail函式 傳送電子郵件 1 進行 js驗證有效性 正規表示式 2 接收到的表單上傳資料 3 進行過濾 4 陣列 key value extract 5 寫入 啟用驗證碼註冊資訊 1 資料表 2 username 註冊的使用者名稱 3 password 註冊的使用者口令 4 stat...

郵件傳送的原理

概述 電子郵件是網際網路上使用得非常多的一種應用,它可以非常方便的使相隔很遠的人進行通訊。它主要的特點就是操作簡單,快捷。當你傳送一封郵件的時候,它首先會傳送到收件人的郵件伺服器上,並放入收件人的信箱中。如果你在某乙個郵件伺服器提供商那裡申請了乙個郵箱賬號,那麼你在這個郵件伺服器上面就有乙個電子信箱...