Hantera Outlook‑meddelanden

Spara e‑postmeddelanden som HTML

Aspose.Email gör det möjligt att spara e‑postresurser med relativa sökvägar vid export av meddelanden till HTML‑format. Denna funktion ger större flexibilitet i hur resurser länkas i den genererade HTML‑filen, vilket underlättar delning och visning av sparade e‑postmeddelanden på olika system. För att spara resurser med relativa sökvägar, använd HtmlSaveOptions.UseRelativePathToResources egenskapen. Standardvärdet för egenskapen är false (resurser sparas med absoluta sökvägar). När den sätts till true sparas resurser med relativa sökvägar.

HTML‑filer med relativa sökvägar är mer portabla och kan visas korrekt oavsett den hostande miljöns filstruktur. Du kan välja mellan absoluta och relativa sökvägar beroende på kraven. Du kan definiera anpassade sökvägar för resurser med hjälp av ResourceHtmlRendering händelse.

Följande kodexempel demonstrerar hur man sparar ett e‑postmeddelande med standard relativ sökväg till resurser:

var msg = MapiMessage.Load(sourceFileName);

var htmlSaveOptions = new HtmlSaveOptions
{
    ResourceRenderingMode = ResourceRenderingMode.SaveToFile,
    UseRelativePathToResources = true
};

msg.Save(Path.Combine("target_files"), htmlSaveOptions);

I detta fall kommer resurser att sparas i mappen [html filnamn]_files, på samma sökväg som .html‑filen och HTML‑filen kommer att referera till resurserna via relativa sökvägar.

Kodexemplet nedan demonstrerar hur man sparar med absolut sökväg till resurser:

var msg = MapiMessage.Load(sourceFileName);

var htmlSaveOptions = new HtmlSaveOptions
{
    ResourceRenderingMode = ResourceRenderingMode.SaveToFile,
    UseRelativePathToResources = false
};

msg.Save(Path.Combine("target_files"), htmlSaveOptions);

Som i det första fallet kommer resurser att sparas i mappen [html filnamn]_files som standard, men HTML‑filen kommer att referera till resurser med absoluta sökvägar.

Genom att använda ResourceHtmlRendering händelse kan du ange anpassade relativa eller absoluta sökvägar för resurser. När du anpassar sökvägar med ResourceHtmlRendering händelsehanterare, och eftersom UseRelativePathToResources är satt till true, bör du tilldela en relativ sökväg till PathToResourceFile egenskap för att säkerställa korrekt referens.

Följande kodexempel demonstrerar hur man anpassar relativ sökväg med hjälp av ResourceHtmlRendering‑händelsen

var msg = MapiMessage.Load(sourceFileName);

var htmlSaveOptions = new HtmlSaveOptions
{
    ResourceRenderingMode = ResourceRenderingMode.SaveToFile,
    UseRelativePathToResources = true
};

htmlSaveOptions.ResourceHtmlRendering += (o, args) =>
{
    if (o is AttachmentBase attachment)
    {
	    // Since UseRelativePathToResources = true, you should assign a relative path to the PathToResourceFile property.
        args.PathToResourceFile = $@"images\{attachment.ContentType.Name}";
    }
};

msg.Save(Path.Combine(targetPath, "A Day in the Park.html"), htmlSaveOptions);

Konvertera MSG till MIME‑meddelanden

Aspose.Email API ger möjlighet att konvertera MSG‑filer till MIME‑meddelanden med hjälp av ToMailMessage metod.

MapiMessage msg = new MapiMessage("sender@test.com","recipient1@test.com; recipient2@test.com","Test Subject","This is a body of message.");
var options = new MailConversionOptions();
options.ConvertAsTnef = true;
MailMessage mail = msg.ToMailMessage(options);

Ställ in timeout för meddelandekonvertering och -laddning

Följande funktioner gör det möjligt att sätta timeout i millisekunder för konverterings- och laddningsprocessen:

Kodexemplet nedan visar hur du anger en timeout under konvertering av ett meddelande:

var options = new MailConversionOptions();
// Set the timeout to 5 seconds
options.Timeout = 5000;

options.TimeoutReached += (object sender, EventArgs args) =>
{
    string subj = (sender as MailMessage).Subject;
	 // Set a flag indicating the timeout was reached
    isTimedOut = true;
};

var mailMessage = mapiMessage.ToMailMessage(options);

MSG‑till‑EML‑konvertering med bibehållen RTF‑kropp

Konverteringen av en MSG-fil till EML med bibehållen RTF‑kropp kan göras på två sätt:

Båda egenskaperna hämtar eller sätter ett värde som indikerar om RTF‑kroppen ska behållas i MailMessage.

Följande kodsnuttar visar hur man konverterar en MSG‑fil till EML och bevarar RTF‑kroppen:

var loadOptions = new MsgLoadOptions
{
    PreserveRtfContent = true
};

var eml = MailMessage.Load("my.msg", loadOptions);
var conversionOptions = new MailConversionOptions
{
    PreserveRtfContent = true
};

var msg = MapiMessage.Load("my.msg");

var eml = msg.ToMailMessage(conversionOptions);

Hantera Outlook‑mallfiler (.OFT)

Outlook‑mallar är mycket användbara när du vill skicka ett liknande e‑postmeddelande om och om igen. Istället för att skapa meddelandet från början varje gång, kan du först förbereda meddelandet i Outlook och spara det som en Outlook‑mall (OFT). Därefter, när du behöver skicka meddelandet, kan du skapa det från mallen, vilket sparar tid på att skriva samma text i brödtexten eller ämnesraden, sätta formatering osv. Aspose.Email:s MailMessage klass kan användas för att läsa in och läsa en Outlook-mall (OFT)-fil. När Outlook-mallen har laddats i en instans av MailMessage klass kan du uppdatera avsändare, mottagare, meddelandetext, ämne och andra egenskaper. Efter att ha uppdaterat egenskaperna:

  • Skicka e‑posten med hjälp av SmtpClient klass eller
  • Spara meddelandet som MSG och gör ytterligare uppdateringar/validering med Microsoft Outlook.

I kodexemplen nedan gör vi:

  1. Läs in mallen med hjälp av MailMessage klass.
  2. Uppdatera några av egenskaperna.
  3. Spara meddelandet i MSG-format.

Följande kodsnutt visar hur du laddar OFT‑filen, uppdaterar meddelandet och sparar det i MSG‑format.

// The path to the File directory.
string dataDir = RunExamples.GetDataDir_Outlook();

// Load the Outlook template (OFT) file in MailMessage's instance
MailMessage message = MailMessage.Load(dataDir + "sample.oft", new MsgLoadOptions());

// Set the sender and recipients information
string senderDisplayName = "John";
string senderEmailAddress = "john@abc.com";
string recipientDisplayName = "William";
string recipientEmailAddress = "william@xzy.com";

message.Sender = new MailAddress(senderEmailAddress, senderDisplayName);
message.To.Add(new MailAddress(recipientEmailAddress, recipientDisplayName));
message.HtmlBody = message.HtmlBody.Replace("DisplayName", "<b>" + recipientDisplayName + "</b>");

// Set the name, location and time in email body
string meetingLocation = "<u>" + "Hall 1, Convention Center, New York, USA" + "</u>";
string meetingTime = "<u>" + "Monday, June 28, 2010" + "</u>";
message.HtmlBody = message.HtmlBody.Replace("MeetingPlace", meetingLocation);
message.HtmlBody = message.HtmlBody.Replace("MeetingTime", meetingTime);

// Save the message in MSG format and open in Office Outlook
MapiMessage msg = MapiMessage.FromMailMessage(message);
msg.SetMessageFlags(MapiMessageFlags.MSGFLAG_UNSENT);
msg.Save(dataDir + "ReadAndWritingOutlookTemplateFile_out.msg");

Spara MSG‑filer som mallar

Följande kodexempel visar hur du sparar Outlook MSG-filen som en mall.

using (MapiMessage mapi = new MapiMessage("test@from.to", "test@to.to", "template subject", "Template body"))
{
    string oftMapiFileName = "mapiToOft.oft";
    mapi.SaveAsTemplate(oftMapiFileName);
}            

Bestäm MAPI-meddelandetyp (OFT eller MSG)

När du läser in ett MapiMessage-objekt från en fil kan du behöva avgöra om det inlästa meddelandet är en mallfil eller en vanlig e‑postfil. Genom att använda IsTemplate egenskap hos MapiMessage klassen låter dig exakt upptäcka om ett e‑postmeddelande är en mall eller inte. Denna funktionalitet kan vara värdefull när du hanterar och bearbetar olika typer av e‑postfiler i applikationer och system.

Kodexemplet nedanför demonstrerar hur man avgör om ett MapiMessage är OFT eller MSG:

var msg = MapiMessage.Load("message.msg");
var isOft = msg.IsTemplate; // returns false

var oft = MapiMessage.Load("message.oft");
var isOftTemplate = oft.IsTemplate; // returns true

Spara MapiMessage eller MailMessage i OFT-format

Den SaveOptions klassen låter dig ange ytterligare alternativ när du sparar ett MailMessage eller MapiMessage i ett specifikt format.

Följande kodexempel demonstrerar hur man sparar ett meddelande i OFT-format:

// Save the MailMessage to OFT format
using (var eml = MailMessage.Load("message.eml"))
{
    eml.Save("message.oft", SaveOptions.DefaultOft);
	
	// or alternative way #2
	var saveOptions = new MsgSaveOptions(MailMessageSaveType.OutlookTemplateFormat);
    eml.Save("message.oft", saveOptions);
	
	// or alternative  way #3
	saveOptions = SaveOptions.CreateSaveOptions(MailMessageSaveType.OutlookTemplateFormat);
    eml.Save("message.oft", saveOptions);

}

// Save the MapiMessage to OFT format
using (var msg = MapiMessage.Load("message.msg"))
{
    msg.Save("message.oft", SaveOptions.DefaultOft);
	
	// or alternative way #2
	var saveOptions = new MsgSaveOptions(MailMessageSaveType.OutlookTemplateFormat);
    msg.Save("message.oft", saveOptions);
	
	// or alternative  way #3
	saveOptions = SaveOptions.CreateSaveOptions(MailMessageSaveType.OutlookTemplateFormat);
    msg.Save("message.oft", saveOptions);
}

Hantera digitalt signerade meddelanden

Aspose.Email implementerar den kompletta S/MIME e‑postobjekt‑algoritmen. Detta ger API:t fullständig möjlighet att bevara digitala signaturer vid konvertering av meddelanden mellan olika format.

Bevara signatur vid konvertering från EML till MSG

Aspose.Email bevarar den digitala signaturen vid konvertering från EML till MSG. Följande kodexempel visar hur du konverterar från EML till MSG.

// The path to the File directory.
string dataDir = RunExamples.GetDataDir_Outlook();

// Load mail message
MailMessage message = MailMessage.Load(dataDir + "Message.eml", new EmlLoadOptions());
// Save as MSG
message.Save(dataDir + "ConvertEMLToMSG_out.msg", SaveOptions.DefaultMsgUnicode);

Konvertera S/MIME-meddelanden från MSG till EML

Aspose.Email bevarar den digitala signaturen vid konvertering från MSG till EML, som visas i följande kodexempel.

// The path to the File directory.
string dataDir = RunExamples.GetDataDir_Outlook();

// Load the MSG file
MailMessage msg = MailMessage.Load(dataDir + "message.msg", new MsgLoadOptions());

// Save as EML
msg.Save(dataDir + "ConvertMIMEMessagesFromMSGToEML_out.eml", SaveOptions.DefaultEml);

Kontrollera signaturer för säkra e‑postmeddelanden

Följande funktioner finns tillgängliga för att kontrollera signaturen på MapiMessage-objekt.

Kodexemplet nedan visar hur du implementerar funktionerna i ditt projekt:

Kontrollera signaturen på ett meddelande utan att ange ett certifikat:

var msg = MapiMessage.Load(fileName);
var result = new SecureEmailManager().CheckSignature(msg);

Kontrollera signaturen på ett krypterat meddelande genom att ange certifikatet för dekryptering och lagret som innehåller certifikaten som används för verifieringen:

var certFileName = "cert.pfx";
var cert = new X509Certificate2(certFileName, "pass");
var msg = MapiMessage.Load(fileName);

var store = new X509Store();
store.Open(OpenFlags.ReadWrite);
store.Add(cert);
store.Close();

var result = new SecureEmailManager().CheckSignature(msg, cert, store);

Ta bort signaturer från MapiMessages

För bättre kompatibilitet är MapiMessage.RemoveSignature metod och MapiMessage.IsSigned egenskapen används för att ta bort en digital signatur från ett meddelande.

Följande kodsnutt visar hur du implementerar dessa funktioner i ditt projekt:

var msg = MapiMessage.Load(fileName);

if (msg.IsSigned)
{
    var unsignedMsg = msg.RemoveSignature();
}

Avkryptera MapiMessages med certifikat

Om du har krypterade MAPI‑meddelanden och behöver dekryptera dem med den privata nyckeln som lagras i ett certifikat, kan följande funktioner i Aspose.Email vara användbara:

Följande kodexempel visar hur man arbetar med krypterade MAPI‑meddelanden:

var privateCert = new X509Certificate2(privateCertFile, "password");
var msg = MapiMessage.Load("encrypted.msg");

if (msg.IsEncrypted)
{
    var decryptedMsg = msg.Decrypt(privateCert);
}

Ställ in färgkategorier för MSG-filer

En färgkategori markerar ett e‑postmeddelande för någon form av vikt eller kategori. Microsoft Outlook låter användare tilldela färgkategorier för att särskilja e‑post. För att hantera färgkategorin, använd FollowUpManager. Det innehåller funktioner såsom AddCategory, RemoveCategory, ClearCategories och GetCategories.

  • AddCategory tar MapiMessage och färgkategori‑strängen, till exempel "Purple Category" eller "Red Category", som argument.
  • RemoveCategory tar MapiMessage och färgkategori‑strängen som ska tas bort från meddelandet.
  • ClearCategories används för att ta bort alla färgkategorier från meddelandet.
  • GetCategories används för att hämta alla färgkategorier från ett specifikt meddelande.

Följande exempel utför uppgifterna som anges nedan:

  1. Lägg till en färgkategori.
  2. Lägg till en annan färgkategori.
  3. Hämta listan över alla kategorier.
  4. Ta bort alla kategorier.
// The path to the File directory.
string dataDir = RunExamples.GetDataDir_Outlook();

MapiMessage msg = MapiMessage.FromFile(dataDir + "message1.msg");

// Add Two category
FollowUpManager.AddCategory(msg, "Purple Category");
FollowUpManager.AddCategory(msg, "Red Category");

// Retrieve the list of available categories
IList<string> categories = FollowUpManager.GetCategories(msg);

// Remove the specified category and then Clear all categories
FollowUpManager.RemoveCategory(msg, "Red Category");
FollowUpManager.ClearCategories(msg);

Åtkomst till uppföljningsinformation i MSG-filer

Aspose.Email API ger möjlighet att komma åt uppföljningsinformation från ett skickat eller mottaget meddelande. Det kan hämta information om läsbekräftelse, leveransläsbekräftelse och röstningsresultat från en meddelandefil.

Hämta information om läs‑ och leveransbekräftelse

Följande kodexempel visar hur du hämtar information om läs- och leveransbekräftelser.

MapiMessage msg = MapiMessage.FromFile(dataDir + @"TestMessage.msg");
foreach (MapiRecipient recipient in msg.Recipients)
{
    Console.WriteLine(string.Format("Recipient: {0}", recipient.DisplayName));

    // Get the PR_RECIPIENT_TRACKSTATUS_TIME_DELIVERY property
    Console.WriteLine(string.Format("Delivery time: {0}", recipient.Properties[MapiPropertyTag.PR_RECIPIENT_TRACKSTATUS_TIME_DELIVERY].GetDateTime()));

    // Get the PR_RECIPIENT_TRACKSTATUS_TIME_READ property
    Console.WriteLine(string.Format("Read time: {0}", recipient.Properties[MapiPropertyTag.PR_RECIPIENT_TRACKSTATUS_TIME_READ].GetDateTime()));

    Console.WriteLine();
}

Skapa vidarebefordran och svarmeddelanden

Aspose.Email API ger möjlighet att skapa och formatera vidarebefordran och svarmeddelanden. ReplyMessageBuilder och ForwardMessageBuilder klasser i API:et används för att respektive skapa svar‑ och vidarebefordrade meddelanden. Ett svar‑ eller vidarebefordrat meddelande kan specificeras att skapas med någon av lägena i OriginalMessageAdditionMode enum. Denna enum har följande värden:

  • OriginalMessageAdditionMode.None – Originalmeddelandet inkluderas inte i svarmeddelandet.
  • OriginalMessageAdditionMode.Attachment – Originalmeddelandet inkluderas som en bilaga i svarmeddelandet
  • OriginalMessageAdditionMode.Textpart – Det ursprungliga meddelandet inkluderas som text i svarets brödtext

Skapa svarmeddelanden

Följande kodsnutt visar hur du skapar ett svarsmail.

// The path to the File directory.
string dataDir = RunExamples.GetDataDir_Outlook();

MapiMessage originalMsg = MapiMessage.FromFile(dataDir + "message1.msg");
ReplyMessageBuilder builder = new ReplyMessageBuilder();

// Set ReplyMessageBuilder Properties
builder.ReplyAll = true;
builder.AdditionMode = OriginalMessageAdditionMode.Textpart;
builder.ResponseText = "<p><b>Dear Friend,</b></p> I want to do is introduce my co-author and co-teacher. <p><a href=\"www.google.com\">This is a first link</a></p><p><a href=\"www.google.com\">This is a second link</a></p>";
            
MapiMessage replyMsg = builder.BuildResponse(originalMsg);
replyMsg.Save(dataDir+ "reply_out.msg");

Skapa vidarebefordran

Följande kodsnutt visar hur du skapar ett vidarebefordrat meddelande.

// The path to the File directory.
string dataDir = RunExamples.GetDataDir_Outlook();

MapiMessage originalMsg = MapiMessage.FromFile(dataDir +"message1.msg");
ForwardMessageBuilder builder = new ForwardMessageBuilder();
builder.AdditionMode = OriginalMessageAdditionMode.Textpart;
MapiMessage forwardMsg = builder.BuildResponse(originalMsg);
forwardMsg.Save(dataDir + "forward_out.msg");