-1

我正在编写一个应该发送电子邮件的应用程序,最多包含 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) 在 System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs , String msgPath, Boolean bFromProxy, Boolean useLongPath) at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, FileOptions options, String msgPath, Boolean bFromProxy) at System.IO.FileStream ..ctor(String path, FileMode mode) at System.Web.HttpPostedFile.SaveAs(String filename) at System.Web.UI.WebControls.FileUpload.SaveAs(String filename) at MSTicketRequest.WebForm1。

我无法弄清楚为什么会发生这种情况,可能我错过了一些关于安全策略或类似的东西。

非常感谢您的帮助!

4

4 回答 4

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)); 

您无需将附件保存在服务器上!

于 2012-10-04T22:21:05.803 回答
1

看起来运行该站点的用户无权写入目标文件路径。检查目录的安全权限并确保 IIS 用户具有写入权限。

于 2012-10-04T21:46:28.663 回答
0

取决于您的应用程序池的类型。但如果是网络服务,你必须添加网络服务。
ApplicationPoolIdentity 的 IIS_Users 但我不确定这个。 http://www.windowsecurity.com/articles/understanding-windows-ntfs-permissions.html

如果这没有帮助,您可以尝试删除只读选项。

于 2012-10-04T21:57:52.507 回答
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 文件。这是执行此操作的链接:在这里您可以创建 Gmail.dll

我希望这有帮助。

于 2013-07-22T07:30:46.357 回答