Управление на файлове със съобщения с Aspose.Email.Outlook

Определяне типа на MAPI елемент в PST папка

PST файл обикновено съдържа различни типове данни, като имейл съобщения, календарни събития, контакти и др. MapiItemType клас на Aspose.Email ви позволява да достъпвате и категоризирате различни типове MAPI елементи в PST файл. Кодът по-долу демонстрира как да определите типа на MAPI елемент в PST папка:

import aspose.email as ae

pst = ae.storage.pst.PersonalStorage.from_file("test.pst")
folder = pst.root_folder.get_sub_folder("Calendar")
for messageInfo in folder.enumerate_messages():
    msg = pst.extract_message(messageInfo)

    # Get the class type based on msg.SupportedType
    item_type = msg.supported_type

    # Non-supported type. It cannot be accessed as appropriate item type.
    if item_type == ae.mapi.MapiItemType.NONE:
        print("Item type not supported")
    # An email message.
    elif item_type == ae.mapi.MapiItemType.MESSAGE:
        # You can access to MapiMessage properties there.
        # A subject for example
        print(msg.subject)
    # A contact item. Can be accessed as MapiContact.
    elif item_type == ae.mapi.MapiItemType.CONTACT:
        contact = msg.to_mapi_message_item()
        # You can access to MapiContact properties there. 
        # A name_info.display_name for example. 
        print(contact.name_info.display_name)
    # A calendar item. Can be accessed as MapiCalendar.
    elif item_type == ae.mapi.MapiItemType.CALENDAR:
        calendar = msg.to_mapi_message_item()
        # You can access to MapiCalendar properties there. 
        # A location for example. 
        print(calendar.location)
    # A distribution list. Can be accessed as MapiDistributionList.
    elif item_type == ae.mapi.MapiItemType.DIST_LIST:
        dlist = msg.to_mapi_message_item()
        # You can access to MapiDistributionList properties there
    # A Journal entry. Can be accessed as MapiJournal.
    elif item_type == ae.mapi.MapiItemType.JOURNAL:
        journal = msg.to_mapi_message_item()
        # You can access to MapiJournal properties there
    # A StickyNote. Can be accessed as MapiNote.
    elif item_type == ae.mapi.MapiItemType.NOTE:
        note = msg.to_mapi_message_item()
        # You can access to MapiNote properties there
    # A Task item. Can be accessed as MapiTask.
    elif item_type == ae.mapi.MapiItemType.TASK:
        task = msg.to_mapi_message_item()
        # You can access to MapiTask properties there

Конвертиране на MSG към MIME съобщение

Aspose.Email API предоставя възможност за конвертиране на MSG файл към MIME съобщение, използвайки метода ToMailMessage.

Настройване на времето за изчакване при конвертиране и зареждане на съобщение

За да ограничите времето в милисекунди за конвертиране на съобщение (стойност по подразбиране 3 сек), свойството timeout на MailConversionOptions използва се клас.

Ето как можете да зададете таймаут за процесите на конвертиране и зареждане на съобщения:

import aspose.email as ae

msg = ae.mapi.MapiMessage.load("my.msg")
options = ae.mapi.MailConversionOptions()
options.timeout = 5000
mailMessage = msg.to_mail_message(options)

Като зададете таймаут за процесите на конвертиране и зареждане на съобщения, можете да контролирате максималното време, за което тези операции могат да се изпълняват. След задаване на таймаута можете да продължите с процесите на конвертиране и зареждане на съобщения.

Обработка на Outlook шаблони (OFT) файлове

Зареждане, модифициране и запазване на OFT файл

Outlook шаблони (OFT) предлагат удобен начин за ускоряване на процеса на изпращане на повтарящи се имейл съобщения. Вместо да създавате всеки път нов имейл от нулата, можете да създадете съобщение в Outlook и да го запазите като Outlook шаблон (OFT). По-късно, когато трябва да изпратите подобно съобщение, можете бързо да го генерирате от шаблона. Този подход ви спестява усилията да преписвате същото съдържание в тялото на съобщението, да задавате темата, форматирането и др.

Aspose.Email MailMessage клас предоставя мощен инструмент за зареждане и манипулиране на Outlook шаблонни файлове (OFT). След като Outlook шаблонът бъде зареден в екземпляр на класа MailMessage, можете лесно да актуализирате свойства като подател, получател, тяло на съобщението, тема и различни други атрибути.

import aspose.email as ae

# Load the OFT file
oft_file_path = "your_template.oft"
mail_message = ae.MailMessage.load(oft_file_path)

# Update properties as needed
mail_message.subject = "Updated Subject"
mail_message.body = "Updated body text."

# Save the updated message as an MSG file
msg_file_path = "updated_message.msg"
mail_message.save(msg_file_path, ae.MailMessageSaveType.outlook_message_format_unicode)

print(f"Updated message saved to {msg_file_path}")

След като направите необходимите актуализации, можете да изпратите имейла, използвайки SmtpClient клас:

# Send the email
smtpClient.send(message)

Запазване на Outlook MSG файл като шаблон

За тази цел можете да използвате MailMessage клас за създаване на имейл, след което да се запише като OFT файл. Следният примерен код ще ви покаже как да запишете имейл като Outlook шаблон:

import aspose.email as ae

# Create a new MailMessage
message = ae.MailMessage()
message.subject = "Sample Outlook Template"
message.html_body = "<html><body>This is the body of the email.</body></html>"
message.from_address = ae.MailAddress("your.email@example.com", "Your Name")

# Save the MailMessage as an Outlook Template (OFT) file
oft_file_path = "sample_template.oft"
message.save(oft_file_path, ae.SaveOptions.default_oft)

print(f"Outlook Template saved as {oft_file_path}")

OFT или MSG: Определяне типа на MapiMessage

Следният кодов отрязък илюстрира как да се определи дали зареденото MAPI съобщение представлява стандартно имейл съобщение или Outlook шаблон (OFT):

msg = ae.mapi.MapiMessage.Load("message.msg");
isOft = msg.is_template # returns false

msg = ae.mapi.MapiMessage.Load("message.oft");
isOft = msg.IsTemplate; # returns true

След зареждане на MSG файла, кодът проверява дали свойството is_template на MapiMessaage класът е True или False. Ако върне false, зареденото съобщение е стандартно имейл съобщение, а не Outlook шаблон; ако върне true, съобщението не е стандартно имейл съобщение, а е Outlook шаблон.

Записване на MapiMessage или MailMessage като OFT

Този SaveOptions е абстрактен базов клас за класове, които позволяват на потребителя да зададе допълнителни опции при запазване на MailMessage в определен формат. Следният примерен код демонстрира как да се запази съобщение във формат OFT:

import aspose.email as ae

# Save the MailMessage to OFT format
eml = ae.MailMessage.load("message.eml")

eml.save("message.oft", ae.SaveOptions.default_oft)

# or alternative way 2
save_options = ae.MsgSaveOptions(ae.MailMessageSaveType.outlook_template_format)
eml.save("message.oft", save_options)

# or alternative way 3
save_options = ae.SaveOptions.create_save_options(ae.MailMessageSaveType.outlook_template_format)
eml.save("message.oft", save_options)

# Save the MapiMessage to OFT format
msg = ae.mapi.MapiMessage.load("message.msg")

msg.save("message.oft", ae.SaveOptions.default_oft)

# or alternative way 2
save_options = ae.MsgSaveOptions(ae.MailMessageSaveType.outlook_template_format)
msg.save("message.oft", save_options)

# or alternative way 3
save_options = ae.SaveOptions.create_save_options(ae.MailMessageSaveType.outlook_template_format)
msg.save("message.oft", save_options)

Управление на съобщения с цифрови подписи

Библиотеката предоставя LoadOptions клас, абстрактен базов клас за класове, които позволяват на потребителя да зададе допълнителни опции при зареждане на MailMessage от определен формат. Опцията за запазване на подписа е зададена по подразбиране.

Конвертиране от EML към MSG с запазване на подписа

Следният примерен код демонстрира как да заредите съобщение, да го конвертирате в MSG формат и да го запазите като MSG (подписът се запазва по подразбиране):


import aspose.email as ae

# Load mail message
loadOptions = ae.EmlLoadOptions()
message = ae.MailMessage.load("Message.eml", loadOptions)
# Save as MSG
message.save("ConvertEMLToMSG_out.msg", ae.SaveOptions.default_msg_unicode)

Конвертиране на S/MIME съобщения от MSG към EML

Aspose.Email ви позволява да конвертирате от MSG към EML, запазвайки цифров подпис, както е показано в следния кодов откъс.

import aspose.email as ae

# Load mail message
loadOptions = ae.EmlLoadOptions()
smime_eml = ae.MailMessage.load("smime.eml", loadOptions)

conversion_options = ae.mapi.MapiConversionOptions(ae.mapi.OutlookMessageFormat.UNICODE)
msg = ae.mapi.MapiMessage.from_mail_message(smime_eml, conversion_options)
# Save File to disk
msg.save("ConvertMIMEMessagesFromMSGToEML_out.msg")

Задаване на цветова категория за Outlook MSG файлове

Понякога може да се наложи да разграничите имейли с особено значение и визуално да ги организирате. Библиотеката предлага начин за това чрез задаване на специфичен цвят на елемент от съобщението. Когато зададете цветова категория за елемент, това ви позволява бързо да идентифицирате и намерите свързани елементи. Използвайте FollowUpManager клас за задаване на цветова категория за съобщение, както е в следния примерен код:


import aspose.email as ae

msg = ae.mapi.MapiMessage.load("my.msg")

# Add Two categories
ae.mapi.FollowUpManager.add_category(msg, "Purple Category")
ae.mapi.FollowUpManager.add_category(msg, "Red Category")

# Retrieve the list of available categories
categories = ae.mapi.FollowUpManager.get_categories(msg)

# Remove the specified category and then Clear all categories
ae.mapi.FollowUpManager.remove_category(msg, "Red Category")
ae.mapi.FollowUpManager.clear_categories(msg)

Достъп до информация за последващи действия от MSG файл

Извличане на информация за прочетеното и потвърждение за доставка

Следният примерен код демонстрира как да се извлекат данните за получателите и тяхното състояние за проследяване от Outlook съобщение (MSG) файл:

import aspose.email as ae

msg = ae.mapi.MapiMessage.load("received.msg")

for recipient in msg.recipients:
    print(f"Recipient: {recipient.display_name}")
    print(f"Delivery time:  {recipient.properties[ae.mapi.MapiPropertyTag.RECIPIENT_TRACKSTATUS_TIME_DELIVERY]}")
    print(f"Read time:  {recipient.properties[ae.mapi.MapiPropertyTag.RECIPIENT_TRACKSTATUS_TIME_READ]}")

Създаване на съобщения за препращане и отговор

Aspose.Email предоставя простични начини за създаване на препратени и отговорени съобщения, базирани на съществуващи.

Създаване на съобщение за препращане

Можете да използвате ForwardMessageBuilder Клас, който създава препратено съобщение, като задава изходното съобщение, подател, получатели, тема и тяло. Препратените съобщения могат да включват оригиналното съобщение като прикачен файл или като тяло на препратеното съобщение. Имате гъвкавостта да персонализирате допълнителни свойства като прикачени файлове, хедъри и опции за форматиране. Следният пример с код показва как да създадете препратено съобщение:


import aspose.email as ae

msg = ae.mapi.MapiMessage.load("original.msg")

builder = ae.tools.ForwardMessageBuilder()
builder.addition_mode = ae.tools.OriginalMessageAdditionMode.TEXTPART

forwardMsg = builder.build_response(msg)
forwardMsg.save("forward_out.msg")

Създаване на отговорно съобщение

Този ReplyMessageBuilder Класът се използва за конфигуриране на настройките за отговор, включително изходното съобщение, подател, получатели, режим на отговор, представка на темата и тялото на отговорното съобщение. Отговорните съобщения могат да се създават в различни режими като „Отговор до подателя“ или „Отговор до всички“, в зависимост от вашите изисквания. Можете да персонализирате различни свойства като прикачени файлове, хедъри и опции за форматиране на отговорното съобщение. Следният пример с код показва как да създадете препратено съобщение:

import aspose.email as ae

msg = ae.mapi.MapiMessage.load("original.msg")

builder = ae.tools.ReplyMessageBuilder()

# Set ReplyMessageBuilder Properties
builder.reply_all = True
builder.addition_mode = ae.tools.OriginalMessageAdditionMode.TEXTPART
builder.response_text = "<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>";

replyMsg = builder.build_response(msg)
replyMsg.save("reply_out.msg")