代码之家  ›  专栏  ›  技术社区  ›  user279521

通过编程将文档附加到ASP.NET中的电子邮件

  •  0
  • user279521  · 技术社区  · 14 年前

    我正在使用下面的行通过我的ASP.NET应用程序中的c中的codebehind生成电子邮件:

    ClientScript.RegisterStartupScript(this.GetType(), "FormLoading", "window.open('mailto:AccountsPayable@xyzCorp.com?subject=Invoice for ABC Corp - " + ddlJobCode.SelectedItem.Text + " - Supporting Documentation', 'email');", true);
    

    是否也可以通过编程方式包括附件(如果用户通过浏览按钮指向附件文档)?

    2 回复  |  直到 14 年前
        1
  •  2
  •   Kelsey    14 年前

    不,我不这么认为…这个 mailto 功能由浏览器传递给默认客户机。你没有与客户交谈的其他机制,甚至不知道 电子邮件 甚至成功了。

    如果你想添加一个附件,你很可能需要代表他们发送电子邮件,并在服务器端完成。

    编辑: 要做到这一点,服务器端需要发布页面,以便 Browse 按钮下拉文件服务器端,然后您需要构造电子邮件并通过您自己的SMTP服务器发送出去。下面是一个快速的代码示例,您可能需要对其进行调整以适应特定的情况:

    在服务器端 OnClick 汉德勒:

    protected void btnSendEmail_Click(object sender, EventArgs e)
    {  
        // this will get the file from your asp:FileUpload control (browse button)
        HttpPostedFile file = (HttpPostedFile)(fuAttachment.PostedFile);
        if ((file != null) && (file.ContentLength > 0))
        {
            // You should probably check file size and extension types and whatever
            // other validation here as well
            byte[] uploadedFile = new byte[file.ContentLength];
            file.InputStream.Read(uploadedFile, 0, file.ContentLength);
    
            // Save the file locally
            int lastSlash = file.FileName.LastIndexOf('\\') + 1;
            string fileName = file.FileName.Substring(lastSlash,
                file.FileName.Length - lastSlash);
    
            string localSaveLocation = yourLocalPathToSaveFile + fileName;
            System.IO.File.WriteAllBytes(localSaveLocation, uploadedFile);
    
            try
            {
                // Create and send the email
                MailMessage msg = new MailMessage();
                msg.To = "someone@somewhere.com";
                msg.From = "somebody@somebody.com";
                msg.Subject = "Attachment Test";
                msg.Body = "Test Attachment";
                msg.Attachments.Add(new MailAttachment(localSaveLocation));
    
                // Don't forget you have to setup your SMTP settings
                SmtpMail.Send(msg);
            }
            finally
            {
                // make sure to clean up the file that was uploaded
                System.IO.File.Delete(localSaveLocation);
            }
        }
    }
    
        2
  •  2
  •   Martin Harris    14 年前

    不使用 mailto 方法否,因为它没有任何附件选项。

    你可以让用户填写一个表格 create and send the email on the server side 允许您添加附件和更多内容(在我看来,这也比真正支持使用Webmail服务的人的mailto链接更专业),但是,这将通过服务器的电子邮件服务而不是客户机将使用的电子邮件服务发送电子邮件。