如何连接到Exchange服务器并从共享邮箱(不是我自己的"myname@mycompany.com")中读取邮件.
这是我到目前为止的代码:
//Create a service
ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2007_SP1);
//Autodiscover end point
service.AutodiscoverUrl("someaddress@mycompany.com");
FindFoldersResults folderSearchResults = service.FindFolders(WellKnownFolderName.Inbox, new FolderView(int.MaxValue));
Microsoft.Exchange.WebServices.Data.Folder exchangeMailbox = folderSearchResults.Folders.ToList().Find(
f => f.DisplayName.Equals("NameOfSharedMailboxIwant", StringComparison.CurrentCultureIgnoreCase));
//Set the number of items we can deal with at anyone time.
ItemView itemView = new ItemView(int.MaxValue);
foreach (Microsoft.Exchange.WebServices.Data.Folder folderFromSearchResults in folderSearchResults.Folders)
{
if (folderFromSearchResults.DisplayName.Equals("NameOfSharedMailboxIWant", StringComparison.OrdinalIgnoreCase))
{
Microsoft.Exchange.WebServices.Data.Folder boundFolder =
Microsoft.Exchange.WebServices.Data.Folder.Bind(service, folderFromSearchResults.Id);
SearchFilter unreadSearchFilter =
new SearchFilter.SearchFilterCollection(
LogicalOperator.And, new SearchFilter.IsEqualTo(
EmailMessageSchema.IsRead, false));
//Find the unread messages in the email folder.
FindItemsResults<Item> unreadMessages …Run Code Online (Sandbox Code Playgroud) 我使用EWS ExchangeService来阅读来自outlook的电子邮件......我已经在Console项目和VS2008中编码了...一切正常,因为它......我可以阅读电子邮件.
为了与VS2010变得更加熟悉,我创建了一个控制台项目并将复制复制到VS2010项目.
所以我在Microsoft\Exchange\Web Services\1.1\Microsoft.Exchange.WebServices.dll文件夹中添加了引用"Microsoft.Exchange.WebServices"(版本14.2.51.0).
一切都按原样运行,所以我看到了intellisence,我看到Exhange组件的方法属性等...
使用Microsoft.Exchange.WebServices.Data;
问题: - 当我点击VS2010中的构建按钮时......我收到此错误:命名空间"Microsoft"中不存在类型或命名空间名称"Exchange"(您是否缺少程序集引用?)表单在这里,Exchange程序集的所有方法/属性都被挤压下划线... Intellisence不再适用于Exchange程序集.当我从引用中删除程序集并重新添加时,我再次获得了intellesence以进行Exchange程序集...但是当我单击build时会再次发生:(所以我转到我的代码并键入"Microsoft".我看不到再说一遍......
所以我不明白为什么会这样,它适用于VS2008和VS2010它不起作用?我认为唯一的方法是VS是Framework 3.5,VS2010是V4.0
任何想法在哪里看?以及如何解决这个问题?
但正如我在第一个问题中所说,我在VS2008中使用它,但在按下Build按钮后VS2010不知道Exchange汇编.
如何从Exchange Server2010 uisng托管API中的"公共文件夹"及其"子文件夹"中检索所有项目?
rootfolder = Folder.Bind(service,WellKnownFolderName.PublicFoldersRoot);
rootfolder.Load();
foreach (Folder folder in rootfolder.FindFolders(new FolderView(int.MaxValue)))
{
FindItemsResults<Item> findResults = folder.FindItems(iv);
foreach (Item item in findResults)
{
//get item info;
}
}
Run Code Online (Sandbox Code Playgroud)
"如果我这样做,我不会在它的子文件夹中出现项目..公共文件夹也不支持深度遍历查询..如何从公用文件夹的子文件夹中获取项目???"
我编写了一个小应用程序,它应该自动处理来自公用文件夹的电子邮件.对于每封电子邮件,我们希望在数据库中保存一些元数据.
我想使用ItemID来建立此元数据和特定电子邮件之间的链接,我刚刚发现此ItemId不是常量.例如,如果电子邮件从公用文件夹移动到另一个文件夹,它将收到另一个ItemId.这意味着,电子邮件和相关元数据之间的链接将丢失.
所以,问题是,如何在元数据和特定电子邮件之间建立链接?
我知道如何使用安装在同一台机器上的outlook发送邮件,我正在运行我的代码.现在,这里的要求是访问我的组织的Exchange服务器(Microsoft OWA),以便在asp.net代码中发送邮件.
可能吗?如果是,那么请扔掉一些光.
日Thnx
UPDATE
得到了解决方案.在这里为任何想要帮助的人发布我的工作代码.快乐的编码!
protected void Button1_Click(object sender, EventArgs e)
{
ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2007_SP1);
//service.AutodiscoverUrl("youremailaddress@yourdomain.com");
service.Url = new Uri("https://yourwebmailaddress.com/ews/Exchange.asmx");
service.UseDefaultCredentials = true;
//service.Credentials = new WebCredentials("username", "password");
EmailMessage message = new EmailMessage(service);
message.Subject = "My auto mail from exchange server";
message.Body = "hi everyone !";
message.ToRecipients.Add("brad.pitt@hollywood.com");
message.Save();
message.SendAndSaveCopy();
Label1.Text = "Success !";
}
Run Code Online (Sandbox Code Playgroud)
另一个问题:如何使用microsoft exchange 2003?那里不支持coz EWS.请更新任何想法......?
你好,
我目前正在编写一个客户端来访问Microsoft Exchange服务器并从中读取联系人,约会等.
经过几天的搜索,我已经能够通过PHP的Soap客户端和自定义HTTPS流包装器连接到EWS.这个网站在这一点上给了我很大的帮助.
使用XAMPP在我的Windows 7机器上一切正常
现在我将我的项目上传到Debian 6.0 Squeeze开发机器,它与我的Windows机器完全相同,关于web服务器,php设置,mysql设置等等,但它不再适用了
debian机器可以毫无问题地解析和ping交换服务器
我将实际问题解决到了一定程度,其中cURL无法检索EWS的WSDL文件
它始终收到空响应和401(未授权)状态代码
我使用的凭据是正确的,相同的凭据在我的Windows机器上工作
我提取了有问题的代码并尝试独立运行它,它看起来像这样:
echo "Trying to get https://".$cfg[ 'Exchange.Server' ]."/EWS/Services.wsdl<br>";
$curl = curl_init( 'https://'.$cfg[ 'Exchange.Server' ].'/EWS/Services.wsdl' );
curl_setopt( $curl, CURLOPT_RETURNTRANSFER, true );
curl_setopt( $curl, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1 );
curl_setopt( $curl, CURLOPT_HTTPAUTH, CURLAUTH_NTLM );
curl_setopt( $curl, CURLOPT_USERPWD, $cfg[ 'Exchange.User' ].':'.$cfg[ 'Exchange.Password' ] );
curl_setopt( $curl, CURLOPT_SSL_VERIFYPEER, false );
curl_setopt( $curl, CURLOPT_SSL_VERIFYHOST, false );
echo '<pre>';
$response = curl_exec( $curl );
$info = curl_getinfo( $curl );
var_dump( $info );
var_dump( …Run Code Online (Sandbox Code Playgroud) 我正在构建一个应用程序,用于同步用户的Exchange Server帐户(支持的版本2007-2013)和应用程序之间的数据.
应用程序不能使用模拟(至少不在典型情况下),因为用户可以在任意数量的域和交换服务器上.
我知道我最初不得不要求他们的用户名/电子邮件地址和密码.但是,如果我不需要,我真的不想负责存储这些凭据(即使它们是加密的,我宁愿不加密).
我不确定要问什么问题,所以我要跟这些:
Exchange Server如何进行身份验证?用户的凭据是否按原样直接发送到服务器,还是在通过网络发送之前进行了哈希处理?如果它们被散列,我如何获得/生成此哈希以便在连续的身份验证中重用?
Exchange Server是否发送某种可以在以后重复使用的身份验证令牌(永远,直到密码更改或失效)?
如果您知道该问题的解决方案,这些问题的答案无法解决,请改为提供.
当我通过ExchangeService.LoadPropertiesForItems方法加载多个交换项的属性时,Exchange会跳过响应中的项附件的一些属性:
<t:CalendarItem>
<t:ItemId Id="itemId" ChangeKey="itemChangeKey"/>
<t:Subject>Test appointment</t:Subject>
<t:Attachments>
<t:FileAttachment>
<t:AttachmentId Id="firstAttachmentId"/>
<t:Name>pdf.pdf</t:Name>
<t:Size>94150</t:Size>
<t:LastModifiedTime>2015-08-03T10:54:40</t:LastModifiedTime>
<t:IsInline>false</t:IsInline>
<t:IsContactPhoto>false</t:IsContactPhoto>
</t:FileAttachment>
<t:FileAttachment>
<t:AttachmentId Id="secondAttachmentId"/>
<t:Name>ATT89202</t:Name>
<t:Size>3803738</t:Size>
<t:LastModifiedTime>2015-12-03T16:40:46</t:LastModifiedTime>
<t:IsInline>true</t:IsInline>
</t:FileAttachment>
</t:Attachments>
</t:CalendarItem>
Run Code Online (Sandbox Code Playgroud)
如您所见,上面的回复不包括ContentId属性.但是,当我使用类的Load方法Item来加载单个项的属性时,EWS Managed API生成GetItem具有单个项ID 的相同SOAP请求,并使用扩展的附件属性集响应Exchange:
<t:CalendarItem>
<t:ItemId Id="itemId" ChangeKey="itemChangeKey"/>
<t:Subject>Test appointment</t:Subject>
<t:Attachments>
<t:FileAttachment>
<t:AttachmentId Id="firstAttachmentId"/>
<t:Name>pdf.pdf</t:Name>
<t:ContentId>25F20E449DEC42B67EB3DE58C51E56E3BE0B27F5@1</t:ContentId>
<t:Size>94150</t:Size>
<t:LastModifiedTime>2015-08-03T10:54:40</t:LastModifiedTime>
<t:IsInline>false</t:IsInline>
<t:IsContactPhoto>false</t:IsContactPhoto>
</t:FileAttachment>
<t:FileAttachment>
<t:AttachmentId Id="secondAttachmentId"/>
<t:Name>ATT89202</t:Name>
<t:ContentId>DB969CA378C5F9565E98779626E3BCA3A65FB275@1</t:ContentId>
<t:Size>3803738</t:Size>
<t:LastModifiedTime>2015-12-03T16:40:46</t:LastModifiedTime>
<t:IsInline>true</t:IsInline>
</t:FileAttachment>
</t:Attachments>
</t:CalendarItem>
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,在第二个响应ContentId属性中呈现了此外,当我使用ExchangeService.LoadPropertiesForItems方法时,将单个项目作为第一个参数传递,Exchange也将Attachment.ContentId属性包含在响应中.
有没有办法我可以获得ContentId项目附件的属性而不分别为所有项目加载属性?
EWS使用正文中的默认"When"文本创建约会.请看下面的图片:

我想知道是否有可能删除或隐藏此文本.
这是我使用EWS托管API创建约会的代码
ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2010_SP1, TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time"));
service.Credentials = new WebCredentials("ews_calendar", PASSWORD, "acme");
service.Url = new Uri("https://acme.com/EWS/Exchange.asmx");
Appointment newAppointment = new Appointment(service);
newAppointment.Subject = "Test Subject";
newAppointment.Body = "Test Body";
newAppointment.Start = new DateTime(2012, 07, 19, 17, 00, 0);
newAppointment.End = newAppointment.Start.AddMinutes(30);
newAppointment.RequiredAttendees.Add("first.last@acme.com");
// create new appointment
newAppointment.Save(SendInvitationsMode.SendToAllAndSaveCopy);
Run Code Online (Sandbox Code Playgroud) 我正在使用EWS Java API 1.1.5.我试图让电子邮件发件人如下:
ItemView view = new ItemView(10);
FindItemsResults<Item> findResults = service.findItems(
WellKnownFolderName.Inbox, view);
for (Item item : findResults.getItems()) {
if (item instanceof EmailMessage) {
String senderEmail = ((EmailMessage) item).getSender().getAddress();
System.out.println("Sender Email: " + senderEmail);
}
}
);
Run Code Online (Sandbox Code Playgroud)
但它总是回归null.我也尝试过以下方法:
String senderEmail = ((EmailMessage) item).getFrom().getAddress();
Run Code Online (Sandbox Code Playgroud)
但它也会回归null.我可以看到该电子邮件包含发件人,如:
Test User <testuser@testdomain.com>
Run Code Online (Sandbox Code Playgroud)
它出现在邮件中以及回复电子邮件时.
请告知如何解决此问题.