Exchange server 以编程方式在Exchange Online收件箱中创建邮件

Exchange server 以编程方式在Exchange Online收件箱中创建邮件,exchange-server,office365,exchangewebservices,Exchange Server,Office365,Exchangewebservices,从几天以来一直面临着一个有关EWS的问题。所以我的情况是, 我打算通过编程同步GMAIL和EXCHANGE ONLINE。这就是我所做的 _service = new ExchangeService(ExchangeVersion.Exchange2013); _service.TraceEnabled = true; _service.Credentials = new WebCredentials("admin@xyz.onmicrosoft.com", "p

从几天以来一直面临着一个有关EWS的问题。所以我的情况是,

我打算通过编程同步GMAIL和EXCHANGE ONLINE。这就是我所做的

_service = new ExchangeService(ExchangeVersion.Exchange2013);
        _service.TraceEnabled = true;
        _service.Credentials = new WebCredentials("admin@xyz.onmicrosoft.com", "password");
        _service.Url = new Uri("https://outlook.office365.com/EWS/Exchange.asmx");
        _service.ImpersonatedUserId = new ImpersonatedUserId(ConnectingIdType.SmtpAddress, "xyz@xyz.onmicrosoft.com");

        EmailMessage message = new EmailMessage(_service);
        Random r = new Random();
        message.Subject = "Email Message";
        message.From = new EmailAddress("xyz@gmail.com");
        message.Sender = new EmailAddress("xyz@gmail.com");
        message.Body = new MessageBody(BodyType.HTML, "<HTML><body><h1>This is a voice mail.</h1></BODY></HTML>");
        message.ToRecipients.Add(new EmailAddress(""));
        message.Save(WellKnownFolderName.Inbox);
  • 使用Gmail API连接到Gmail
  • 从gmail获取邮件获取邮件正文、收件人、发件人、附件和 所有其他事情
  • 使用EWS 2.0连接到Exchange online
现在的问题是,我如何在收件箱中创建一封看起来像来自发件人的传入邮件的电子邮件

这是我所做的代码

_service = new ExchangeService(ExchangeVersion.Exchange2013);
        _service.TraceEnabled = true;
        _service.Credentials = new WebCredentials("admin@xyz.onmicrosoft.com", "password");
        _service.Url = new Uri("https://outlook.office365.com/EWS/Exchange.asmx");
        _service.ImpersonatedUserId = new ImpersonatedUserId(ConnectingIdType.SmtpAddress, "xyz@xyz.onmicrosoft.com");

        EmailMessage message = new EmailMessage(_service);
        Random r = new Random();
        message.Subject = "Email Message";
        message.From = new EmailAddress("xyz@gmail.com");
        message.Sender = new EmailAddress("xyz@gmail.com");
        message.Body = new MessageBody(BodyType.HTML, "<HTML><body><h1>This is a voice mail.</h1></BODY></HTML>");
        message.ToRecipients.Add(new EmailAddress(""));
        message.Save(WellKnownFolderName.Inbox);
\u服务=新的ExchangeService(ExchangeVersion.Exchange2013);
_service.TraceEnabled=true;
_service.Credentials=新的WebCredentials(“admin@xyz.onmicrosoft.com“,”密码“);
_service.Url=新的Uri(“https://outlook.office365.com/EWS/Exchange.asmx");
_service.ImpersonatedUserId=新的ImpersonatedUserId(ConnectingIdType.SmtpAddress,“xyz@xyz.onmicrosoft.com");
EmailMessage=新的EmailMessage(_服务);
随机r=新随机();
message.Subject=“电子邮件”;
message.From=新电子邮件地址(“xyz@gmail.com");
message.Sender=新电子邮件地址(“xyz@gmail.com");
message.Body=newmessagebody(BodyType.HTML,“这是一封语音邮件”);
message.ToRecipients.Add(新电子邮件地址(“”);
message.Save(WellKnownFolderName.Inbox);
这种方式是在收件箱中创建电子邮件,但它显示为草稿邮件。我不想要它,我想要它看起来像收到的邮件


我做错了什么吗?

在保存消息之前,需要设置几个属性

// Set a delivery time
ExtendedPropertyDefinition PidTagMessageDeliveryTime =
    new ExtendedPropertyDefinition(0x0E06, MapiPropertyType.SystemTime);
DateTime deliveryTime = DateTime.Now; // Or whatever deliver time you want
message.SetExtendedProperty(PidTagMessageDeliveryTime, deliveryTime);

// Indicate that this email is not a draft. Otherwise, the email will appear as a 
// draft to clients.
ExtendedPropertyDefinition PR_MESSAGE_FLAGS_msgflag_read = new ExtendedPropertyDefinition(3591, MapiPropertyType.Integer);
message.SetExtendedProperty(PR_MESSAGE_FLAGS_msgflag_read, 1);

这些属性在项目保存后不可设置,因此在第一次
保存
调用之前进行设置非常重要。

嘿,Jason,还有一个问题。我还想在EmailMessage中创建对话。但是,我看到conversationID属性是只读的。我们有什么办法可以做到吗?