Manajemen Lanjutan Pesan Email
Lacak Progres Konversi Dokumen
Aspose.Email menyediakan fasilitas untuk melacak progres konversi dokumen. Untuk ini, API menyediakan SaveOptions.CustomProgressHandler. yang mewakili metode yang menangani acara kemajuan. Tipe acara kemajuan diwakili oleh ProgressEventType enumerasi. The ProgressEventType enumerasi memiliki anggota-anggota berikut.
- MimeStructureCreated: Event ini memberi tahu bahwa struktur mime telah dibuat.
- MimePartSaved: Event ini memberi tahu bahwa penyimpanan satu bagian mime telah selesai.
- SavedToStream: Event ini memberi tahu bahwa semua bagian mime telah disimpan ke stream.
Kode contoh berikut menunjukkan penggunaan SaveOptions.CustomProgressHandler dan ProgressEventType enumerasi untuk melacak kemajuan konversi dokumen.
// The path to the File directory.
string dataDir = RunExamples.GetDataDir_Email();
var fileName = dataDir + "test.eml";
MailMessage msg = MailMessage.Load(fileName);
MemoryStream ms = new MemoryStream();
EmlSaveOptions opt = new EmlSaveOptions(MailMessageSaveType.EmlFormat);
opt.CustomProgressHandler = new ConversionProgressEventHandler(ShowEmlConversionProgress);
msg.Save(ms, opt);
Berikut ini adalah kode untuk kelas khusus yang digunakan dalam contoh kode di atas.
private static void ShowEmlConversionProgress(ProgressEventHandlerInfo info)
{
int total;
int saved;
switch (info.EventType)
{
case ProgressEventType.MimeStructureCreated:
total = info.TotalMimePartCount;
saved = info.SavedMimePartCount;
Console.WriteLine("MimeStructureCreated - TotalMimePartCount: " + total);
Console.WriteLine("MimeStructureCreated - SavedMimePartCount: " + saved);
break;
case ProgressEventType.MimePartSaved:
total = info.TotalMimePartCount;
saved = info.SavedMimePartCount;
Console.WriteLine("MimePartSaved - TotalMimePartCount: " + total);
Console.WriteLine("MimePartSaved - SavedMimePartCount: " + saved);
break;
case ProgressEventType.SavedToStream:
total = info.TotalMimePartCount;
saved = info.SavedMimePartCount;
Console.WriteLine("SavedToStream - TotalMimePartCount: " + total);
Console.WriteLine("SavedToStream - SavedMimePartCount: " + saved);
break;
}
}
Render Hyperlink dengan Gaya Kustom
Mungkin ada saat-saat ketika Anda perlu menampilkan hyperlink dengan gaya tertentu berdasarkan kebutuhan aplikasi Anda. Untuk itu, Aspose.Email menyediakan HyperlinkRenderingCallback. Anda dapat melewatkan HyperlinkRenderingCallback sebagai parameter dari MailMessage.GetHtmlBodyText.
Potongan kode berikut menunjukkan cara menggunakan HyperlinkRenderingCallback untuk menampilkan hyperlink menggunakan gaya khusus Anda.
public static void Run()
{
string dataDir = RunExamples.GetDataDir_Email();
var fileName = dataDir + "LinksSample.eml";
MailMessage msg = MailMessage.Load(fileName);
Console.WriteLine(msg.GetHtmlBodyText(RenderHyperlinkWithHref));
Console.WriteLine(msg.GetHtmlBodyText(RenderHyperlinkWithoutHref));
}
private static string RenderHyperlinkWithHref(string source)
{
int start = source.IndexOf("href=\"") + "href=\"".Length;
int end = source.IndexOf("\"", start + "href=\"".Length);
string href = source.Substring(start, end - start);
start = source.IndexOf(">") + 1;
end = source.IndexOf("<", start);
string text = source.Substring(start, end - start);
string link = string.Format("{0}<{1}>", text, href);
return link;
}
private static string RenderHyperlinkWithoutHref(string source)
{
int start = source.IndexOf(">") + 1;
int end = source.IndexOf("<", start);
string text = source.Substring(start, end - start);
return text;
}
Tampilkan Informasi dalam Urutan Kustom pada File MHTML
Aspose.Email menyediakan MhtSaveOptions.RenderingHeaders properti yang mengembalikan daftar header untuk rendering. Anda dapat menambahkan header dengan menggunakan MhtTemplateName kelas. Urutan penambahan header menentukan urutan tampilan informasi.
Gambar berikut membandingkan tiga output yang dihasilkan oleh kode contoh.

Cuplikan kode berikut mendemonstrasikan penggunaan MhtSaveOptions.RenderingHeaders properti untuk mengatur urutan tampilan informasi dalam file MHTML output.
// The path to the File directory.
string dataDir = RunExamples.GetDataDir_Email();
MailMessage eml = MailMessage.Load(dataDir + "Attachments.eml");
MhtSaveOptions opt = SaveOptions.DefaultMhtml;
eml.Save(dataDir + "CustomOrderOfInformationInMHTML_1.mhtml", opt);
opt.RenderingHeaders.Add(MhtTemplateName.From);
opt.RenderingHeaders.Add(MhtTemplateName.Subject);
opt.RenderingHeaders.Add(MhtTemplateName.To);
opt.RenderingHeaders.Add(MhtTemplateName.Sent);
eml.Save(dataDir + "CustomOrderOfInformationInMHTML_2.mhtml", opt);
opt.RenderingHeaders.Clear();
opt.RenderingHeaders.Add(MhtTemplateName.Attachments);
opt.RenderingHeaders.Add(MhtTemplateName.Cc);
opt.RenderingHeaders.Add(MhtTemplateName.Subject);
eml.Save(dataDir + "CustomOrderOfInformationInMHTML_3.mhtml", opt);
Tampilkan Peserta Opsional dalam File MHT
Saat bekerja dengan format MHT, Anda dapat menampilkan atau menyembunyikan informasi tentang peserta opsional di header acara kalender. Untuk mengonfigurasi MhtSaveOptions untuk penanganan file MHT, Anda perlu memahami cara MhtFormatOptions.RenderCalendarEvent dan MhtFormatOptions.WriteHeader parameter bekerja dalam menyesuaikan output sesuai kebutuhan Anda, terutama saat mengelola tampilan peserta opsional.
-
MhtFormatOptions.RenderCalendarEvent: Parameter ini mengontrol apakah detail acara kalender dirender dalam file MHT. Dengan mengatur opsi ini, Anda memastikan bahwa informasi acara yang komprehensif, termasuk detail peserta, disertakan dalam output. Hal ini penting untuk menyediakan dokumentasi lengkap acara kalender.
-
MhtFormatOptions.WriteHeader: Parameter ini menentukan apakah header yang berisi metadata seperti subjek, tanggal, dan informasi peserta (termasuk peserta opsional, bila dikonfigurasi) ditulis ke file MHT. Mengaktifkan opsi ini memastikan bahwa informasi yang relevan secara konteks menyertai pesan Anda, meningkatkan kejelasan.
Contoh kode di bawah menunjukkan cara menggunakan fitur tampilkan peserta opsional saat menyimpan msg dalam format mhtml:
MhtSaveOptions options = new MhtSaveOptions()
{
MhtFormatOptions = MhtFormatOptions.RenderCalendarEvent | MhtFormatOptions.WriteHeader
};
MailMessage eml = MailMessage.Load(fileName);
eml.Save(fileName + ".mhtml", options);
Jika Anda perlu mengecualikan informasi tentang peserta opsional dari file MHT, cukup kosongkan templat format untuk OptionalAttendees sebelum menyimpan:
//if you need to skip OptionalAttendees in mhtml file you can clear format template for OptionalAttendees
options.FormatTemplates[MhtTemplateName.OptionalAttendees] = "";
msg.Save(fileName + "2.mhtml", options);
Simpan Semua Header dalam MHTML
The MhtSaveOptions.SaveAllHeaders properti dari MhtSaveOptions kelas menentukan apakah perlu menyimpan semua header dalam output mhtml atau tidak. Potongan kode berikut menunjukkan cara menyimpan semua header dari file mhtml:
var eml = MailMessage.Load("message.eml");
var sopt = SaveOptions.DefaultMhtml;
sopt.SaveAllHeaders = true;
eml.Save("message.mhtml", sopt);
Memproses Pesan yang Bounce
Sangat umum bahwa pesan yang dikirim ke penerima dapat memantul karena alasan apapun seperti alamat penerima yang tidak valid. API Aspose.Email memiliki kemampuan untuk memproses pesan semacam itu untuk memeriksa apakah itu email yang bounce atau pesan email biasa. The PeriksaBounced metode dari MailMessage kelas mengembalikan hasil valid jika pesan email adalah email yang memantul. Artikel ini menunjukkan penggunaan BounceResult kelas yang menyediakan kemampuan memeriksa apakah sebuah pesan adalah email yang memantul (bounced). Selain itu memberikan informasi terperinci tentang penerima, tindakan yang diambil, dan alasan notifikasi. Potongan kode berikut menunjukkan cara memproses pesan yang memantul.
string fileName = RunExamples.GetDataDir_Email() + "failed1.msg";
MailMessage mail = MailMessage.Load(fileName);
BounceResult result = mail.CheckBounced();
Console.WriteLine(fileName);
Console.WriteLine("IsBounced : " + result.IsBounced);
Console.WriteLine("Action : " + result.Action);
Console.WriteLine("Recipient : " + result.Recipient);
Console.WriteLine();
Console.WriteLine("Reason : " + result.Reason);
Console.WriteLine("Status : " + result.Status);
Console.WriteLine("OriginalMessage ToAddress 1: " + result.OriginalMessage.To[0].Address);
Console.WriteLine();
Analisis Spam Bayesian
Aspose.Email menyediakan penyaringan email menggunakan analis spam Bayesian. Ini menyediakan SpamAnalyzer kelas untuk tujuan ini. Artikel ini menunjukkan cara melatih filter untuk membedakan antara email spam dan email reguler berdasarkan basis data kata.
Alur kerja terdiri dari dua langkah. Pertama, filter dilatih pada sekumpulan pesan reguler ("ham") dan spam dengan TrainFilter metode, dan database kata yang dihasilkan disimpan dengan SaveDatabase. Kemudian database dimuat ke dalam SpamAnalyzer dan Uji metode mengembalikan probabilitas (dari 0 hingga 1) suatu pesan menjadi spam.
string hamFolder = RunExamples.GetDataDir_Email() + "/hamFolder";
string spamFolder = RunExamples.GetDataDir_Email() + "/Spam";
string testFolder = RunExamples.GetDataDir_Email();
string dataBaseFile = RunExamples.GetDataDir_Email() + "SpamFilterDatabase.txt";
// Train the filter and save the words database
SpamAnalyzer teacher = new SpamAnalyzer();
foreach (string file in Directory.GetFiles(hamFolder, "*.eml"))
{
// false marks the message as a regular one
teacher.TrainFilter(MailMessage.Load(file), false);
}
foreach (string file in Directory.GetFiles(spamFolder, "*.eml"))
{
// true marks the message as spam
teacher.TrainFilter(MailMessage.Load(file), true);
}
teacher.SaveDatabase(dataBaseFile);
// Analyze the test messages using the created database
SpamAnalyzer analyzer = new SpamAnalyzer(dataBaseFile);
foreach (string file in Directory.GetFiles(testFolder, "*.eml"))
{
MailMessage msg = MailMessage.Load(file);
Console.WriteLine(msg.Subject);
double probability = analyzer.Test(msg);
Console.WriteLine(probability > 0.5
? $"Spam (probability: {probability:P})"
: $"Not spam (probability: {probability:P})");
}
Dapatkan Preambule dan Epilog dari Pesan EML
Sebuah pesan email dapat berisi informasi tersembunyi sebagai teks polos sebelum isi pesan (misalnya preambule) atau setelah isi (misalnya epilog). Biasanya ini merupakan informasi tambahan atau konteks bagi penerima sebelum atau setelah mereka membaca konten utama email. Anda dapat memperoleh informasi ini menggunakan MailMessage.Preamble atau/dan MailMessage.Epilogue properti masing-masing.
Kedua properti bertipe string dan dapat dibaca/ditulis, sehingga juga dapat digunakan untuk mengatur pembukaan dan penutup pesan yang Anda susun. Potongan kode berikut menunjukkan cara memperoleh teks pembukaan dan penutup:
var eml = MailMessage.Load("message.eml");
// Gets a preamble text
Console.WriteLine("Preamble: " + eml.Preamble);
// Gets an epilogue text
Console.WriteLine("Epilogue: " + eml.Epilogue);
Pelacakan Email menggunakan MDN dan Receipt Baca
API Aspose.Email menyediakan dukungan pelacakan email menggunakan Message Disposition Notification (MDN). Hal ini dicapai dengan meminta receipt baca dan membuat informasi yang diperlukan. The MailMessage.ReadReceiptTo mendapatkan atau mengatur alamat tanda terima baca. Ini adalah MailAddressCollection, sehingga satu alamat dapat ditetapkan sebagai string, sementara beberapa alamat dapat ditambahkan ke koleksi. Properti CreateReadReceipt metode membangun tanda terima baca untuk pesan yang diterima, dan MapiMessage.ReadReceiptRequested properti mendapatkan atau mengatur apakah tanda terima baca diminta untuk pesan Outlook. Potongan kode berikut menunjukkan cara melacak email menggunakan Aspose.Email API.
var client = new SmtpClient("smtp.server.com", 587, "username", "password");
// Send a message with the requested read receipt
var mailMessage = new MailMessage("from@domain.com", "to@domain.com", "test MDN", "This is a test message with read receipt requested");
// Request the read receipt. A single address can be assigned as a string
mailMessage.ReadReceiptTo = "from@domain.com";
client.Send(mailMessage);
// Add multiple ReadReceiptTo addresses and send the message
mailMessage = new MailMessage("from@domain.com", "to@domain.com", "test MDN", "This is a test message with read receipt requested");
var addressCollection = new MailAddressCollection();
addressCollection.Add("from@domain.com");
addressCollection.Add("another@domain.com");
mailMessage.ReadReceiptTo = addressCollection;
client.Send(mailMessage);
// On the recipient side: check the request, then create and send the read receipt
var emlMDN = MailMessage.Load("received.eml");
if (emlMDN.ReadReceiptTo.Count > 0)
{
client.Send(emlMDN.CreateReadReceipt("to@domain.com", null));
}
// Create a MapiMessage with a requested read receipt
var mapiMessage = new MapiMessage("from@domain.com", "to@domain.com", "test MDN", "This is a read requested mapiMessage", OutlookMessageFormat.Unicode);
mapiMessage.ReadReceiptRequested = true;
// Create a MailMessage with a requested read receipt and convert it to MapiMessage
mailMessage = new MailMessage("from@domain.com", "to@domain.com", "test MDN", "This is a test message with read receipt requested");
mailMessage.ReadReceiptTo = "from@domain.com";
mapiMessage = MapiMessage.FromMailMessage(mailMessage, MapiConversionOptions.UnicodeFormat);