Behandeling van TNEF‑bijlagen in e‑mailberichten
TNEF (Transport Neutral Encapsulation Format) is een propriëtaire indeling die door Microsoft Outlook wordt gebruikt om rijke inhoud in bijlagen te encapsuleren – meestal opgeslagen als winmail.dat. De Aspose.Email‑API maakt het mogelijk om e‑mailberichten met TNEF‑bijlagen te lezen en de inhoud van de bijlage te wijzigen. De e‑mail kan vervolgens worden opgeslagen als een normale e‑mail of in hetzelfde formaat, met behoud van TNEF‑bijlagen. Dit artikel toont verschillende code‑voorbeelden voor het werken met berichten die TNEF‑bijlagen bevatten. Het artikel laat ook zien hoe u TNEF‑EML‑bestanden maakt vanuit Outlook MSG‑bestanden.
Lees een bericht met TNEF‑bijlage
Het onderstaande code‑fragment laat zien hoe u een bericht leest met behoud van TNEF‑bijlagen.
// The path to the File directory.
string dataDir = RunExamples.GetDataDir_Email();
MsgLoadOptions options = new MsgLoadOptions();
options.PreserveTnefAttachments = true;
MailMessage eml = MailMessage.Load(dataDir + "EmbeddedImage1.msg", options);
foreach (Attachment attachment in eml.Attachments)
{
Console.WriteLine(attachment.Name);
}
Lees een bericht zonder TNEF‑bijlage
De volgende codefragment toont hoe je een bericht leest zonder TNEF-bijlagen te behouden. Instellen PreserveTnefAttachments naar false is het standaardgedrag: de TNEF-container wordt gedecodeerd en de inhoud wordt weergegeven als gewone bijlagen in plaats van één winmail.dat-bestand.
// The path to the File directory.
string dataDir = RunExamples.GetDataDir_Email();
MsgLoadOptions options = new MsgLoadOptions();
options.PreserveTnefAttachments = false;
MailMessage eml = MailMessage.Load(dataDir + "EmbeddedImage1.msg", options);
foreach (Attachment attachment in eml.Attachments)
{
Console.WriteLine(attachment.Name);
}
TNEF‑bijlagen Laden en Opslaan
Met Aspose.Email voor .NET kunt u TNEF‑bijlagen direct laden in een MapiAttachment object met een bestandspad of stream, en sla vervolgens het object op in TNEF‑formaat. Dit maakt het mogelijk winmail.dat‑bestanden te maken of Outlook‑specifieke opmaak te behouden in e‑mail‑werkstromen.
De API biedt de volgende leden in de MapiAttachment klasse:
TNEF‑bijlagen laden
-
static MapiAttachment LoadFromTnef(string fileName) - Laadt een TNEF‑bijlage vanuit een .dat‑bestand.
-
static MapiAttachment LoadFromTnef(Stream stream) - Laadt een TNEF‑bijlage vanuit een stream (bijv. MemoryStream of bestands‑stream).
TNEF‑bijlagen opslaan
-
void SaveToTnef(string filename) - Slaat een MapiAttachment op in een TNEF‑bestand.
-
void SaveToTnef(Stream stream) - Slaat een MapiAttachment op in een stream in TNEF‑formaat.
Het code‑voorbeeld hieronder toont hoe u een winmail.dat‑bijlage uit een e‑mailbericht extraheert, behoudt, en opnieuw toevoegt als een bijlage aan het bericht:
// message.eml contains a winmail.dat attachment, but by default, the attachment is not preserved.
var msg = MapiMessage.Load("message.eml");
// Save the attachment to TNEF format in a stream and load it back
var ms = new MemoryStream();
msg.Attachments[0].SaveToTnef(ms);
ms.Position = 0;
var fromTnefAttachment = MapiAttachment.LoadFromTnef(ms);
msg.Attachments.Add(fromTnefAttachment);
// The same can be done through a file
msg.Attachments[0].SaveToTnef("winmail.dat");
fromTnefAttachment = MapiAttachment.LoadFromTnef("winmail.dat");
msg.Attachments.Add(fromTnefAttachment);
Resources bijwerken in TNEF‑bijlage
Het onderstaande code‑fragment laat zien hoe u resources in een TNEF‑bijlage bijwerkt en het TNEF‑formaat behoudt.
public static void TestUpdateResources(string dataDir)
{
string fileName = dataDir + "tnefEML1.eml";
string imgFileName = dataDir + "Untitled.jpg";
string outFileName = dataDir + "UpdateTNEFAttachments_out.eml";
MailMessage originalMailMessage = MailMessage.Load(fileName);
UpdateResources(originalMailMessage, imgFileName);
EmlSaveOptions emlSo = new EmlSaveOptions(MailMessageSaveType.EmlFormat);
emlSo.FileCompatibilityMode = FileCompatibilityMode.PreserveTnefAttachments;
originalMailMessage.Save(outFileName, emlSo);
}
private static void UpdateResources(MailMessage msg, string imgFileName)
{
for (int i = 0; i < msg.Attachments.Count; i++)
{
if ((msg.Attachments[i].ContentType.MediaType == "image/png") || (msg.Attachments[i].ContentType.MediaType == "application/octet-stream" && Path.GetExtension(msg.Attachments[i].ContentType.Name) == ".jpg"))
{
msg.Attachments[i].ContentStream = new MemoryStream(File.ReadAllBytes(imgFileName));
}
else if ((msg.Attachments[i].ContentType.MediaType == "message/rfc822") || (msg.Attachments[i].ContentType.MediaType == "application/octet-stream" && Path.GetExtension(msg.Attachments[i].ContentType.Name) == ".msg"))
{
MemoryStream ms = new MemoryStream();
msg.Attachments[i].Save(ms);
ms.Position = 0;
MailMessage embeddedMessage = MailMessage.Load(ms);
UpdateResources(embeddedMessage, imgFileName);
MemoryStream msProcessedEmbedded = new MemoryStream();
embeddedMessage.Save(msProcessedEmbedded, SaveOptions.DefaultMsgUnicode);
msProcessedEmbedded.Position = 0;
msg.Attachments[i].ContentStream = msProcessedEmbedded;
}
}
foreach (LinkedResource att in msg.LinkedResources)
{
if (att.ContentType.MediaType == "image/png")
att.ContentStream = new MemoryStream(File.ReadAllBytes(imgFileName));
}
}
Bijlage toevoegen aan TNEF‑bericht
Het onderstaande code‑fragment laat zien hoe u nieuwe bijlagen toevoegt aan het hoofdbericht dat TNEF bevat.
string fileName = "MainMessage.eml";
string attachName = "s.png";
string outFileName = "test.eml";
MailMessage mailMessage = MailMessage.Load(fileName);
mailMessage.Attachments.Add(new Attachment(File.OpenRead(attachName), "s.png", "image/png"));
// The TNEF content of the original message is preserved via EmlSaveOptions
EmlSaveOptions emlSaveOptions = new EmlSaveOptions(MailMessageSaveType.EmlFormat)
{
FileCompatibilityMode = FileCompatibilityMode.PreserveTnefAttachments
};
mailMessage.Save(outFileName, emlSaveOptions);
TNEF‑EML maken vanuit MSG
Outlook MSG‑bestanden kunnen soms informatie bevatten zoals tabellen en tekststijlen die kunnen worden verstoord bij conversie naar EML. Het maken van TNEF‑berichten uit dergelijke MSG‑bestanden behoudt de opmaak en maakt het mogelijk deze berichten via e‑mailclients te verzenden met behoud van de opmaak. De MailConversionOptions.ConvertAsTnef eigenschap wordt gebruikt om dit te bereiken. Het onderstaande code‑fragment laat zien hoe u TNEF‑EML maakt vanuit MSG.
MapiMessage mapiMsg = MapiMessage.FromFile(dataDir + "Message.msg");
MailConversionOptions mco = new MailConversionOptions();
mco.ConvertAsTnef = true;
MailMessage message = mapiMsg.ToMailMessage(mco);
Alternatief kan een TNEF EML worden geproduceerd door het MSG-bestand te laden met de PreserveTnefAttachments optie van de MsgLoadOptions klasse ingeschakeld, en sla vervolgens het resultaat op als EML.
// Loading the MSG with PreserveTnefAttachments will create the TNEF eml.
MsgLoadOptions options = new MsgLoadOptions();
options.PreserveTnefAttachments = true;
MailMessage eml = MailMessage.Load(msgFileName, options);
eml.Save(emlFileName, SaveOptions.DefaultEml);
MailMessageLoadOptions klasse is verouderd. Gebruik de formaat‑specifieke afstammelingen van de LoadOptions klasse in plaats van — MsgLoadOptions, EmlLoadOptions, en zo verder.
Identificeer TNEF‑formaatberichten
Het onderstaande code‑fragment laat zien hoe u detecteert of een bericht TNEF is.
MailMessage mail = MailMessage.Load(dataDir + "tnefEml1.eml");
bool isTnef = mail.OriginalIsTnef;
Console.WriteLine("Is input EML originally TNEF? {0}", isTnef.ToString());
Identificeer TNEF‑formaatbijlagen
De Attachment.IsTnef eigenschap maakt het mogelijk te detecteren of de berichtbijlage een TNEF‑geformatteerd bericht is.
var eml = MailMessage.Load(fileName);
foreach (var attachment in eml.Attachments)
{
Console.WriteLine($"Is Attachment TNEF?: {attachment.IsTnef}");
}