0

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

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

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();
    }
}
4

2 回答 2

0

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

1) 在 Exchange 2007 服务器上启用 WebDAV。

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

我会推荐选项 2,因为您使用的是 C#,因为有托管 EWS API,它使此类任务比使用 WebDAV 简单得多。它还允许您最终以完全删除 WebDAV 的 Exchange 2010 为目标。

于 2010-05-11T22:54:27.663 回答
0

有两种可能的解决方案:

  1. 尝试使用 POP3 协议而不是 HTTP。您可以尝试自己实现此功能(例如,请参阅“如何在 C# 中使用 POP3”),或者您可以使用支持 SSL 的现成 POP3 库(例如POP3Client)或查看这个问题

  2. 另外,您的错误可能是因为未处理 https 连接。尝试添加此代码:

    ServicePointManager.CertificatePolicy = new AcceptAllCertificatePolicy();

这是类实现:

internal class AcceptAllCertificatePolicy : ICertificatePolicy
{
    public AcceptAllCertificatePolicy()
    {
    }
    public bool CheckValidationResult(ServicePoint sPoint, X509Certificate cert,
    WebRequest wRequest, int certProb)
    {
        //Allways accept
        return true;
    }
}
于 2010-04-15T21:20:28.717 回答