发送带附件的电子邮件而不保存附件 c# / ASP.NET

Sending Email with attachment without saving the attachment c# / ASP.NET

我正在尝试发送一封包含附件的电子邮件,该附件将由用户上传,然后发送到管理员邮箱。

我已经在 IE 11 上正确配置了这个,但是 Chrome/Firefox 它提供的文件路径有限制。由于 IE 11 提供了完整的文件路径,它允许我的函数工作。

Chrome/Firefox 是否有可能解决这个问题。

邮件消息代码:

protected void Submit_Click(object sender, EventArgs e)
    {

        using (MailMessage message = new MailMessage())
        {
                if (Attachment1.HasFile == false)
                {
                    message.From = new MailAddress(Environment.UserName + "@domain");
                    message.To.Add(new MailAddress("MyEmail"));
                    message.IsBodyHtml = true;
                    message.Subject = "New Request from self service portal: " + Summary.Text.ToString();
                    message.Body = "Customer Name:</br>Customer Username:" + Environment.UserName + "</br>" + DetailedSummary.Text.ToString();
                    SmtpClient client = new SmtpClient();
                    client.Host = "IP ADDRESS";
                    client.Send(message);
                } else {
                    message.From = new MailAddress(Environment.UserName + "@domain");
                    message.To.Add(new MailAddress("myemail"));
                    string file = Attachment1.PostedFile.FileName;
                    message.Attachments.Add(new Attachment(file));
                    message.IsBodyHtml = true;
                    message.Subject = "New Request from self service portal: " + Summary.Text.ToString();
                    message.Body = "Customer Name:</br>Customer Username:" + Environment.UserName + "</br>" + DetailedSummary.Text.ToString();
                    SmtpClient client = new SmtpClient();
                    client.Host = "IP ADDRESS";
                    client.Send(message);
            }

        }
    }

这是用户指定要上传的文件,而不是每次都上传的静态文件。意思是,我需要 FileUpload 的文件路径。

HttpPostedFile.FileName "Gets the fully qualified name of the file on the client."

在您的机器上进行开发期间(并使用实际发送完整路径的浏览器,而适当的浏览器不会这样做)可能会起作用,但是一旦您将其部署到服务器上,它就会崩溃。

最简单的方法是使用 new Attachment(Attachment1.PostedFile.InputStream, "attachmentname") constructor 将上传的文件直接流式传输到您的附件中,而无需您自己临时保存。