我试图使用Exchange Web服务来访问日历数据,但我似乎无法弄清楚如何访问已被其他用户共享日历时,这不是他们的默认日历.假设在我公司其他用户创建的共享日历,并与我分享它,我甚至无法找到日历文件夹,更遑论在它获得的项目.
这些问题的答案可以在EWS托管API(版本1.0或1.1)而言,服务对象直接,或甚至只是需要被发送到服务器的SOAP消息的XML主体.我只需要某种起点.任何帮助将不胜感激.
exchange-server calendar exchangewebservices ews-managed-api
当我尝试通过EWS发送带有内嵌图像(附件)的HTML消息时,这个问题就暴露出来了.但是我退回到最简单的形式,发现我甚至无法发送HTML消息.
我使用的是C#,.NET 4,EWS API 1.1,Exchange Server 2010 SP1.
这是我的代码的核心:
ExchangeConnection = new ExchangeService(ExchangeVersion.Exchange2010_SP1);
ExchangeConnection.Credentials = new WebCredentials(Username, Password, Domain);
ExchangeConnection.Url = new Uri(ServiceURI);
string MailBody = @"<html><head></head><body>
This is a <b>test</b> <strong>HTML</strong> <em>message</em>.<br><br>
Did it work?</body></html>";
NewMessage = new EmailMessage(ExchangeConnection);
NewMessage.Subject = "Test HTML Message #001";
NewMessage.Body = MailBody;
NewMessage.Body.BodyType = BodyType.HTML;
NewMessage.ToRecipients.Add("tony@zierniemann.com");
NewMessage.Send();
Run Code Online (Sandbox Code Playgroud)
使用该代码,我收到一条消息,内容如下:
Subject: Test HTML Message #001
Thread-Topic: Test HTML Message #001
Thread-Index: Acuy3U6nqQTa4W4ZQu6ueHPb2nPDPg==
Date: Thu, 13 Jan 2011 04:49:48 +0000
Message-ID: <2FDB41070D0AC24DB5BC8B80751063630B74A5@xxxxx.com>
Accept-Language: en-US
Content-Language: en-US …Run Code Online (Sandbox Code Playgroud) exchange-server exchangewebservices ews-managed-api exchange-server-2010
我有一个收件箱设置作为交换, hello@mycompany.com
此外,还有一个别名news@mycompany.com,因此所有发送到该news地址的电子邮件最终都会出现在hello收件箱中.
理想情况下,我希望能够使用EWS告知发送电子邮件的别名.
当我向news@mycompany.comMicrosoft Outlook 发送电子邮件并检查邮件的Internet标头时,To:标题会读取To: Hello <news@mycompany.com>我想要查看的内容.
但是,使用EWS时,当我查看邮件的ToRecipients属性时,报告的电子邮件地址始终是主SMTP地址的电子邮件地址.此外,Webservices.Data.Item 的InternetMessageHeaders属性不包含该To:属性.我似乎也看不到使用EWSEditor检查消息的所有属性的正确地址.
这个论坛帖子的答案似乎表明,
...有关邮件发送到的实际电子邮件地址的信息存储在收件人集合中,您无法在EWS中访问(在exportmessage之外)...
我将如何以编程方式执行此操作,以便找到正确的To:地址?
exchange-server exchange-server-2007 exchangewebservices ews-managed-api
我正在编写一个Java应用程序来使用Exchange Web服务下载电子邮件.我正在使用Microsoft的ewsjava API来执行此操作.
我可以获取电子邮件标题.但是,我无法使用此API下载电子邮件附件.以下是代码段.
FolderId folderId = new FolderId(WellKnownFolderName.Inbox, "mailbox@example.com");
findResults = service.findItems(folderId, view);
for(Item item : findResults.getItems()) {
if (item.getHasAttachments()) {
AttachmentCollection attachmentsCol = item.getAttachments();
System.out.println(attachmentsCol.getCount()); // This is printing zero all the time. My message has one attachment.
for (int i = 0; i < attachmentsCol.getCount(); i++) {
FileAttachment attachment = (FileAttachment)attachmentsCol.getPropertyAtIndex(i);
String name = attachment.getFileName();
int size = attachment.getContent().length;
}
}
}
Run Code Online (Sandbox Code Playgroud)
item.getHasAttachments()是返回true,但是attachmentsCol.getCount()是0.
我可以根据主题从邮箱中获取电子邮件.我不确定根据收到的日期提取电子邮件的格式是什么?
string message = string.Empty;
Item item = Item.Bind(exService, messageID, PropertySet.FirstClassProperties);
if (item is EmailMessage)
{
EmailMessage em = (EmailMessage)item;
string strMsg = string.Empty;
//strMsg = strMsg + item.Id.ToString();
//strMsg = strMsg + item.DateTimeReceived;
strMsg = strMsg + "*********************** New Fiscal Email received on " + item.DateTimeReceived +" ************************************" + Environment.NewLine;
if (em.Body.Text.Contains("BRANDON"))
{
strMsg = strMsg + em.Body.Text.ToString();
}
strMsg = strMsg + "*********************** End of Email Body ************************************" + Environment.NewLine;
message = strMsg;
}
Run Code Online (Sandbox Code Playgroud) 将ViewSize在构造级别指定.我找到了构造函数的文档,但没有说明最大大小有多大.
我正在尝试创建一个ASP.NET(.NET 3.5)网站,通过Exchange Web服务连接到我们的Exchange 2010服务器,当我定义用户名,密码和域进行身份验证时,我能够连接到EWS,但我希望,如果可能,不在我的代码中包含登录详细信息.
在IIS中,我已在站点的web.config中为站点启用了集成Windows身份验证<authentication mode="Windows"/>.
以下代码是我一直在使用的代码:
svc.UseDefaultCredentials = True
svc.Credentials = New WebCredentials()
svc.Url = New Uri(svcURL)
Run Code Online (Sandbox Code Playgroud)
使用上面的代码我收到的消息:
将请求作为没有邮箱的帐户发出时,必须为任何可识别的文件夹ID指定邮箱主SMTP地址.
当我尝试使用svc.Credentials = CredentialCache.DefaultNetworkCredentials(代替svc.Credentials = New WebCredentials())时,我收到错误消息:
无法将类型为"System.Net.SystemNetworkCredential"的对象强制转换为"Microsoft.Exchange.WebServices.Data.ExchangeCredentials".
如上所述,唯一有效的方法是通过硬编码用户登录详细信息来定义要通过身份验证的用户凭据,我宁愿不这样做: svc.Credentials = New WebCredentials("username","password","domain")
有没有人能够使用ASP.NET网站中当前登录用户的凭据对EWS进行身份验证?
我正在尝试使用subscribeToPullNotifications检测收件箱中的新电子邮件,如下所示:
PullSubscription subscription = service.subscribeToPullNotifications(
folder, 1, null, EventType.NewMail);
GetEventsResults events = subscription.getEvents();
System.out.println("####### EVENTS: "
+ events.getItemEvents().toString());
for (ItemEvent itemEvent : events.getItemEvents()) {
if (itemEvent.getEventType() == EventType.NewMail) {
EmailMessage message = EmailMessage.bind(service,
itemEvent.getItemId());
System.out.println("######## NEW EMAIL MESSAGE IS: "
+ message.getSubject());
}
}
Run Code Online (Sandbox Code Playgroud)
但events.getItemEvents()总是空的,即使我可以在收件箱中看到新的电子邮件.还有如何在应用程序运行时始终重复上述代码,以便每分钟检查一次新的电子邮件.
我需要遍历收件箱中的所有未读邮件,并为每封电子邮件下载第一个附件,我的代码可以工作,但仅限第一封电子邮件,为什么?
/* load all unread emails */
SearchFilter sf = new SearchFilter.SearchFilterCollection(LogicalOperator.And, new SearchFilter.IsEqualTo(EmailMessageSchema.IsRead, false));
FindItemsResults<Item> findResults = service.FindItems(WellKnownFolderName.Inbox, sf, new ItemView(1));
/* loop through emails */
foreach (EmailMessage item in findResults)
{
item.Load();
/* download attachment if any */
if (item.HasAttachments && item.Attachments[0] is FileAttachment)
{
Console.WriteLine(item.Attachments[0].Name);
FileAttachment fileAttachment = item.Attachments[0] as FileAttachment;
/* download attachment to folder */
fileAttachment.Load(downloadDir + fileAttachment.Name);
}
/* mark email as read */
item.IsRead = true;
item.Update(ConflictResolutionMode.AlwaysOverwrite);
}
Console.WriteLine("Done");
Run Code Online (Sandbox Code Playgroud)
在我的收件箱中,它设置了第一个要阅读的电子邮件,但是sript然后停止并写入"完成".控制台窗口.怎么了 ?
嗨,我想访问分配给我的邮箱的电子邮件,但它不是我的Exchange Server中的主邮箱.
我能够获得分配给我的邮箱服务器的详细信息,但我有一个没有邮箱的用户.
我想知道如何访问它.
我读了一些与假冒或委托相关的内容.
这不起作用,因为新用户没有主邮件.
- 如何获取分配给用户的邮箱数量?
- 如何为用户获取特定的邮箱电子邮件?
我能够访问我的邮箱,但是当我尝试访问没有主邮箱的用户的邮箱时,我无法访问.
ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2010);
service.Credentials = new WebCredentials("user-name", "password", "domain");
//Autodiscover end point
service.Url = new System.Uri("https://exchange-url/EWS/Exchange.asmx");
FolderId SharedMailbox = new FolderId(WellKnownFolderName.Inbox, "maibox-name");
ItemView itemView = new ItemView(1000);
service.FindItems(SharedMailbox, itemView);
Run Code Online (Sandbox Code Playgroud)
我能做什么?