PowerShell - 如何将Office 365电子邮件另存为文件?

时间:2016-07-20 13:46:00

标签: rest powershell office365 outlook.com

我想知道是否可以在Office 365中将电子邮件另存为.msg或.eml文件?

这就是我使用REST API的原因。

$credential = get-credential
$messagesuri = 'https://outlook.office365.com/api/v1.0/me/folders/Inbox/messages'

$messages = Invoke-RestMethod -Uri $messagesuri -Credential $credential
$messages.value | % {
    $mailitem = $_
    $subject = $mailitem.Subject
    $messageid = $mailitem.Id

    $messageid

    // Save Message ($messageid) as File
    // ???????
}

先谢谢。 问候Dat。

2 个答案:

答案 0 :(得分:1)

// C# Console Application, using EWS connecting to Office 365
// Working Solution (Prove of Concept).
using System;
using System.IO;
using Microsoft.Exchange.WebServices.Data; // Download Library using Nugget.

namespace EwsClient
{
    class Program
    {
        static void Main(string[] args)
        {
            string myemail = ""; // Replace with your email address
            string password = ""; // Replace with your email password

            ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2013_SP1);
            service.Credentials = new WebCredentials(myemail, password);
            service.UseDefaultCredentials = false;
            service.AutodiscoverUrl(myemail, RedirectionUrlValidationCallback);
            //service.TraceEnabled = true;
            //service.TraceFlags = TraceFlags.All;
            ItemView itemsView = new ItemView(1);
            string querystring = "Kind:email";

            FindItemsResults<Item> itemResults = service.FindItems(WellKnownFolderName.Inbox, querystring, view: itemsView);

            foreach (var message in itemResults)
            {
                Console.WriteLine(message.Subject);

                using (FileStream fileStream = File.Open(@"C:\message.msg", FileMode.Create, FileAccess.Write))
                {
                    message.Load(new PropertySet(ItemSchema.MimeContent));
                    MimeContent mc = message.MimeContent;
                    fileStream.Write(mc.Content, 0, mc.Content.Length);
                }
            }
        }

        private static bool RedirectionUrlValidationCallback(string redirectionUrl)
        {
            // The default for the validation callback is to reject the URL.
            bool result = false;

            Uri redirectionUri = new Uri(redirectionUrl);

            // Validate the contents of the redirection URL. In this simple validation
            // callback, the redirection URL is considered valid if it is using HTTPS
            // to encrypt the authentication credentials. 
            if (redirectionUri.Scheme == "https")
            {
                result = true;
            }
            return result;
        }
    }
}

答案 1 :(得分:0)

添加到@Dat答案。以此替换foreach代码。现在,已保存的电子邮件将在Outlook中打开。

String[] invalidStings = { "\\", ",", ":", "*", "?", "\"", "<", ">", "|" };
        foreach (var message in itemResults)
        {
            EmailMessage email = message as EmailMessage;
            email.Load(new PropertySet(BasePropertySet.FirstClassProperties, EmailMessageSchema.MimeContent));
            Byte[] content = email.MimeContent.Content;
            String fileName = email.Subject;

            // Replace all the invaild strings. 
            foreach (String str in invalidStings)
            {
                fileName = fileName.Replace(str, "");
            }

            fileName = Path.Combine("DestinationPath", fileName + ".eml");
            File.WriteAllBytes(fileName, content);
            Console.WriteLine($"Saving: {email.Subject}");
        }