我们在Exchange 2007公用文件夹中设置了公司的公共日历.我可以使用下面的代码检索当天的个人日历约会.我在网上搜索了高低,我找不到有人从公共文件夹日历中检索日历信息的例子.
它似乎应该是可行的,但我不能为我的生活让它工作.如何修改以下代码以访问日历?我对通过asp.net创建任何约会不感兴趣,只是检索一个简单的列表.我也对任何其他建议持开放态度.谢谢.
ADDED BOUNTY
- 我不可能是唯一需要这样做的人.让我们为后代解决这个问题.
由于无知而再次更新
- 我没有提到我正在研究的项目是.NET 2.0(你觉得非常重要吗?).
*将我的代码解决方案BELOW*
-我已经取代了我原来的代码示例与该结束了工作的代码.非常感谢奥列格提供的代码,以查找公用文件夹,这是最难的部分.我已经从这里修改使用示例代码http://msexchangeteam.com/archive/2009/04/21/451126.aspx使用更简单的FindAppointments方法.
这个简单的示例返回带约会的html字符串,但您可以将其用作基础来根据需要进行自定义.您可以在下面的答案中看到我们的来回.
using System;
using Microsoft.Exchange.WebServices.Data;
using System.Net;
namespace ExchangePublicFolders
{
public class Program
{
public static FolderId FindPublicFolder(ExchangeService myService, FolderId baseFolderId,
string folderName)
{
FolderView folderView = new FolderView(10, 0);
folderView.OffsetBasePoint = OffsetBasePoint.Beginning;
folderView.PropertySet = new PropertySet(FolderSchema.DisplayName, FolderSchema.Id);
FindFoldersResults folderResults;
do
{
folderResults = myService.FindFolders(baseFolderId, folderView);
foreach (Folder folder in folderResults)
if (String.Compare(folder.DisplayName, folderName, StringComparison.OrdinalIgnoreCase) == 0)
return folder.Id;
if (folderResults.NextPageOffset.HasValue)
folderView.Offset = folderResults.NextPageOffset.Value;
} …
Run Code Online (Sandbox Code Playgroud) c# asp.net web-services exchange-server-2007 ews-managed-api
当我尝试使用EWS API发送电子邮件时,出现以下错误:(in message.Send();
)
请求失败.远程服务器返回错误:(401)未经授权.
我的代码如下:
ExchangeService exchangeService = new ExchangeService(ExchangeVersion.Exchange2007_SP1);
//WebService Uri
try
{
exchangeService.Url = new Uri("https://exchangeserver/ews/exchange.asmx");
}
catch (Exception ex)
{
throw new Exception(string.Format("WebService Uri:" + ex));
}
//Credentials
try
{
exchangeService.Credentials = new WebCredentials("user@domain", "pwd", "domain");
}
catch (Exception ex)
{
throw new Exception(string.Format("Credentials:" + ex));
}
//Send a mail
try
{
EmailMessage message = new EmailMessage(exchangeService);
message.Subject = "Test";
message.Body = "Test";
message.ToRecipients.Add("destination@domain");
message.Save();
message.Send();
}
catch (Exception ex)
{
throw ex;
}
Run Code Online (Sandbox Code Playgroud)
我在本网站上阅读了有关此问题的其他帖子,但他们无法解决我的问题.
c# exchange-server-2007 unauthorized exchangewebservices http-status-code-401
我正在使用ExchangeService WebService API(Microsoft.Exchange.WebServices.Data
)但我找不到任何Close
或Dispose
方法.
是不是必须以某种方式关闭连接?
我的方法看起来像这样:
public void CheckMails()
{
ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2007_SP1);
IMAPCredentials creds = new IMAPCredentials();
service.Credentials = new NetworkCredential(creds.User, creds.Pass, creds.Domain);
service.AutodiscoverUrl(creds.User + "@example.com");
// not the real code from here on but you'll get the idea...
// var emails = service.FindItems();
// emails[0].Load();
// emails[0].Attachments[0].Load();
// ...
}
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汇编.
当您在网上搜索时,您会找到"如何以编程方式阅读电子邮件"的简单答案...... Al网站正在解释大部分相同的内容,例如此页面. http://omegacoder.com/?p=454
// depends from Exchange server version
service.Credentials = new NetworkCredential("MDR", "password", "zzz");
service.AutodiscoverUrl("mdr@zzz.be");
object o = service.FindItems(WellKnownFolderName.Inbox, new ItemView(10));
FindItemsResults<Item> findResults = service.FindItems(WellKnownFolderName.Inbox, new ItemView(10));
foreach (Item item in findResults.Items)
{
Console.WriteLine(item.Subject);
}
Run Code Online (Sandbox Code Playgroud)
它在执行autodiscoverURL行时失败.错误显示"无法找到自动发现服务".
所以我进一步搜索了这个网站来自微软https://www.testexchangeconnectivity.com/#&&/wEXAQUBcwUBME93h2+JjI0+MV2gTqcRL0g43z9m这里你可以测试你的邮件服务器....当我传递参数时,我得到以下错误. ...
但我还是不明白问题是什么?我是否需要向DNS添加记录?有人可以帮忙吗?
Attempting to test potential Autodiscover URL https://autodiscover.zzz.be/AutoDiscover/AutoDiscover.xml
Testing of this potential Autodiscover URL failed.
Test Steps
Attempting to resolve the host name autodiscover.ncb.be in DNS.
The host name resolved successfully.
Additional Details
IP addresses returned: 213.246.192.205
Testing TCP …
Run Code Online (Sandbox Code Playgroud) 所以我用给定的ICalUid创建Exchange(2007)约会:
var app = new Appointment(svc);
app.ICalUid = id;
app.Subject = "Test Appointment";
app.Recurrence = new Recurrence.DailyPattern(DateTime.Now, 3);
app.RequiredAttendees.Add("mstum@example.com");
app.AllowNewTimeProposal = false;
app.Body = new MessageBody(BodyType.HTML, "This is a <b>Test!</b>");
app.Save();
Run Code Online (Sandbox Code Playgroud)
稍后,我想更新该约会,此时我需要通过ICalUid找到它.
但是,似乎没有办法做到这一点?我只能使用Appointment.Bind
Exchange ID,这是我在更新时没有的(存储它非常不切实际)
我可以使用相同的ICalUid创建一个新的约会,它看起来像一个更新,但再次要求接受/拒绝,而不是只显示"无需更新".
有没有正确的方法呢?
.net exchange-server exchange-server-2007 exchangewebservices
在IMAP中,消息编号基于消息被放入文件夹的时间(即文件夹中的第一条消息是1,第二条消息是2,等等).但是,此排序不考虑消息的接收日期.我关心的是比文件夹的第1号消息更早的消息,即用户手动(而不是在它被接收到系统中时)移动到文件夹中的消息.
我不能只收到每条消息的收到日期,因为这是非常糟糕的.
我以为我可以进行JavaMail搜索以获取收到的日期早于第一条消息的接收日期的所有消息(并且同样进行搜索以获取所有收到的日期比第一条消息的接收日期更新的消息...会很多,但是虽然我需要处理所有旧的,但我只需要处理一些较新的,(并且通过流程,我的意思是下载它的标题).
但是,当我使用搜索时,它似乎无法正常工作.
Message[] messages = csqFolder.getMessages();
if (messages != null && messages.length > 0) {
Date receivedDate = messages[0].getReceivedDate();
log.trace("Message 1 receivedDate: <" + receivedDate.toString() + ">");
SearchTerm msgsOlderThanOETFirst =
new ReceivedDateTerm(DateTerm.LT, receivedDate);
SearchTerm msgsNewerThanFirst =
new ReceivedDateTerm(DateTerm.GT, receivedDate);
Message[] oldMsgs = csqFolder.search(msgsOlderThanOETFirst, messages);
log.trace("Size of oldMsgs: <" + oldMsgs.length + ">");
Message[] newMsgs = csqFolder.search(msgsNewerThanFirst, messages);
log.trace("Size of newMsgs: <" + newMsgs.length + ">");
Run Code Online (Sandbox Code Playgroud)
但是,当我运行这些搜索时,它似乎没有给出正确的结果.
在包含8条消息的文件夹中,其中7条消息的日期时间为8月5日中午12点左右,但文件夹中的第一条消息是8月5日下午4点,我们将看到以下内容:
Message 1 receivedDate: <Fri Aug …
Run Code Online (Sandbox Code Playgroud) 我正在尝试编写powershell脚本,将用户从交换列表中隐藏起来.
我能够找到以下命令:
Set-Mailbox -Identity [user id here] -HiddenFromAddressListsEnabled $true
它没有给我一个错误信息,当我运行命令两次时,我得到以下警告:
警告:命令已成功完成,但未修改"[user id here]"的设置.
这可能意味着该命令确实有效.
但是当我转到Exchange管理控制台并打开用户配置文件时," hide user from exchange address lists
"复选框已关闭.
可能是什么原因?
我使用:Python 2.7.15,OpenSSL 1.1.0h(2018年3月27日),MS Exchange 2007.
我的MS交换允许仅在STARTTLS之后发送登录/通过.
在python中我尝试连接到服务器,如:
from stmplib import SMTP
conn = SMTP(server,port)
conn.set_debuglevel(1)
conn.starttls()
conn.login(username, password)
conn.quit()
Run Code Online (Sandbox Code Playgroud)
最后我得到错误starttls
:
/python2.7/ssl.py",第847行,在do_handshake self._sslobj.do_handshake()中
问题是遵循python尝试与TLS v1.2建立连接,但Exchange仅支持TLS v.1.0.我尝试了端口25和587.
当我尝试通过控制台openssl
应用程序连接并登录到服务器时,对于具有TLS v.1.0的两个端口都可以正常工作:
openssl s_client -connect sever:587 -starttls smtp -no_tls1_2 -no_tls1_1 -crlf
服务器答案:
SSL handshake has read 1481 bytes and written 530 bytes
--- New, TLSv1/SSLv3, Cipher is RC4-MD5 Server public key is 2048 bit Secure Renegotiation IS supported Compression: NONE Expansion: NONE No ALPN negotiated SSL-Session:
Protocol : TLSv1
Cipher : …
Run Code Online (Sandbox Code Playgroud) 我即将编写一个ews应用程序来连接与另一个日历程序的交换.发生了什么,我怎么知道,哪些约会在交换中被删除?有办法告诉吗?我在API和文档中找不到它.
提前致谢.
c# ×5
.net ×1
asp.net ×1
dispose ×1
email ×1
imap ×1
jakarta-mail ×1
java ×1
openssl ×1
powershell ×1
python ×1
smtplib ×1
starttls ×1
unauthorized ×1
web-services ×1