Last Updated: 15 Oct, 2025

هنگام کار با فرمتهای فایل ایمیل، ممکن است با دو فرمت رایج مواجه شوید: MSG و EML. هر دو پیامهای ایمیل را ذخیره میکنند** اما در ساختار، سازگاری و کاربرد متفاوت هستند. در این پست وبلاگ، ما بررسی خواهیم کرد که آنها چه هستند، ویژگیها و تفاوتهای آنها چیست و چگونه میتوان با استفاده از انواع مختلف APIها و مثالهای کد، بین MSG و EML** تبدیل کرد.
فایل MSG چیست؟
فرمت فایل MSG یک فرمت اختصاصی است که توسط مایکروسافت توسعه داده شده است. این یک پیام ایمیل، قرار ملاقات، مخاطب یا وظیفه ذخیره شده از مایکروسافت اوتلوک است. این یک فرمت اختصاصی است، به این معنی که برای بهترین عملکرد در اکوسیستم اوتلوک طراحی شده است. فایلهای MSG تمام جزئیات یک ایمیل، از جمله فرستنده، گیرنده، تاریخ، موضوع، بدنه و پیوستها، و همچنین ویژگیهای خاص اوتلوک مانند دستهها و پرچمها را در خود جای میدهند.
ویژگیهای کلیدی:
محتوای ایمیل، پیوستها و فرادادهها (فرستنده، گیرنده، موضوع) را ذخیره میکند.
فرمت دودویی مبتنی بر فرمت دودویی فایل مرکب (CFBF).
فرادادهها، بدنه ایمیل (RTF یا HTML) و پیوستها را ذخیره میکند.
عمدتاً در محیطهای ویندوز استفاده میشود.
فایل EML چیست؟
فرمت فایل EML یک استاندارد باز است که در RFC 5322 تعریف شده است و یک فرمت ایمیل جهانی است که توسط کلاینتهای ایمیل مختلف مانند موزیلا تاندربرد، ویندوز میل، اوتلوک اکسپرس و اپل میل استفاده میشود. از آنجا که این یک فرمت متن ساده است، تطبیقپذیرتر است و میتواند در سیستم عاملها و دستگاههای مختلف باز شود.
ویژگیهای کلیدی:
فرمت مبتنی بر متن که هدرها و محتوای رمزگذاری شده MIME را ذخیره میکند.
به طور کامل از قالببندی HTML، تصاویر درون خطی و پیوستها پشتیبانی میکند.
مستقل از پلتفرم و قابل خواندن توسط انسان. * پردازش آسانتر از طریق برنامهنویسی
تفاوتهای کلیدی بین MSG و EML
شماره | ویژگی | فرمت MSG | فرمت EML |
---|---|---|---|
1 | نوع قالب | باینری (اختصاصی) | متن ساده (استاندارد) |
2 | سازگاری | مایکروسافت اوتلوک | تاندربرد، اپل میل، جیمیل و غیره |
3 | پشتیبانی از فراداده | کامل (شامل اشیاء تعبیهشده) | محدود (سرآیندهای پایه و MIME) |
4 | نیازمند خوانایی | ابزارهای اوتلوک یا تخصصی | قابل خواندن توسط انسان (مبتنی بر متن) |
5 | مدیریت پیوست | درون فایل تعبیهشده | Base64 کدگذاریشده در MIME |
حالا بیایید نحوه تبدیل MSG به EML و EML به MSG را با استفاده از APIها و کتابخانههای متنباز محبوب بررسی کنیم. در زیر نمونههای کد با استفاده از APIهای مختلف آمده است.
چگونه MSG را با استفاده از API های .NET به EML تبدیل کنیم؟
ما میتوانیم از کتابخانههای متنباز MsgKit و MimeKit برای تبدیل فایل MSG به فرمت فایل EML در برنامههای .NET استفاده کنیم. در حالی که MsgKit به تنهایی خروجی بومی .eml را ارائه نمیدهد، خواندن و استخراج تمام اجزای یک فایل .msg را آسان میکند، که سپس میتواند با استفاده از سایر کتابخانههای سازگار با MIME مانند MimeKit یا MailKit به صورت .eml نوشته شود، همانطور که در مثال کد زیر نشان داده شده است.
چگونه فایل MSG را با استفاده از MsgKit به EML تبدیل کنیم؟
using MsgReader.Outlook;
using MimeKit;
using System.IO;
var msg = new Storage.Message("sample.msg");
var mimeMessage = new MimeMessage();
mimeMessage.Subject = msg.Subject;
mimeMessage.From.Add(new MailboxAddress(msg.SenderName, msg.SenderEmail));
mimeMessage.To.Add(MailboxAddress.Parse(msg.GetEmailRecipients(Storage.RecipientType.To)[0].Email));
mimeMessage.Body = new TextPart("plain") { Text = msg.BodyText };
using var stream = File.Create("output.eml");
mimeMessage.WriteTo(stream);
چگونه با استفاده از MimeKit فایل EML را به MSG تبدیل کنیم؟
using MsgKit;
using System.IO;
var email = new Email(
new Sender("sender@example.com", "Sender Name"),
"Subject of Email",
"This is the plain body text.");
email.Recipients.AddTo("recipient@example.com", "Recipient Name");
email.Save(new FileInfo("output.msg"));
تبدیل MSG به EML از طریق APIهای متنباز جاوا؟
میتوان از Apache POI-HSMF و JavaMail برای بارگذاری و تبدیل Outlook MSG به فرمت فایل EML استفاده کرد. Apache POI-HSMF میتواند فایلهای MSG را بخواند و JavaMail میتواند فایلهای EML تولید کند. تبدیل از EML به MSG در جاوا معمولاً به SDKهای پولی (مانند Aspose) یا تجزیه دستی MIME و نوشتن باینری MSG نیاز دارد - که در حال حاضر با استفاده از کتابخانههای جاوای کاملاً متنباز امکانپذیر نیست.
مثال کد زیر نشان میدهد که چگونه Apache POI-HSMF میتواند فایلهای MSG را بخواند و JavaMail میتواند فایلهای EML تولید کند.
import org.apache.poi.hsmf.MAPIMessage;
import javax.mail.*;
import javax.mail.internet.*;
public class MsgToEmlConverter {
public static void convert(String msgPath, String emlPath) throws Exception {
MAPIMessage msg = new MAPIMessage(msgPath);
MimeMessage eml = new MimeMessage((Session) null);
eml.setFrom(new InternetAddress(msg.getDisplayFrom()));
eml.setSubject(msg.getSubject());
eml.setText(msg.getTextBody());
// Save EML file
eml.writeTo(new java.io.FileOutputStream(emlPath));
}
public static void main(String[] args) throws Exception {
convert("input.msg", "output.eml");
}
}
بهترین APIهای تجاری برای تبدیل با کارایی بالا
1. Aspose.Email (چندسکویی.NET/Java/Python)
Aspose.Email یک راهکار تجاری قدرتمند برای کار با فایلهای ایمیل ارائه میدهد. توسعهدهندگان نرمافزار تنها با چند خط کد میتوانند با استفاده از زبانهای برنامهنویسی مختلف مانند داتنت، جاوا، پایتون و بسیاری دیگر، MSG را به EML و EML به MSG بارگذاری، دستکاری و تبدیل کنند. مثال زیر نحوه تبدیل b/t MSG و EML را با استفاده از Aspose.Email for .NET API نشان میدهد.
چگونه b/t EML را با استفاده از Aspose.Email for .NET API به MSG تبدیل کنیم؟
// Convert MSG to EML
using Aspose.Email.Mime;
using Aspose.Email.Outlook;
var msg = MapiMessage.FromFile("input.msg");
msg.Save("output.eml", SaveOptions.DefaultEml);
// Convert EML to MSG
var eml = MailMessage.Load("input.eml");
eml.Save("output.msg", SaveOptions.DefaultMsgUnicode);
چگونه با استفاده از Aspose.Email for Java API، b/t EML را به MSG تبدیل کنیم؟
import com.aspose.email.*; // Load the MSG file MailMessage message = MailMessage.load("input.msg"); // Save as EML message.save("output.eml", SaveOptions.getDefaultEml());
چگونه با استفاده از Aspose.Email برای پایتون API، b/t EML را به MSG تبدیل کنیم؟
import aspose.email as ae
# Load the EML file
eml = ae.MailMessage.load("input.eml")
# Save as MSG
eml.save("output.msg", ae.SaveOptions.default_msg_unicode)
۲. Microsoft Graph API
یکی دیگر از گزینههای تجاری خوب برای بررسی Microsoft Graph API (مبتنی بر ابر)
تبدیل MSG به EML از طریق Microsoft Graph API (مبتنی بر ابر)
import requests
headers = {"Authorization": "Bearer YOUR_ACCESS_TOKEN"}
response = requests.post(
"https://graph.microsoft.com/v1.0/me/messages/{id}/content?format=eml",
headers=headers
)
with open("output.eml", "wb") as f:
f.write(response.content)
جایزه: مبدلهای آنلاین (بدون کد)
اگر نمیخواهید کدنویسی کنید، در اینجا یک ابزار آنلاین بسیار قابل اعتماد و مفید وجود دارد که به راحتی فایل MSG را بارگذاری و به فرمت EML تبدیل میکند.
نکات پایانی
هر دو فرمت MSG و EML نقاط قوت منحصر به فرد خود را دارند. MSG برای اکوسیستمهای مایکروسافت با ابرداده کامل و پیوستهای جاسازی شده ایدهآل است، در حالی که EML به دلیل ساختار مبتنی بر MIME و متن ساده خود، انعطافپذیری بیشتری ارائه میدهد. چه توسعهدهنده .NET، جاوا، پایتون یا جاوا اسکریپت باشید، ابزارهای متنباز و تجاری برای تبدیل بین فرمتهای MSG و EML وجود دارد. بر اساس زبان، مقیاس پروژه و نیاز به مجوز خود انتخاب کنید.
سوالات متداول
سؤال: آیا میتوانم فایلهای MSG را بدون Outlook باز کنم؟
پاسخ: بله، کتابخانههای متنباز مانند MsgReader (C#) یا extract-msg (Python) امکان خواندن فایلهای MSG را بدون Outlook فراهم میکنند.
سؤال: کدام فرمت برای بایگانی ایمیل بهتر است؟
پاسخ: EML به دلیل استاندارد باز و فرمت قابل خواندن توسط انسان بهتر است.
سؤال: آیا API های رایگانی برای تبدیل MSG به EML وجود دارد؟
پاسخ: بله، کتابخانههایی مانند MsgReader (.NET) و extract-msg (Python) کاملاً رایگان و متنباز هستند.