PowerShell - 如何将 Office 365 电子邮件另存为文件?
PowerShell - How to save Office 365 email as File?
我想知道是否可以在 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
// ???????
}
提前致谢。
问候数据
// 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;
}
}
}
添加到@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}");
}
我想知道是否可以在 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
// ???????
}
提前致谢。 问候数据
// 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;
}
}
}
添加到@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}");
}