我正在编写一个应该发送电子邮件的应用程序,最多包含3个附件。
它只是一个非常简单的Web表单,有3个FileUpload控件可以浏览可能的附件。
应用程序部署在webfarm中,当然也可以在服务器端运行。
我设法让它发送电子邮件,但我的附件有问题。现在,我正在使用此过程附加文件:
if (fuAttatchment.HasFile)
{
fuAttatchment.SaveAs(Server.MapPath(fuAttatchment.FileName));
MyMessage.Attachments.Add(new System.Net.Mail.Attachment(Server.MapPath(fuAttatchment.FileName)));
filesize += fuAttatchment.PostedFile.ContentLength;
}
我提交的错误如下:
发送失败:System.UnauthorizedAccessException:访问路径' E:\ Inetpub \ IS \ MSTicketRequest \ wallpaper-3010.jpg'被拒绝。在System.IO .__ Error.WinIOError(Int32 errorCode,String maybeFullPath)at System.IO.FileStream.Init(String path,FileMode mode,FileAccess access,Int32 rights,Boolean useRights,FileShare share,Int32 bufferSize,FileOptions options,SECURITY_ATTRIBUTES secAttrs) System.IO.FileStream上的System.IO.FileStream..ctor(String path,FileMode mode,FileAccess访问,FileShare共享,Int32 bufferSize,FileOptions选项,String msgPath,Boolean bFromProxy)中的,String msgPath,Boolean bFromProxy,Boolean useLongPath)位于System.Web.HttpPostedFile.SaveAs(String filename)的System(Web路径,FileMode模式),位于MSTicketRequest.WebForm1.btnSubmit_Click的System.Web.UI.WebControls.FileUpload.SaveAs(String filename)处。对象发送者,EventArgs e )在C:\ Users \ ggruschka \ Desktop \ ggruschka \ MSTicketRequest \ MSTicketRequest \ Default.aspx.cs:第54行
我无法弄清楚为什么会发生这种情况,可能是我在安全政策或其他类似方面遗漏了一些内容。
非常感谢您的帮助!
答案 0 :(得分:2)
而不是:
fuAttatchment.SaveAs(Server.MapPath(fuAttatchment.FileName));
MyMessage.Attachments.Add(new System.Net.Mail.Attachment(Server.MapPath(fuAttatchment.FileName)));
这样做:
fuAttatchment.SaveAs("somewhere local"+fuAttatchment.FileName);
MyMessage.Attachments.Add(new System.Net.Mail.Attachment("somewhere local"+fuAttatchment.FileName));
您无需在服务器上保存附件!
答案 1 :(得分:1)
看起来运行该站点的用户无权写入目标文件路径。检查目录的安全权限,并确保IIS用户具有写访问权。
答案 2 :(得分:0)
取决于您的应用程序池的类型。但如果是网络服务,你必须添加网络服务。
用于ApplicationPoolIdentity的IIS_Users,但我不确定这个。
http://www.windowsecurity.com/articles/understanding-windows-ntfs-permissions.html
如果这样做有帮助,您可以尝试删除只读选项。
答案 3 :(得分:0)
您通过Gmail帐户发送电子邮件。这是怎么做的(如果它有帮助,我不知道)。 1.您需要在上传附件的文本框中。 2.按钮'浏览'和'OpenFileDialog1'。在“浏览”按钮中放置此
private void btnBrowse_Click(object sender, EventArgs e)
{
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
txt_attachment.Text = openFileDialog1.FileName;
}
}
您需要使用“发送附件”按钮进行放置:
MailMessage mail = new MailMessage(txt_gmail.Text, txt_to.Text, txt_subject.Text, txt_body.Text);
mail.Attachments.Add(new Attachment(txt_attachment.Text));
SmtpClient client = new SmtpClient(txt_server.Text);
client.Port = 587;
client.Credentials = new System.Net.NetworkCredential(txt_gmail.Text, txt_password.Text);
client.EnableSsl = true;
client.Send(mail);
MessageBox.Show("Mail sent", "Succes", MessageBoxButtons.OK);
foreach (Control control in this.Controls)
{
TextBox box = control as TextBox;
if (box != null)
{
box.Text = "";
}
}
}
最后一件事(因为当你这样做时会显示一些错误)你需要创建Gmail.dll文件。以下是链接:Here you can create Gmail.dll
我希望这会有所帮助。