C# 通过smptclient和C使用uri的电子邮件附件

C# 通过smptclient和C使用uri的电子邮件附件,c#,uri,email-attachments,smtpclient,C#,Uri,Email Attachments,Smtpclient,我必须执行以下操作:我的文档存储在服务器上。我得到的唯一路径是URI 我想拿到文件,但我一直在拿403 string[] myArray = context.Request.QueryString["ItemsArray"].Split(','); MailMessage m = new MailMessage(new MailAddress("bart@schelkens.be"), new MailAddress("bart@

我必须执行以下操作:我的文档存储在服务器上。我得到的唯一路径是URI 我想拿到文件,但我一直在拿403

string[] myArray = context.Request.QueryString["ItemsArray"].Split(',');

            MailMessage m = new MailMessage(new MailAddress("bart@schelkens.be"),
                    new MailAddress("bart@schelkens.be")
                    );

            m.Subject = "Emailing documents";

            foreach (string path in myArray)
            {
                using (WebClient wb = new WebClient())
                {
                    wb.UseDefaultCredentials = false;
                    wb.Credentials = new NetworkCredential(_userName, _passWord);
                    var stream = wb.OpenRead(path);

                    m.Attachments.Add(new Attachment(stream, ""));
                }
            }

            string mailBody = "Dear<BR/> Please find attached a new version of the documents.";
            mailBody += "<BR/>";

            m.Body = mailBody;
            m.IsBodyHtml = true;

            SmtpClient smtp = new SmtpClient("hybrid.kaneka.be");
            smtp.EnableSsl = false;

            smtp.Send(m);
或者有没有其他方法可以从网站上获取我的文档,然后邮寄出去


在SharePoint中,我创建了我自己的按钮,该按钮使用js文件转到我的ashx以发送我的文档。

在打开流之前尝试添加以下行:

wb.Headers.Add("User-Agent: Other");
它可能是禁止的,因为您的服务器不认为您是受信任的客户机,并且在没有用户代理的情况下阻止所有连接

[编辑1]

如果尝试从SharePoint下载文件,则必须使用以下位置的SharePointOnline凭据:

您必须在某个地方定义凭据:

const string username = "username";
const string password = "password";
var securedPassword = new SecureString();
foreach (var c in password.ToCharArray()) securedPassword.AppendChar(c);
var credentials = new SharePointOnlineCredentials(username, securedPassword);
之后,您可以在WebClient中使用此凭据:

[编辑2]

如果您在内部部署环境中打开,则可以使用网络凭据。尝试使用以下方法:

wb.Credentials = new NetworkCredential("DOMAINNAME\username", "password");
[编辑3]

也许你的服务器需要一个真正的用户代理。因为如果你的证件出了问题,就会有一个401未经授权的密码。例如,请尝试:

wb.Headers.Add("user-agent", " Mozilla/5.0 (Windows NT 6.1; WOW64; rv:25.0) Gecko/20100101 Firefox/25.0");

提供文档所在文件夹的读/写权限


当前该文件夹没有读/写权限,这就是为什么当您尝试附加文档时,它返回403禁止的错误。

仍然收到相同的错误:远程服务器返回错误:403禁止。@BartSchelkens您在这一行收到错误:var stream=wb.OpenReadpath?如果您在一个域中,请尝试在您的网络中添加该域凭据,或者回答“帮助”。因为服务器使用NTL身份验证,所以他使用了CredentialCache。仍然会收到相同的错误。这些文件托管在SharePoint中。这可能是导致问题的原因吗?如果运行应用程序的帐户是sharepoint网站中的有效用户,则可以尝试使用UseDefaultCredentials。如果这没有帮助,可能会有帮助。但是当我直接转到URI时,我会得到文档,因为它是由Sharepoint管理的。若我并没有错,那个么你们正试图附加来自IIS的文件。因此,只需根据以下链接尝试分配权限:
wb.Headers.Add("user-agent", " Mozilla/5.0 (Windows NT 6.1; WOW64; rv:25.0) Gecko/20100101 Firefox/25.0");