我正在尝试创建一个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进行身份验证?
我正在使用Microsoft Exchange Web Services 1.1 SDK并使用流连接订阅新邮件通知.一切都适用于接收通知但我偶尔会收到有关我的Exchange无法找到我的订阅的错误.
下面是我用来初始化订阅和我使用的事件的代码.
public void Subscribe()
{
var locateMailbox = new Mailbox
{
Address = "myemail"
};
var folderId = new FolderId(WellKnownFolderName.Inbox, locateMailbox);
var foldersToWatch = new[] {folderId};
StreamingSubscription streamingSubscription =
_exchangeService.SubscribeToStreamingNotifications(foldersToWatch, EventType.NewMail);
// Timeout is set at 1 minute intentionally
var streamingConnection = new StreamingSubscriptionConnection(_exchangeService, 1);
streamingConnection.AddSubscription(streamingSubscription);
streamingConnection.OnSubscriptionError += ResolveError;
streamingConnection.OnDisconnect += Reconnect;
streamingConnection.Open();
}
public void Reconnect(object sender, SubscriptionErrorEventArgs disconnectEventArgs)
{
if (!((StreamingSubscriptionConnection)sender).IsOpen)
((StreamingSubscriptionConnection)sender).Open();
}
public void ResolveError(object sender, SubscriptionErrorEventArgs errorEventArgs)
{
var streamingSubscriptionConnection …Run Code Online (Sandbox Code Playgroud) 我正在尝试编写一个简单的邮件发件人类,它将接收一堆参数,并使用这些参数将使用我们的Exchange 2010服务器发送电子邮件.虽然身份验证等似乎工作正常,但当代码实际上尝试发送电子邮件时,我得到以下异常(我认为).我已确保身份验证正在运行,我从会话中获取传输,但仍然失败.任何人都可以对我做错了什么或丢失了吗?谢谢.
例外:
javax.mail.MessagingException: [EOF]
at com.sun.mail.smtp.SMTPTransport.issueCommand(SMTPTransport.java:1481)
at com.sun.mail.smtp.SMTPTransport.issueSendCommand(SMTPTransport.java:1512)
at com.sun.mail.smtp.SMTPTransport.mailFrom(SMTPTransport.java:1054)
at com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:634)
at javax.mail.Transport.send0(Transport.java:189)
at javax.mail.Transport.send(Transport.java:140)
at com.ri.common.mail.util.MailSender.sendHTMLEmail(MailSender.java:75)
at com.ri.common.mail.util.MailSender.main(MailSender.java:106)
Run Code Online (Sandbox Code Playgroud)
相关代码:
import java.util.Properties;
import javax.mail.Authenticator;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
public class MailSender
{
public static void sendHTMLEmail( String fromEmailId, String toEmailId, String host, String hostUserName,
String hostPassword, String mailSubject, String mailBody )
{
// Get system properties.
Properties props = System.getProperties();
// Setup mail server
props.put( "mail.transport.protocol", "smtp" ); …Run Code Online (Sandbox Code Playgroud) 我想查看我在MS Exchange/OWA上收到的所有邮件.有没有办法用Python做到这一点?
但是我怎么能用Python做呢?类似的问题是使用python连接到交换,但我无法理解如何做到这一点.
系统管理员是否需要安装额外的任何内容才能使EWS托管API在Exchange 2010上为客户端工作?目前我只是通过托管API使用AutoDiscover遇到问题所以我开始认为服务器配置不正确.
此处是否有任何管理员具有设置Exchange 2010以允许通过EWS托管API进行访问的任何经验?
exchange-server exchangewebservices ews-managed-api exchange-server-2010
我尝试过这个并没有太大的成功.基本上我需要远程使用EWS登录Exchange.
问题是我不知道用户是否已登录确定,或者凭据是否错误,因为我什么都没收到!如果我提供了错误的凭据,软件就会继续!
有没有我缺少的东西,我已经检查了有关EWS的MSDN内容,它向您展示了如何连接到交换,但没有关于验证凭据的内容!
下面是我目前要连接的代码.
public void connect(string Email, string Password)
{
try
{
_useremail = Email;
_userpass = Password;
// Define the credentials to use.
var credentials = new WebCredentials(_useremail, _userpass);
_ExchangeServer = new ExchangeService(ExchangeVersion.Exchange2010_SP1);
_ExchangeServer.Credentials = credentials;
_ExchangeServer.Url = new Uri(_ExchangeEWSURL);
_ExchangeServer.Timeout = 60;
_ExchangeServer.KeepAlive = true;
_ExchangeConnected = true;
}
catch (Exception ex)
{
_ExchangeConnected = false;
throw ex;
}
}
Run Code Online (Sandbox Code Playgroud)
正如你目前所看到的,我只是在课堂上将bool值设置为true.有任何想法吗?
我已经能够使用php-ews API从Exchange 2010收件箱成功检索未读电子邮件.但是,在我收到电子邮件之后,我想将电子邮件的IsRead属性设置为true,以便下次我收到电子邮件时不会显示这些邮件.
有人这样做过吗?
编辑:
这是我尝试设置IsRead标志的方式:
$message_id = ''; //id of message
$change_key = ''; //change key
$response = $ews->GetItem($request);
//print_r($response);exit;
if( $response->ResponseMessages->GetItemResponseMessage->ResponseCode == 'NoError' &&
$response->ResponseMessages->GetItemResponseMessage->ResponseClass == 'Success' ) {
$a = array();
$message = $response->ResponseMessages->GetItemResponseMessage->Items->Message;
$a['message_body'] = $message->Body->_;
$a['sender'] = $message->From->Mailbox->EmailAddress;
$a['subject'] = $message->ConversationTopic;
$data[] = $a;
//process the message data.
$messageType = new EWSType_MessageType();
$messageType->IsRead = true;
$path = new EWSType_PathToUnindexedFieldType();
$path->FieldURI = 'message:IsRead';
$setField = new EWSType_SetItemFieldType();
$setField->Message = $messageType;
$setField->FieldURI = $path;
$u = new …Run Code Online (Sandbox Code Playgroud) 我正在构建一个可以自动回复某些电子邮件的小客户端.我想为这些回复添加自定义互联网标题.
我试图做的是将扩展属性设置为我收到的电子邮件,并使用该EmailMessage.Reply方法.
但它不起作用.我也试过用EmailMessage.CreateReply.但是,它会创建一个ResponseMessage没有SetExtendedProperty方法的对象.
这是代码的相关部分:
private static readonly ExtendedPropertyDefinition _redFlag = new ExtendedPropertyDefinition(DefaultExtendedPropertySet.InternetHeaders, "X-RED", MapiPropertyType.String);
private static readonly PropertySet _customHeaders = new PropertySet(BasePropertySet.FirstClassProperties, _redFlag);
/* ... some code to connect to Exchange Service ... */
EmailMessage email = EmailMessage.Bind(_service, id, _customHeaders);
email.SetExtendedProperty(_redFlag, "test");
email.Reply(new MessageBody(answer), false);
Run Code Online (Sandbox Code Playgroud) 这可能是一个非常基本的问题,但我还没有找到任何答案。我在 Windows 服务中使用 Exchange Web 服务来监视通过请求订阅发送到我们的 Exchange 2010 服务器的新邮件。一切正常,但问题是如果服务器不可用(例如断电后),则订阅超时,需要重新启动 Windows 服务。有没有办法在超时后续订订阅,或者拉取 EvenType.Status 事件?
到目前为止,这是我的代码:
ExchangeService service;
PullSubscription subscriptionInbox;
private void SetService()
{
service = new ExchangeService(ExchangeVersion.Exchange2010);
service.Url = new Uri("myurl");
service.Credentials = new WebCredentials(emailAddress, pass);
}
private void SetSubscription()
{
if (service == null)
{
SetService();
}
subscriptionInbox = service.SubscribeToPullNotifications(
new FolderId[] { WellKnownFolderName.Inbox },
5,
null,
EventType.NewMail, EventType.Modified);
}
private void DoStuff(object sender, EventArgs e)
{
GetEventsResults eventsInbox = subscriptionInbox.GetEvents();
EmailMessage message;
foreach (ItemEvent itemEvent in eventsInbox.ItemEvents)
{
//Do …Run Code Online (Sandbox Code Playgroud) 我是Powershell脚本的新手,我正在研究用户管理Powershell脚本,但我遇到了一个奇怪的错误.
以下代码在从shell运行时起作用,但在从脚本运行时不起作用:
$UserCredential = Get-Credential
$Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionURI http://servername/Powershell/ -Authentication Kerberos -Credential $UserCredential -AllowRedirection
Import-PSSession $Session
Run Code Online (Sandbox Code Playgroud)
当我Param()在第一行中带有块的脚本中运行它时,它失败并出现以下错误:
Import-PSSession: Cannot bind argument to parameter 'Path' becuase it is an empty string.
Run Code Online (Sandbox Code Playgroud)
Import-PSSession如果我删除我的Param()块,我可以得到工作,但我不知道如何接受我的脚本的命令行参数.如何保留Param()块(或更一般地,接受命令行参数)并仍然能够导入PS会话?
我在试图连接到2010 Exchange服务器的Windows 2008 R2服务器上使用Powershell v2.
更新:
我有一个脚本命名ManageUser.ps1,我从Powershell提示符运行,如
.\ManageUser.ps1 -disableUser -username someuser
Run Code Online (Sandbox Code Playgroud)
该脚本如下所示:
Param(
[switch]$disableUser,
[string]$username
)
$UserCredential = Get-Credential
$Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionURI http://servername/Powershell/ -Authentication Kerberos -Credential $UserCredential -AllowRedirection
Import-PSSession $Session
#more stuff past here... …Run Code Online (Sandbox Code Playgroud) powershell powershell-2.0 windows-server-2008-r2 exchange-server-2010