Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 401使用EWS连接到邮箱时未经授权的访问_C#_Exchangewebservices - Fatal编程技术网

C# 401使用EWS连接到邮箱时未经授权的访问

C# 401使用EWS连接到邮箱时未经授权的访问,c#,exchangewebservices,C#,Exchangewebservices,以下是我试图解决的场景:我可以通过我的用户“myuser”访问服务邮箱“serviceMail”。因此,这不是我的个人邮箱,而是我公司的另一个邮箱设置,我们将电子邮件发送到该邮箱,用于各种用途。我知道我可以访问它,因为我已经在Outlook中添加了这个邮箱,我可以像平常一样检查收件箱,查看自己的电子邮件。我正试图使用EWS编写一个c#程序,从“serviceMail”收件箱中的电子邮件中获取附件。我在尝试查找项目时获得“401未授权访问权限”。我做错了什么?我的代码如下 以下是我连接到该服务的方

以下是我试图解决的场景:我可以通过我的用户“myuser”访问服务邮箱“serviceMail”。因此,这不是我的个人邮箱,而是我公司的另一个邮箱设置,我们将电子邮件发送到该邮箱,用于各种用途。我知道我可以访问它,因为我已经在Outlook中添加了这个邮箱,我可以像平常一样检查收件箱,查看自己的电子邮件。我正试图使用EWS编写一个c#程序,从“serviceMail”收件箱中的电子邮件中获取附件。我在尝试查找项目时获得“401未授权访问权限”。我做错了什么?我的代码如下

以下是我连接到该服务的方式:

  public ExchangeService ConnectToExchangeServer()
    {



        const string strMailbox = "serviceMail@abc.com";
        const string strLoginUser = "mysuer@abc.com";
        const string strLogingUserpwd = "pwd";
        const string strO365Url = "https://outlook.office365.com/EWS/Exchange.asmx";


        try
        {
            exchange = new ExchangeService(ExchangeVersion.Exchange2013_SP1);
            exchange.Credentials = new WebCredentials(strLoginUser, strLogingUserpwd, "sabra.com");
          //  exchange.AutodiscoverUrl(strMailbox,RedirectionUrlValidationCallback);

            exchange.Url = new Uri(strO365Url);

            return exchange;

        }
        catch (Exception ex)
        {
        }

        return exchange;
    }
下面是尝试查找项目的代码

  ExchangeService service = ga.ConnectToExchangeServer();


        TimeSpan ts = new TimeSpan(0, -1, 0, 0);
        DateTime date = DateTime.Now.Add(ts);
        SearchFilter.IsGreaterThanOrEqualTo filter = new SearchFilter.IsGreaterThanOrEqualTo(ItemSchema.DateTimeReceived, date);

        if (service != null)
        {
            //FindItemsResults<Item> findResults = ga.exchange.FindItems(WellKnownFolderName.Inbox, filter, new ItemView(50));

            //FindItemsResults<Item> findResults = ga.exchange.FindItems(WellKnownFolderName.Inbox,);

            // Return a single item.
            ItemView view = new ItemView(1);

            string querystring = "HasAttachments:true Subject:'Message with Attachments' Kind:email";

            // Find the first email message in the Inbox that has attachments. This results in a FindItem operation call to EWS.
            FindItemsResults<Item> findResults = service.FindItems(WellKnownFolderName.Inbox, querystring, view);

            foreach (Item item in findResults)
            {

                EmailMessage message = EmailMessage.Bind(ga.exchange, item.Id);
                if (message.HasAttachments && message.Attachments[0] is FileAttachment)
                {
                    FileAttachment fileAttachment = message.Attachments[0] as FileAttachment;
                    //Change the below Path   
                    fileAttachment.Load(@"D:\\QlikData\\Lean\\EmailExtract" + fileAttachment.Name);
                    // lblAttach.Text = "Attachment Downloaded : " + fileAttachment.Name;
                }
                else
                {
                    // MessageBox.Show("No Attachments found!!");
                }
            }
            if (findResults.Items.Count <= 0)
            {
                //lstMsg.Items.Add("No Messages found!!");

            }
        }
ExchangeService服务=ga.ConnectToExchangeServer();
TimeSpan ts=新的TimeSpan(0,-1,0,0);
DateTime date=DateTime.Now.Add(ts);
SearchFilter.IsGreaterThanOrEqualTo filter=新的SearchFilter.IsGreaterThanOrEqualTo(ItemSchema.DateTimeReceived,date);
if(服务!=null)
{
//FindItemsResults findResults=ga.exchange.FindItems(WellKnownFolderName.Inbox,过滤器,新项目视图(50));
//FindItemsResults findResults=ga.exchange.FindItems(WellKnownFolderName.Inbox,);
//返回单个项目。
ItemView视图=新的ItemView(1);
string querystring=“HasAttachments:true主题:'messagewithattachments'种类:email”;
//在收件箱中查找第一封包含附件的电子邮件。这将导致对EWS的FindItem操作调用。
FindItemsResults findResults=service.FindItems(WellKnownFolderName.Inbox、querystring、view);
foreach(findResults中的项目)
{
EmailMessage=EmailMessage.Bind(ga.exchange,item.Id);
如果(message.hasaattachments&&message.Attachments[0]是文件附件)
{
FileAttachment FileAttachment=邮件。附件[0]作为文件附件;
//更改下面的路径
加载(@“D:\\QlikData\\Lean\\EmailExtract”+fileAttachment.Name);
//lblAttach.Text=“附件下载:”+fileAttachment.Name;
}
其他的
{
//MessageBox.Show(“未找到附件!!”;
}
}

如果(findResults.Items.Count您的代码将只访问呼叫帐户邮箱的收件箱。您需要使用FolderId重载指定要访问的实际邮箱。请参阅中的“显式访问和EWS托管API”


您还错误地在凭据中指定了用户名,例如,您应该使用低级格式netbiosdomain\username,或者使用UPN并在这种情况下省略域。请参阅

您是否解决了此问题?我在MacOS上也遇到了同样的问题。