ניהול מתקדם של הודעות דוא"ל

מעקב אחרי התקדמות המרת מסמכים

Aspose.Email מספקת את האפשרות לעקוב אחרי התקדמות המרת המסמך. לשם כך, ה-API מספק SaveOptions.CustomProgressHandler. שמציינת את המתודה שמטפלת באירועי ההתקדמות. סוגי אירועי ההתקדמות מיוצגים על ידי ProgressEventType enumeration. ה ProgressEventType enumeration כולל את החברים הבאים.

  • MimeStructureCreated: אירוע זה מודיע שמבנה ה-MIME נוצר.
  • MimePartSaved: אירוע זה מודיע שהשמירה של חלק MIME אחד הושלמה.
  • SavedToStream: אירוע זה מודיע שכל חלקי ה-MIME נשמרו לזרם.

קוד הדוגמה הבא מדגים את השימוש ב SaveOptions.CustomProgressHandler ו ProgressEventType enumeration שעוקב אחר התקדמות המרת המסמך.

// 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);

הקוד הבא הוא של המחלקה המותאמת שמשומשת בדוגמת הקוד שלמעלה.

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;
    }
}

הצגת קישורים עם סגנונות מותאמים

ייתכנו מצבים בהם עליך להציג קישורים עם סגנון ספציפי בהתאם לדרישות האפליקציה שלך. לשם כך, Aspose.Email מספקת HyperlinkRenderingCallback. אתה יכול להעביר את HyperlinkRenderingCallback כפרמטר של MailMessage.GetHtmlBodyText.

קטע הקוד הבא מציג כיצד להשתמש ב- HyperlinkRenderingCallback להוציא קישורים היפר-טקסט בעיצוב המותאם אישית שלך.

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;
}

הצגת מידע בסדר מותאם בקבצי MHTML

Aspose.Email מספקת MhtSaveOptions.RenderingHeaders מאפיין שמחזיר את רשימת הכותרות לעיבוד. ניתן להוסיף את הכותרות באמצעות ה‑ MhtTemplateName class. הסדר שבו מתווספות הכותרות מחליט את סדר הצגת המידע.

התמונה שלהלן משווה את שלושת הפלטים שנוצרו על ידי קוד הדוגמה.

todo:image_alt_text

קטע הקוד הבא מדגים את השימוש ב‑ MhtSaveOptions.RenderingHeaders מאפיין לקביעת הסדר שבו המידע מוצג בקבצי 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);

הצגת משתתפים אופציונליים בקבצי MHT

בעת עבודה עם פורמט MHT, ניתן להציג או להסתיר מידע על משתתפים אופציונליים בכותרת אירועי לוח השנה. כדי להגדיר MhtSaveOptions לניהול קובצי MHT, עליך להבין כיצד ה MhtFormatOptions.RenderCalendarEvent ו MhtFormatOptions.WriteHeader פרמטרים אלו פועלים להתאמת הפלט לצרכיך, במיוחד בניהול הצגת משתתפים אופציונליים.

  • MhtFormatOptions.RenderCalendarEvent: פרמטר זה קובע האם פרטי אירועי לוח השנה מוצגים בקובץ MHT. על ידי הגדרת אפשרות זו, אתה מבטיח שמידע מקיף על האירוע, כולל פרטי המשתתפים, ייכלל בפלט. זה חיוני לתיעוד מלא של אירועי לוח השנה.

  • MhtFormatOptions.WriteHeader: פרמטר זה קובע האם כותרות המכילות מטא-נתונים כגון נושא, תאריך ומידע על משתתפים (כולל משתתפים אופציונליים, כאשר מוגדרים) נכתבות לקובץ MHT. הפעלת אפשרות זו מבטיחה שמידע רלוונטי קונטקסטואלי מצורף להודעה, ומשפר את ההבנה.

דוגמת הקוד למטה מדגימה איך להשתמש בתכונת הצגת משתתפים אופציונליים בעת שמירת msg בפורמט MHTML:

MhtSaveOptions options = new MhtSaveOptions()
{
    MhtFormatOptions = MhtFormatOptions.RenderCalendarEvent | MhtFormatOptions.WriteHeader
};

MailMessage eml = MailMessage.Load(fileName);
eml.Save(fileName + ".mhtml", options);

אם יש צורך למנוע מידע על משתתפים אופציונליים מקובץ MHT, פשטי את תבנית הפורמט עבור 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);

שמור את כל הכותרות ב‑MHTML

ה MhtSaveOptions.SaveAllHeaders מאפיין של MhtSaveOptions מחלקה מגדירה האם יש צורך לשמור את כל הכותרות בפלט MHTML או לא. קטע הקוד הבא מראה כיצד לשמור את כל הכותרות של קובץ MHTML:

var eml = MailMessage.Load("message.eml");
var sopt = SaveOptions.DefaultMhtml;
sopt.SaveAllHeaders = true;
eml.Save("message.mhtml", sopt);

עיבוד הודעות קופצות

זה מאוד נפוץ שהודעה שנשלחת למקבל עשויה לחזור משיקולים שונים כגון כתובת מקבל לא חוקית. ל‑Aspose.Email API יש את היכולת לעבד הודעה כזו על מנת לבדוק האם היא הודעת דואר קפוצה או הודעת דואר רגילה. ה בדיקת הודעות קופצות שיטה של MailMessage מחלקה מחזירה תוצאה תקפה אם הודעת הדוא"ל היא הודעה שהוחזרה. מאמר זה מציג את השימוש ב BounceResult מחלקה המספקת את היכולת לבדוק אם הודעה היא דוא"ל שהוחזר. היא גם מספקת מידע מפורט על הנמענים, הפעולה שננקטה וסיבת ההתראה. קטע הקוד הבא מראה כיצד לעבד הודעות חוזרות.

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();

מנתח ספאם בייזי

Aspose.Email מספק סינון דוא"ל באמצעות מנתח ספאם בייזיאני. הוא מספק את SpamAnalyzer מחלקה למטרה זו. מאמר זה מראה כיצד לאמן את המסנן להבחין בין ספאם להודעות רגילות בהתבסס על מאגר המילים.

תהליך העבודה מורכב משני שלבים. תחילה, המסנן מאומן על קבוצת הודעות רגילות ("ham") והודעות ספאם עם ה TrainFilter מתודה, ומסד הנתונים של המילים שנוצר נשמר עם SaveDatabase. לאחר מכן מסד הנתונים נטען אל SpamAnalyzer ו‑ בדיקה מתודה מחזירה את ההסתברות (מ‑0 עד 1) שההודעה היא ספאם.

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})");
}

קבל פתיחה וסיום מחיבורי EML

הודעת דוא"ל עשויה להכיל מידע מוסתר כטקסט פשוט לפני גוף ההודעה (למשל פתיחה) או אחרי הגוף (למשל סיום). בדרך כלל מדובר במידע או הקשר נוסף לנמען לפני או אחרי קריאת התוכן העיקרי של הדוא"ל. אפשר לקבל מידע זה באמצעות MailMessage.Preamble או/ו MailMessage.Epilogue המאפיינים בהתאמה.

שני המאפיינים הם מסוג string והם קריאה/כתיבה, כך שניתן גם להשתמש בהם להגדרת הקדמה וסיום של הודעה שאתם מרכיבים. קוד הקטע הבא מציג איך לקבל את טקסטי הקדמה והסיום:

var eml = MailMessage.Load("message.eml");

// Gets a preamble text
Console.WriteLine("Preamble: " + eml.Preamble);

// Gets an epilogue text
Console.WriteLine("Epilogue: " + eml.Epilogue);

מעקב אחרי דוא"ל באמצעות MDN וקבלות קריאה

Aspose.Email API מספקת תמיכה במעקב אחרי דוא"ל באמצעות הודעת הודעה (MDN). זה מושג על ידי בקשת קבלות קריאה ויצירת המידע הדרוש. ה MailMessage.ReadReceiptTo מאפיין מקבל או מגדיר את כתובות קבלת הקבלה. זהו MailAddressCollection, כך שניתן להקצות כתובת אחת כמחרוזת, בעוד כמה כתובות ניתן להוסיף לאוסף. ה‑ CreateReadReceipt מתודה בונה קבלת קבלה עבור הודעה שהתקבלה, וה‑ MapiMessage.ReadReceiptRequested המאפיין מקבל או מגדיר האם נדרשת קבלת קבלה עבור הודעת Outlook. קוד הקטע הבא מציג כיצד לעקוב אחרי דוא"ל באמצעות 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);