Pokročilá správa e‑mailových zpráv
Sledovat průběh konverze dokumentu
Aspose.Email poskytuje možnost sledovat průběh konverze dokumentu. K tomu API poskytuje SaveOptions.CustomProgressHandler. který představuje metodu zpracovávající události postupu. Typy událostí postupu jsou reprezentovány ProgressEventType enumerace. The ProgressEventType enumerace má následující členy.
- MimeStructureCreated: Tato událost informuje, že MIME struktura byla vytvořena.
- MimePartSaved: Tato událost informuje, že uložení jedné MIME části bylo dokončeno.
- SavedToStream: Tato událost informuje, že všechny MIME části jsou uloženy do proudu.
Následující ukázkový kód demonstruje použití SaveOptions.CustomProgressHandler a ProgressEventType enumerace sleduje průběh konverze dokumentu.
// 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);
Následuje kód pro vlastní třídu použitou v předchozím ukázkovém kódu.
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;
}
}
Vykreslit hyperodkazy s vlastními styly
Někdy můžete potřebovat výstup hypertextových odkazů s určitým stylem podle požadavků vaší aplikace. K tomu Aspose.Email poskytuje HyperlinkRenderingCallback. Můžete předat HyperlinkRenderingCallback jako parametr MailMessage.GetHtmlBodyText.
Následující úryvek kódu ukazuje, jak použít HyperlinkRenderingCallback pro výstup hyperodkazů pomocí vlastního stylu.
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;
}
Zobrazit informace ve vlastní posloupnosti v MHTML souborech
Aspose.Email poskytuje MhtSaveOptions.RenderingHeaders vlastnost, která vrací seznam hlaviček pro vykreslení. Hlavičky můžete přidat pomocí MhtTemplateName třída. Pořadí, ve kterém jsou hlavičky přidány, určuje pořadí, ve kterém jsou informace zobrazeny.
Následující obrázek porovnává tři výstupy vygenerované ukázkovým kódem.

Následující úryvek kódu demonstruje použití MhtSaveOptions.RenderingHeaders vlastnost pro nastavení pořadí, ve kterém jsou informace zobrazeny ve výstupních souborech MHTML.
// 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);
Zobrazit volitelné účastníky v MHT souborech
Při práci s formátem MHT můžete v hlavičce kalendářních událostí zobrazit nebo skrýt informace o volitelných účastnících. Pro nastavení MhtSaveOptions pro práci s MHT soubory je nutné pochopit, jak MhtFormatOptions.RenderCalendarEvent a MhtFormatOptions.WriteHeader parametry umožňují přizpůsobení výstupu dle vašich potřeb, zejména při správě zobrazení volitelných účastníků.
-
MhtFormatOptions.RenderCalendarEvent: Tento parametr řídí, zda jsou podrobnosti kalendářních událostí vykresleny v souboru MHT. Nastavením této volby zajistíte, že výstup bude obsahovat komplexní informace o událostech, včetně detailů účastníků. To je nezbytné pro poskytnutí úplné dokumentace kalendářních událostí.
-
MhtFormatOptions.WriteHeader: Tento parametr určuje, zda jsou hlavičky obsahující metadata, jako je předmět, datum a informace o účastnících (včetně volitelných účastníků, pokud jsou nastaveny), zapisovány do souboru MHT. Povolením této volby se zajišťuje, že kontextově relevantní informace doprovázejí vaši zprávu, což zvyšuje srozumitelnost.
Níže uvedený ukázkový kód demonstruje, jak použít funkci zobrazit volitelné účastníky při ukládání msg ve formátu mhtml:
MhtSaveOptions options = new MhtSaveOptions()
{
MhtFormatOptions = MhtFormatOptions.RenderCalendarEvent | MhtFormatOptions.WriteHeader
};
MailMessage eml = MailMessage.Load(fileName);
eml.Save(fileName + ".mhtml", options);
Pokud potřebujete vyloučit informace o volitelných účastnících z MHT souboru, jednoduše před uložením vymažte šablonu formátu pro OptionalAttendees:
//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);
Uložit všechny hlavičky v MHTML
The MhtSaveOptions.SaveAllHeaders vlastnost třídy MhtSaveOptions třída určuje, zda je potřeba uložit všechny hlavičky do výstupního mhtml nebo ne. Následující úryvek kódu ukazuje, jak uložit všechny hlavičky mhtml souboru:
var eml = MailMessage.Load("message.eml");
var sopt = SaveOptions.DefaultMhtml;
sopt.SaveAllHeaders = true;
eml.Save("message.mhtml", sopt);
Zpracování odražených zpráv
Je velmi běžné, že zpráva odeslaná příjemci může být odražena z jakéhokoli důvodu, například kvůli neplatné adrese příjemce. API Aspose.Email má schopnost takovou zprávu zpracovat a zkontrolovat, zda se jedná o odražený e‑mail nebo běžnou e‑mailovou zprávu. The Zkontrolovat odrazy metoda třídy MailMessage třída vrátí platný výsledek, pokud je e‑mailová zpráva odražený e‑mail. Tento článek ukazuje použití BounceResult třída, která poskytuje možnost zkontrolovat, zda je zpráva odražený e‑mail. Dále poskytuje podrobné informace o příjemcích, provedené akci a důvodu oznámení. Následující úryvek kódu ukazuje, jak zpracovat odražené zprávy.
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();
Bayesův spamový analyzátor
Aspose.Email poskytuje filtrování e‑mailů pomocí bayesovské analýzy spamu. Poskytuje SpamAnalyzer třída pro tento účel. Tento článek ukazuje, jak natrénovat filtr k rozlišení spamu a běžných e‑mailů na základě databáze slov.
Pracovní postup se skládá ze dvou kroků. Nejprve se filtr natrénuje na sadě běžných ("ham") a spamových zpráv s TrainFilter metody a výsledná databáze slov je uložena s SaveDatabase. Pak je databáze načtena do SpamAnalyzer a Test metoda vrací pravděpodobnost (od 0 do 1), že je zpráva 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})");
}
Získat úvod a závěr z EML zpráv
E‑mailová zpráva může obsahovat skryté informace jako prostý text před tělem zprávy (tzv. úvod) nebo po těle (tzv. závěr). Obvykle se jedná o doplňující informace nebo kontext pro příjemce před nebo po přečtení hlavního obsahu e‑mailu. Tyto informace můžete získat pomocí MailMessage.Preamble nebo/a MailMessage.Epilogue vlastnosti příslušně.
Obě vlastnosti jsou typu string a jsou čteno/zapisovatelné, takže je lze také použít k nastavení úvodu a zakončení zprávy, kterou komponujete. Následující úryvek kódu ukazuje, jak získat texty úvodu a zakončení:
var eml = MailMessage.Load("message.eml");
// Gets a preamble text
Console.WriteLine("Preamble: " + eml.Preamble);
// Gets an epilogue text
Console.WriteLine("Epilogue: " + eml.Epilogue);
Sledování e‑mailů pomocí MDN a doručenek o přečtení
Aspose.Email API poskytuje podporu sledování e‑mailů pomocí Message Disposition Notification (MDN). Toho se dosáhne požadováním doručenek o přečtení a vytvořením potřebných informací. The MailMessage.ReadReceiptTo vlastnost získává nebo nastavuje adresy potvrzení o přečtení. Jedná se o MailAddressCollection, takže jediná adresa může být přiřazena jako řetězec, zatímco několik adres může být přidáno do kolekce. CreateReadReceipt metoda vytváří potvrzení o přečtení pro přijatou zprávu a MapiMessage.ReadReceiptRequested vlastnost získává nebo nastavuje, zda je pro Outlook zprávu požadováno potvrzení o přečtení. Následující úryvek kódu ukazuje, jak sledovat e‑mail pomocí 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);