mailkit是net下免費開源的郵箱類庫,其github位址為:
一般情況下,mailkit都工作的很好,但可能是姿勢不對,在傳送附件時,只要附件名為中文名,接收方接收到的附件名必然是亂碼或者tcmime.xx.xx.xx.bin 這種完全不明覺厲的東東(具體會亂碼還是顯示tcmime跟檔名長度有關),作為對於郵件協議不明覺厲,僅僅只是想要發封郵件的使用方,對此完全措手無策,幸好萬能的網際網路已經有了這個問題的解決方案,所以此處對傳送郵件及附件這個過程進行了封裝並予以記錄
對於附件,此處定義了 attachmentinfo 來作為附件的載體類,其支援兩種方式進行附件上傳:byte以及stream,具體的使用例子如下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()
}}
最後,如果要支援抄送和密送,那麼只需要修改下上面的封裝**,支援cc以及bcc即可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);
郵件的傳送
問題描述 當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...
郵件傳送的原理
概述 電子郵件是網際網路上使用得非常多的一種應用,它可以非常方便的使相隔很遠的人進行通訊。它主要的特點就是操作簡單,快捷。當你傳送一封郵件的時候,它首先會傳送到收件人的郵件伺服器上,並放入收件人的信箱中。如果你在某乙個郵件伺服器提供商那裡申請了乙個郵箱賬號,那麼你在這個郵件伺服器上面就有乙個電子信箱...