العمل مع المرفقات والكائنات المدمجة
إدارة مرفقات البريد الإلكتروني
المرفق البريدي هو ملف يُرسل مع رسالة بريد إلكتروني. قد يُرسل الملف كرسالة منفصلة أو كجزء من الرسالة التي يُرسل معها. الـ Attachment الفئة تُستخدم مع الـ MailMessage الفئة. تحتوي جميع الرسائل على جسم. بالإضافة إلى الجسم، قد ترغب في إرسال ملفات إضافية. تُرسل هذه كملفات مرفقة وتُمثَل ككائن من الـ Attachment الفئة. يمكنك إرسال أي عدد من المرفقات لكن حجم المرفق يحده خادم البريد. على سبيل المثال، لا يدعم Gmail ملفات أكبر من 10 ميغابايت.
جرّبها!
أضف أو احذف مرفقات البريد الإلكتروني عبر الإنترنت مجانًا باستخدام Aspose.Email Editor App.
إضافة مرفق
لإرفاق مرفق ببريد إلكتروني، يرجى اتباع الخطوات التالية:
- إنشاء مثيل من الـ MailMessage فئة.
- إنشاء مثيل من الـ Attachment فئة.
- حمّل المرفق إلى الـ Attachment كائن.
- أضف الـ Attachment مثيل إلى الـ MailMessage كائن.
مقتطف الشيفرة التالي يوضح كيفية إضافة مرفق إلى بريد إلكتروني.
// Create an instance of MailMessage class
MailMessage message = new MailMessage();
message.setFrom(new MailAddress("sender@from.com"));
message.getTo().add("receiver@to.com");
message.setSubject("This is message");
message.setBody("This is body");
// Load an attachment
Attachment attachment = new Attachment("1.txt");
// Add Multiple Attachment in instance of MailMessage class and Save message to disk
message.getAttachments().addItem(attachment);
message.addAttachment(new Attachment("1.jpg"));
message.addAttachment(new Attachment("1.doc"));
message.addAttachment(new Attachment("1.rar"));
message.addAttachment(new Attachment("1.pdf"));
message.save("AddAttachments.eml");
فيما سبق، شرحنا كيفية إضافة مرفقات إلى رسالة بريدك الإلكتروني باستخدام Aspose.Email. ما يلي يوضح كيفية إزالة المرفقات وعرض معلومات عنها على الشاشة.
إزالة مرفق
لإزالة مرفق، اتبع الخطوات التالية:
- إنشاء نسخة من Attachment فئة.
- حمّل المرفق في مثيل Attachment فئة.
- أضف المرفق إلى مثيل MailMessage فئة.
- أزل المرفقات من مثيل Attachment فئة باستخدام MailMessage مثيل الفئة.
مقتطف الشيفرة التالي يوضح كيفية إزالة مرفق.
// Create an instance of MailMessage class
MailMessage eml = new MailMessage();
eml.setFrom(new MailAddress("sender@from.com"));
eml.getTo().add("receiver@to.com");
// Load an attachment
Attachment attachment = new Attachment("1.txt");
eml.getAttachments().addItem(attachment);
// Remove attachment from your MailMessage
eml.getAttachments().removeItem(attachment);
عرض اسم ملف المرفق
لعرض اسم ملف المرفق، اتبع الخطوات التالية:
- تنقل عبر المرفقات في رسالة البريد الإلكتروني و
- احفظ كل مرفق.
- اعرض اسم كل مرفق على الشاشة.
مقتطف الشيفرة التالي يوضح كيفية عرض اسم ملف المرفق على الشاشة.
MailMessage eml = MailMessage.load("Attachments.eml");
for (Attachment attachment : eml.getAttachments()) {
// Display the attachment file name
System.out.println(attachment.getName());
}
استخراج مرفقات البريد الإلكتروني
يشرح هذا الموضوع كيفية استخراج مرفق من ملف بريد إلكتروني. مرفق البريد الإلكتروني هو ملف يُرسل مع رسالة بريد إلكتروني. قد يُرسل الملف كرسالة منفصلة أو كجزء من الرسالة التي يُرفق بها. تشمل جميع رسائل البريد خيار إرسال ملفات إضافية. تُرسل هذه كالمرفقات وتُمثَّل كأمثلة من Attachment الفئة. الـ Attachment الفئة تُستخدم مع الـ MailMessage فئة للعمل مع المرفقات. لاستخراج المرفقات من رسالة بريد إلكتروني، اتبع الخطوات التالية:
- إنشاء مثيل من الـ MailMessage فئة.
- حمّل ملف بريد إلكتروني إلى MailMessage كائن.
- إنشاء مثيل من الـ Attachment فئة واستخدمها في حلقة لاستخراج جميع المرفقات.
- احفظ المرفق واعرضه على الشاشة.
|المرفقات المستخرجة في البريد الإلكتروني| | :- | |
| يوضح مقتطف الشيفرة التالي كيفية استخراج مرفقات البريد الإلكتروني.
MailMessage eml = MailMessage.load("Message.eml", new MsgLoadOptions());
for (Attachment attachment : eml.getAttachments()) {
attachment.save("MessageEmbedded_out.eml");
System.out.println(attachment.getName());
}
استرجاع Content-Description من المرفق
يوفر Aspose.Email API القدرة على قراءة Content-Description للمرفق من رأس المرفق. يوضح مقتطف الشيفرة التالي كيفية استرجاع وصف المحتوى من المرفق.
MailMessage eml = MailMessage.load("EmailWithAttachEmbedded.eml");
System.out.println(eml.getAttachments().get_Item(0).getHeaders().get_Item("Content-Description"));
تحديد ما إذا كان المرفق رسالة مضمَّنة
مقتطف الشيفرة التالي يوضح كيفية تحديد ما إذا كان المرفق رسالة مضمَّنة أم لا.
MailMessage eml = MailMessage.load("EmailWithAttachEmbedded.eml");
System.out.println(eml.getAttachments().get_Item(0).isEmbeddedMessage()
? "Attachment is an embedded message."
: "Attachment isn't an embedded message.");
تحديد المرفقات ذات تنسيق TNEF
الـ Attachment.isTnef خاصية في Aspose.Email Java API تشير إلى ما إذا كان مرفق الرسالة بصيغة TNEF.
مقتطف الشيفرة التالي يوضح كيفية تحديد ما إذا كان المرفق بصيغة TNEF:
MailMessage eml = MailMessage.load(fileName);
for (Attachment attachment : eml.getAttachments()) {
System.out.println("Is Attachment TNEF?: " + attachment.isTnef());
}
تحميل وحفظ مرفقات TNEF
توفر Aspose.Email للـ Java طرقًا في MapiAttachment فئة للقيام بالعمليات التالية:
تحميل من TNEF
-
static MapiAttachment loadFromTnef(String fileName)– يحمل مرفقًا من ملف TNEF. -
static MapiAttachment loadFromTnef(InputStream stream)– يحمل مرفقًا من تدفق TNEF.
حفظ إلى TNEF
-
void saveToTnef(String fileName)– يحفظ مرفقًا إلى ملف TNEF. -
void saveToTnef(OutputStream stream)– يحفظ مرفقًا إلى تدفق TNEF.
العينة البرمجية التالية توضح كيفية استخراج مرفق TNEF من رسالة، حفظه إلى تدفق أو ملف، ثم تحميله مرة أخرى إلى الرسالة كـ MapiAttachment:
// Load message containing a TNEF attachment (winmail.dat)
MapiMessage msg = MapiMessage.load("message.eml");
// Save the first attachment to a TNEF stream
ByteArrayOutputStream bos = new ByteArrayOutputStream();
msg.getAttachments().get(0).saveToTnef(bos);
// Load attachment back from the TNEF stream
ByteArrayInputStream bis = new ByteArrayInputStream(bos.toByteArray());
MapiAttachment fromtnefAttachment = MapiAttachment.loadFromTnef(bis);
msg.getAttachments().addMapiAttachment(fromtnefAttachment);
// Load TNEF attachment directly from a file
fromtnefAttachment = MapiAttachment.loadFromTnef("winmail.dat");
msg.getAttachments().addMapiAttachment(fromtnefAttachment);
استخراج URI المرفق إذا كان المرفق URI-attachment
مقتطف الشيفرة التالي يوضح كيفية استخراج URI المرفق.
MailMessage eml = MailMessage.load("fileName");
Attachment attachment = eml.getAttachments().get_Item(0);
if (attachment.isUri()) {
InputStream inputStream = attachment.getContentStream();
String uri = new String(IOUtils.toByteArray(inputStream), Charset.forName("utf-8"));
System.out.println("Attachment URI: " + uri);
}
إضافة مرفقات مرجعية
المرفق المرجعي هو بديل للمرفق الملف المحلي. في بعض الحالات، قد تكون المرفقات المرجعية مفضلة، على سبيل المثال، إذا كنت تريد إدارة وصولها. تُستخدم الفئات أدناه لإدارة ومعالجة رسائل البريد الإلكتروني ومرفقاتها:
- ReferenceAttachment - تمثل مرفقًا مرجعيًا.
- AttachmentPermissionType - بيانات نوع الإذن المرتبطة بمرفق مرجع الويب.
- AttachmentProviderType - نوع خدمة الويب التي تتعامل مع المرفق.
العينة البرمجية التالية توضح كيفية تحميل رسالة بريد إلكتروني من ملف، إنشاء مرفق مرجعي بخصائص معينة، وإضافة المرفق إلى رسالة البريد الإلكتروني:
MailMessage eml = MailMessage.load("fileName");
ReferenceAttachment refAttach = new ReferenceAttachment("https://[attach_uri]")
refAttach.setName("Document.docx");
refAttach.setProviderType(AttachmentProviderType.OneDrivePro);
refAttach.setPermissionType(AttachmentPermissionType.AnyoneCanEdit);
eml.getAttachments().addItem(refAttach);
العمل مع الكائنات المضمَّنة
الكائن المضمَّن هو كائن تم إنشاؤه باستخدام تطبيق واحد وتضمينه داخل مستند أو ملف تم إنشاؤه بواسطة تطبيق آخر. على سبيل المثال، يمكن تضمين جدول بيانات Microsoft Excel في تقرير Microsoft Word، أو يمكن تضمين ملف فيديو في عرض Microsoft PowerPoint. عندما يتم تضمين ملف، بدلاً من إدراجه أو لصقه في مستند آخر، يحتفظ بالتنسيقه الأصلي. يمكن فتح المستند المضمَّن في التطبيق الأصلي وتعديله.
تضمين الكائنات في بريد إلكتروني
الـ LinkedResource الفئة تُستخدم مع الـ MailMessage فئة لتضمين الكائنات في رسائل بريدك الإلكتروني. لإضافة كائن مضمَّن، اتبع الخطوات التالية
- إنشاء مثيل من الـ MailMessage فئة.
- حدد قيم من، إلى والموضوع في MailMessage كائن.
- إنشاء مثيل من الـ AlternateView فئة.
- إنشاء مثيل من الـ LinkedResource فئة.
- حمّل كائنًا مضمَّنًا إلى LinkedResourceCollection.
- أضف الكائن المضمَّن المحمَّل إلى MailMessage مثيل الفئة.
- أضف الـ AlternateView مثيل إلى MailMessage مثيل الفئة.
مقاطع الشيفرة أدناه تنتج رسالة بريد إلكتروني تحتوي على نص عادي وجسم HTML وتضمِّن صورة داخل HTML
|صورة مضمَّنة في البريد الإلكتروني| | :- | |
| يمكنك إرسال أي عدد من الكائنات المضمَّنة. حجم المرفق يحده خادم البريد. على سبيل المثال، لا يدعم Gmail ملفات أكبر من 10 ميغابايت. يوضح مقاطع الشيفرة أدناه كيفية تضمين الكائنات في بريد إلكتروني.|
// Create an instance of the MailMessage class and Set the addresses and Set the content
MailMessage mail = new MailMessage();
mail.setFrom(new MailAddress("sender@from.com"));
mail.getTo().add("receiver@to.com");
mail.setSubject("This is an email");
// Create the plain text part It is viewable by those clients that don't support HTML
AlternateView plainView = AlternateView.createAlternateViewFromString("This is my plain text content", null, "text/plain");
// Create the HTML part.To embed images, we need to use the prefix 'cid' in the img src value.
// The cid value will map to the Content-Id of a Linked resource.
// Thus <img src='cid:barcode'> will map to a LinkedResource with a ContentId of //'barcode'.
AlternateView htmlView = AlternateView.createAlternateViewFromString("Here is an embedded image.<img src=cid:barcode>", null, "text/html");
// Create the LinkedResource (embedded image) and Add the LinkedResource to the appropriate view
LinkedResource barcode = new LinkedResource("1.jpg", MediaTypeNames.Image.JPEG);
barcode.setContentId("barcode");
mail.getLinkedResources().addItem(barcode);
mail.getAlternateViews().addItem(plainView);
mail.getAlternateViews().addItem(htmlView);
mail.save("EmbeddedImage_out.msg", SaveOptions.getDefaultMsgUnicode());
إزالة الكائنات المضمَّنة من البريد الإلكتروني
LinkedResourceCollection التي يتم الوصول إليها عبر MailMessage.LinkedResources الخاصية. الـ LinkedResourceCollection توفر المجموعة طريقة لإزالة الكائنات المضمَّنة المضافة إلى رسالة بريد إلكتروني بالكامل. استخدم النسخة المتعددة المعلمات من LinkedResourceCollection.removeAt طريقة لإزالة جميع آثار الكائن المضمَّن من رسالة بريد إلكتروني.
يعرض رمز العينة أدناه كيفية إزالة الكائنات المضمَّنة من رسالة بريد إلكتروني.
// Load the test message with Linked Resources
MailMessage msg = MailMessage.load("EmlWithLinkedResources.eml");
// Remove a LinkedResource
msg.getLinkedResources().removeAt(0, true);
// Now clear the Alternate View for linked Resources
msg.getAlternateViews().get_Item(0).getLinkedResources().clear(true);
استخراج الكائنات المضمَّنة
يشرح هذا الموضوع كيفية استخراج الكائنات المضمَّنة من ملف بريد إلكتروني. الكائن المضمَّن هو كائن تم إنشاؤه باستخدام تطبيق واحد وتضمينه داخل مستند أو ملف تم إنشاؤه بواسطة تطبيق آخر. على سبيل المثال، يمكن تضمين جدول بيانات Microsoft Excel في تقرير Microsoft Word، أو يمكن تضمين ملف فيديو في عرض Microsoft PowerPoint. عندما يتم تضمين ملف، بدلاً من إدراجه أو لصقه في مستند آخر، يحتفظ بالتنسيقه الأصلي. يمكن فتح المستند المضمَّن في التطبيق الأصلي وتعديلها. لاستخراج كائن مضمَّن من رسالة بريد إلكتروني، اتبع الخطوات التالية:
- إنشاء مثيل من الـ MailMessage فئة.
- حمّل ملف بريد إلكتروني في MailMessage كائن.
- أنشئ حلقة وأنشئ مثيلاً من Attachment الفئة فيه.
- احفظ المرفق واعرضه على الشاشة.
- حدد عناوين المرسل والمستلم في MailMessage كائن.
- إرسال بريد إلكتروني باستخدام SmtpClient فئة.
المقتطف البرمجي أدناه يستخرج الكائنات المدمجة من بريد إلكتروني.
|الكائنات المدمجة المستخرجة في البريد| | :- | |
| المقتطف البرمجي التالي يوضح لك كيفية استخراج الكائنات المدمجة.
MailMessage mailMsg = MailMessage.load("Message.msg", new MsgLoadOptions());
for (Attachment attachment : mailMsg.getAttachments()) {
attachment.save("MessageEmbedded_out.msg");
System.out.println(attachment.getName());
}
تحديد واستخراج مرفق مدمج من MSG بصيغة RTF
يمكن استخدام الشيفرة التالية للرسائل بصيغة RTF لتمييز واستخراج المرفقات التي تكون إما مضمنة داخل النص أو تظهر كأيقونة في جسم الرسالة. يوضح المقتطف البرمجي التالي كيفية تحديد واستخراج مرفق مدمج من MSG بصيغة RTF.
public static void extractInlineAttachments() {
MapiMessage message = MapiMessage.load("MSG file with RTF Formatting.msg");
for (MapiAttachment attachment : message.getAttachments()) {
if (isAttachmentInline(attachment)) {
try {
saveAttachment(attachment, UUID.randomUUID().toString());
} catch (Exception ex) {
System.err.println(ex);
}
}
}
}
static boolean isAttachmentInline(MapiAttachment attachment) {
for (MapiProperty property : attachment.getObjectData().getProperties().get_Values()) {
if ("\u0003ObjInfo".equals(property.getName())) {
byte[] data = property.getData();
int odtPersist1 = data[1] << 8 | data[0];
return (odtPersist1 & 0x40) == 0;
}
}
return false;
}
static void saveAttachment(MapiAttachment attachment, String fileName) throws IOException {
for (MapiProperty property : attachment.getObjectData().getProperties().get_Values()) {
if ("Package".equals(property.getName())) {
try (FileOutputStream fs = new FileOutputStream(fileName)) {
fs.write(property.getData(), 0, property.getData().length);
}
}
}
}
استخراج المرفقات من بريد موقّع
تحتوي الرسائل الموقعة على مرفق واحد smime.p7m. يعني ذلك أن البريد مشفر بواسطة SMIME. تنسيق ملف smime.p7m هو التوقيع الرقمي. لرؤية محتويات هذا البريد استخدم الـ RemoveSignature طريقة. تُعيد الطريقة MailMessage كائن بدون توقيع رقمي.
MailMessage signedEml = MailMessage.load("signed.eml");
if (signedEml.isSigned()) {
for (int i = 0; i < signedEml.getAttachments().size(); i++) {
System.out.println("Signed email attachment" + i + ": " + signedEml.getAttachments().get_Item(i).getName());
}
// The email is signed. Remove a signature.
MailMessage eml = signedEml.removeSignature();
System.out.println("Signature removed.");
for (int i = 0; i < eml.getAttachments().size(); i++) {
System.out.println("Email attachment" + i + ": " + eml.getAttachments().get_Item(i).getName());
}
}
العمل مع Content-Type و Content-Disposition
توفر Aspose.Email API القدرة على التعامل مع المرفق Content-Type و Content-Disposition من رأس المرفق. المقتطف البرمجي التالي يوضح لك كيفية الحصول على وصف المحتوى وتغييره من المرفق.
عرض معلمات Content-Type و Content-Disposition
المقتطف البرمجي التالي يوضح لك كيفية عرض معلمات Content-Type و Content-Disposition على الشاشة:
void run(MailMessage message) {
// Attachments
for (Attachment attachment : message.getAttachments()) {
ContentDisposition contentDisposition = attachment.getContentDisposition();
printContentDisposition(contentDisposition);
ContentType contentType = attachment.getContentType();
printContentType(contentType);
}
// Linked Resources
for (LinkedResource attachment : message.getLinkedResources()) {
ContentDisposition contentDisposition = attachment.getContentDisposition();
printContentDisposition(contentDisposition);
ContentType contentType = attachment.getContentType();
printContentType(contentType);
}
}
void printContentType(ContentType contentType) {
System.out.println("media-type: " + contentType.getMediaType());
System.out.println("charset: " + contentType.getCharSet());
System.out.println("name: " + contentType.getName());
}
void printContentDisposition(ContentDisposition contentDisposition) {
System.out.println("disposition-type: " + contentDisposition.getDispositionType());
System.out.println("is-inline: " + contentDisposition.getInline());
System.out.println("filename: " + contentDisposition.getFileName());
System.out.println("creation-date: " + contentDisposition.getCreationDate());
System.out.println("modification-date: " + contentDisposition.getModificationDate());
System.out.println("read-date: " + contentDisposition.getReadDate());
System.out.println("size: " + contentDisposition.getSize());
}
استخدام معلمات Content-Type و Content-Disposition مع المرفقات
المقتطف البرمجي التالي يوضح لك كيفية استخدام معلمات Content-Type و Content-Disposition مع مرفق:
MailMessage eml = MailMessage.load(fileName);
Attachment attachment = new Attachment(pdfFileName, new ContentType("application/octet-stream"));
attachment.getContentDisposition().setDispositionType("attachment");
attachment.getContentDisposition().setFileName(fileName);
eml.addAttachment(attachment);