无法从Exchange获取电子邮件附件

时间:2010-04-15 20:53:18

标签: c# .net exchange-server exchange-server-2007

我收到错误消息“远程服务器返回错误:(501)未实现。”当我尝试使用GET方法从交换获取电子邮件附件时使用HttpWebRequest.GetResponse()。我试图更改HttpVersion并且不认为这是一个权限问题,因为我可以搜索收件箱。

我知道我的凭据是正确的,因为它们用于使用收件箱中的HttpWebRequest.Method = Search来获取HREF(https://mail.mailserver.com/exchange/testemailaccount/Inbox/)。

HREF = https://mail.mailserver.com/exchange/testemailaccount/Inbox/testemail.EML/attachment.csv

示例代码:

HttpWebRequest req = (System.Net.HttpWebRequest)  HttpWebRequest.CreateHREF);                
req.Method = "GET";
req.Credentials = this.mCredentialCache;
string data = string.Empty;
using (WebResponse resp = req.GetResponse())
{
    Encoding enc = Encoding.Default;
    if (resp == null)
    {
        throw new Exception("Response contains no information.");
    }

    using (StreamReader sr = new StreamReader(resp.GetResponseStream(), Encoding.ASCII))
    {
        data = sr.ReadToEnd();
    }
}

2 个答案:

答案 0 :(得分:0)

有两种可能的解决方案:

  1. 尝试使用POP3协议而不是HTTP。您可以尝试自己实现此功能(例如,请参阅"How to POP3 in C#"),也可以使用现成的支持SSL的POP3库(例如POP3Client)或查看this question

  2. 您的错误也可能是因为没有处理https连接。尝试添加此代码:

    ServicePointManager.CertificatePolicy = new AcceptAllCertificatePolicy();

  3. 这是类实现:

    internal class AcceptAllCertificatePolicy : ICertificatePolicy
    {
        public AcceptAllCertificatePolicy()
        {
        }
        public bool CheckValidationResult(ServicePoint sPoint, X509Certificate cert,
        WebRequest wRequest, int certProb)
        {
            //Allways accept
            return true;
        }
    }
    

答案 1 :(得分:0)

您似乎正在对Exchange 2007使用WebDAV。默认情况下,在Exchange 2007中,未启用WebDAV。所以你可以:

1)在Exchange 2007 Server上启用WebDAV。

2)切换到使用Exchange Web服务。

我建议使用选项2,因为你使用的是C#,因为Managed EWS API使得这种任务比使用WebDAV简单得多。它还允许您最终定位已完全删除WebDAV的Exchange 2010。