电子邮件服务的自动附件文件c#asp.net

电子邮件服务的自动附件文件c#asp.net

问题描述:

我已经从我的gridview生成了一个PDF文件。我的任务是将我生成的PDF文件发送到特定的电子邮件,而无需用户使用上传控件并选择我生成的PDF文件。我能够用用户手动浏览并选择PDF作为附件的普通电子邮件,有没有办法实现PDF文件自动附加到电子邮件?电子邮件服务的自动附件文件c#asp.net

SqlDataSource SqlDataSource1 = new SqlDataSource(); 
     SqlDataSource1.ID = "SqlDataSource1"; 
     this.Page.Controls.Add(SqlDataSource1); 
     SqlDataSource1.ConnectionString = System.Configuration.ConfigurationManager.ConnectionStrings["conString"].ConnectionString; 
     SqlDataSource1.SelectCommand = "SELECT Id, msgContent, msgDate from Message where msgDate between '" + dateFrom + "' and '" + dateTo + "'"; 
     GridView1.DataSource = SqlDataSource1; 
     GridView1.DataBind(); 

这我的数据绑定到gridview。

StringWriter sw = new StringWriter(); 
     HtmlTextWriter hw = new HtmlTextWriter(sw); 
     GridView1.RenderControl(hw); 
     StringReader sr = new StringReader(sw.ToString()); 

     Document pdfDoc = new Document(PageSize.A4, 10f, 10f, 10f, 0f); 
     HTMLWorker htmlworker = new HTMLWorker(pdfDoc); 

     using (MemoryStream ObjememoryStream = new MemoryStream()) 
     { 
      PdfWriter.GetInstance(pdfDoc, ObjememoryStream); 
      pdfDoc.Open(); 
      htmlworker.Parse(sr); 
      pdfDoc.Close(); 
      byte[] Filebytes = ObjememoryStream.ToArray(); 
      ObjememoryStream.Close(); 
      using (MemoryStream inputData = new MemoryStream(Filebytes)) 
      { 
       using (MemoryStream outputData = new MemoryStream()) 
       { 
        string PDFFileword = txtPassword.Text;//you can also generate Dynamic word 
        PdfReader reader = new PdfReader(inputData); 
        PdfEncryptor.Encrypt(reader, outputData, true, PDFFileword, PDFFileword, PdfWriter.ALLOW_SCREENREADERS); 
        Filebytes = outputData.ToArray(); 
        Response.ContentType = "application/pdf"; 
        Response.AddHeader("content-disposition", "attachment;filename=GridViewExport.pdf"); 
        Response.Cache.SetCacheability(HttpCacheability.NoCache); 
        Response.BinaryWrite(Filebytes); 
        Response.End(); 
        GridView1.AllowPaging = true; 
        GridView1.DataBind(); 
       } 
      } 
     } 

这是我生成PDF文件的方式。

using (MailMessage mm = new MailMessage(txtEmail.Text, txtTo.Text)) 
     { 
      mm.Subject = txtSubject.Text; 
      mm.Body = txtBody.Text; 
      if (fuAttachment.HasFile) 
      { 
       string FileName = Path.GetFileName(fuAttachment.PostedFile.FileName); 
       mm.Attachments.Add(new Attachment(fuAttachment.PostedFile.InputStream, FileName)); 
      } 
      mm.IsBodyHtml = false; 
      SmtpClient smtp = new SmtpClient(); 
      smtp.Host = "smtp.gmail.com"; 
      smtp.EnableSsl = true; 
      NetworkCredential NetworkCred = new NetworkCredential(txtEmail.Text, txtPassword.Text); 
      smtp.UseDefaultCredentials = true; 
      smtp.Credentials = NetworkCred; 
      smtp.Port = 587; 
      smtp.Send(mm); 
      ClientScript.RegisterStartupScript(GetType(), "alert", "alert('Email sent.');", true); 
     } 

这是我通过上传控件发送邮件的方式附件文件。 “fuAttachment”是我的上传控件的ID,有没有办法让附件自动变成?任何帮助表示赞赏,感谢先进的人。

您只需要创建新的Attachment实例,并将其添加到mailmessage实例中的attatchments集合,如下所示。

如果你有文件物理存储在硬盘驱动器上,你知道路径则:

Attachment attachment = new Attachment("FILE_PATH", 
        MediaTypeNames.Application.Octet); 
mm.Attachments.Add(attachment); 

,如果你有内存字节数组,那么:

Stream stream = new MemoryStream(byteArray); 
Attachment attachment = new Attachment(stream, MediaTypeNames.Application.Octet); 
mm.Attachments.Add(attachment); 

,如果您有流,则:

Attachment attachment = new Attachment(fileStream, MediaTypeNames.Application.Octet); 
mm.Attachments.Add(attachment); 
+0

Attachment attachment = new Attachment(“C:\ Users \ Administrator \ Downloads \ GridViewExport”, MediaTypeNames.Application.Octet); mm.Attachments.Add(attachment);谢谢先生,但是我得到了这个错误,因为路径中的\是无法识别的转义序列。 – Chris

+0

您需要在路径前面指定** @ **。像'@“C:\ Users \ Administrator \ Downloads \ GridViewExport”' –

+0

System.IO.DirectoryNotFoundException:'找不到路径的一部分'C:\ Users \ Administrator \ Downloads \ GridViewExport'。我得到一个错误,说它无法找到文件C:\ Users \ Administrator \ Downloads,这是我的文件位置,文件名GridViewExport是正确的 – Chris