前情提要
筆者公司其他同仁負責的專案有一個需求是,主動幫使用者的信件內容讀取,依照附件檔案中的檔案內容做不同的事情,而不用人工的方式到系統中上傳該附件檔案。這時候就該使出Reader系列文章
的時候了,前置作業可能要靠其他Infra
同仁設定好後將信件自動轉成EML檔案格式,放置於網路空間上,由EML Reader
會去讀取該路經中的EML
檔案,並做對應的事,該篇就以讀取EML
檔案格式內容為主作呈現。
內容
筆者找到套件名為https://github.com/Sicos1977/MSGReader,為示範,筆者會使用https://www.phpclasses.org/browse/file/14672.html此網址中的eml檔案。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
| void Main() { var fileInfo = new FileInfo(@"{path}\Downloads\test_sample_message.eml"); var eml = MsgReader.Mime.Message.Load(fileInfo);
if (eml.Headers != null) { if (eml.Headers.To != null) { foreach (var recipient in eml.Headers.To) { var to = recipient.Address; to.Dump(); } } }
var subject = eml.Headers.Subject; subject.Dump();
if (eml.TextBody != null) { var textBody = System.Text.Encoding.UTF8.GetString(eml.TextBody.Body); textBody.Dump(); } if (eml.HtmlBody != null) { var htmlBody = System.Text.Encoding.UTF8.GetString(eml.HtmlBody.Body); htmlBody.Dump(); } foreach (var attach in eml.Attachments) { $"AttachFileName: {attach.FileName}".Dump(); var filePath = @$"D:\{attach.FileName}"; using var fs = new FileStream(filePath, FileMode.Create); attach.Save(fs); } }
|
讀取的結果如下
也可以在指定的D槽中看到附件檔案
結論
依照套件github
上面的說明範例code
,滿簡單易懂的,照著刻應該都做得出來,接著讀取解析attach
檔案內容後,接著做對應的商業邏輯,完美。
參考