using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
using Microsoft.Exchange.WebServices.Data;
namespace Office365Mail
{
class Program
{
static void Main(string[] args)
{
ExchangeService _service;
try
{
Console.WriteLine("Registering Exchange connection");
_service = new ExchangeService
{
Credentials = new WebCredentials("[email protected]", "xxxxx")
};
}
catch
{
Console.WriteLine("new ExchangeService failed. Press enter to exit:");
return;
}
// This is the office365 webservice URL
_service.Url = new Uri("https://outlook.office365.com/EWS/Exchange.asmx");
// Prepare seperate class for writing email to the database
try
{
Console.WriteLine("Reading mail");
// Read 100 mails
/*foreach (EmailMessage email in _service.FindItems(WellKnownFolderName.Inbox, new ItemView(100)))
{
email.Load(new PropertySet(BasePropertySet.FirstClassProperties, ItemSchema.TextBody));
string recipients = "";
foreach (EmailAddress emailAddress in email.CcRecipients)
{
recipients += ";" + emailAddress.Address.ToString();
}
String message_id = email.InternetMessageId;
String from = email.From.Address;
String body = email.TextBody.ToString();
String cc = recipients;
String subject = email.Subject;
String received_time = email.DateTimeReceived.ToUniversalTime().ToString();
recipients = "";
foreach (EmailAddress emailAddress in email.ToRecipients)
{
recipients += ";" + emailAddress.Address.ToString();
}
Console.WriteLine("message_id", message_id);
Console.WriteLine("from", from);
Console.WriteLine("cc", cc);
Console.WriteLine("subject", subject);
Console.WriteLine("body", body);
Console.WriteLine("received_time", received_time);
}*/
/*FindItemsResults<Item> findResults;
findResults = _service.FindItems(
WellKnownFolderName.Inbox,
new ItemView(10));
foreach (Item item in findResults.Items)
{
Console.WriteLine(item.Subject);
}*/
//GetAllItems(_service);
MailItem[] mailArr = GetUnreadMailFromInbox(_service);
Console.WriteLine("Exiting");
}
catch (Exception e)
{
Console.WriteLine("An error has occured. \n:" + e.Message);
}
}
public class MailItem
{
public string From;
public string[] Recipients;
public string Subject;
public string Body;
}
public static MailItem[] GetUnreadMailFromInbox(ExchangeService service)
{
FindItemsResults<Item> findResults = service.FindItems(WellKnownFolderName.Inbox, new ItemView(10));
PropertySet GetItemsPropertySet = new PropertySet(BasePropertySet.FirstClassProperties, EmailMessageSchema.From, EmailMessageSchema.ToRecipients, EmailMessageSchema.CcRecipients, EmailMessageSchema.Attachments, EmailMessageSchema.HasAttachments);
GetItemsPropertySet.RequestedBodyType = BodyType.Text;// Plain Text
ServiceResponseCollection<GetItemResponse> items =
service.BindToItems(findResults.Select(item => item.Id), GetItemsPropertySet);
foreach (var item in items) {
var From = ((EmailAddress)item.Item[EmailMessageSchema.From]).Address;
var To = ((EmailAddressCollection)item.Item[EmailMessageSchema.ToRecipients]).Select(recipient => recipient.Address).ToArray();
var CC = ((EmailAddressCollection)item.Item[EmailMessageSchema.CcRecipients]).Select(recipient => recipient.Address).ToArray();
var Subject = item.Item.Subject;
var Body = item.Item.Body.ToString();
if (item.Item.HasAttachments)
{
var attachments = item.Item.Attachments;
foreach (var attachment in attachments)
{
if (attachment is FileAttachment && !attachment.IsInline)
{
FileAttachment fileAttachment = attachment as FileAttachment;
//FileStream theStream = new FileStream("C:\\temp\\Stream_" + fileAttachment.Name, FileMode.OpenOrCreate, FileAccess.ReadWrite);
//fileAttachment.Load(theStream);
Console.WriteLine(attachment.Name);
MemoryStream stream = new MemoryStream();
fileAttachment.Load(stream);
byte[] bytes = new byte[0];
BinaryReader r = new BinaryReader(stream);
r.BaseStream.Seek(0, SeekOrigin.Begin); //将文件指针设置到文件开
bytes = r.ReadBytes((int)r.BaseStream.Length);
}
}
}
Console.WriteLine();
}
/*return items.Select(item =>
{
return new MailItem()
{
From = ((Microsoft.Exchange.WebServices.Data.EmailAddress)item.Item[EmailMessageSchema.From]).Address,
Recipients = ((Microsoft.Exchange.WebServices.Data.EmailAddressCollection)item.Item[EmailMessageSchema.ToRecipients]).Select(recipient => recipient.Address).ToArray(),
Subject = item.Item.Subject,
Body = item.Item.Body.ToString(),
};
}).ToArray();*/
MailItem[] arr = null;
return arr;
}
private static ExtendedPropertyDefinition TextBodyProperty = new ExtendedPropertyDefinition(0x1000, MapiPropertyType.String);
private static ExtendedPropertyDefinition HtmlBodyProperty = new ExtendedPropertyDefinition(0x1013, MapiPropertyType.Binary);
private static void GetAllItems(ExchangeService exchangeService)
{
var offset = 0;
const int pageSize = 100;
FindItemsResults<Item> result;
do
{
var view = new ItemView(pageSize, offset)
{
PropertySet = new PropertySet(BasePropertySet.IdOnly)
{
HtmlBodyProperty
}
};
result = exchangeService.FindItems(WellKnownFolderName.Inbox, view);
foreach (var item in result)
{
object body;
foreach (ExtendedProperty extendedProperty in item.ExtendedProperties)
{
Console.WriteLine(" Extended Property Name: " + extendedProperty.PropertyDefinition.Name);
Console.WriteLine(" Extended Property Value: " + extendedProperty.Value);
}
/*if (item.ExtendedProperties.TryGetValue(HtmlBodyProperty, out body))
{
Console.WriteLine("item.Body = {0}", Encoding.UTF8.GetString(Convert.FromBase64String((string)body)));
}*/
}
offset += pageSize;
} while (result.MoreAvailable);
}
}
}