电子邮件服务的自动附件文件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);
Attachment attachment = new Attachment(“C:\ Users \ Administrator \ Downloads \ GridViewExport”, MediaTypeNames.Application.Octet); mm.Attachments.Add(attachment);谢谢先生,但是我得到了这个错误,因为路径中的\是无法识别的转义序列。 – Chris
您需要在路径前面指定** @ **。像'@“C:\ Users \ Administrator \ Downloads \ GridViewExport”' –
System.IO.DirectoryNotFoundException:'找不到路径的一部分'C:\ Users \ Administrator \ Downloads \ GridViewExport'。我得到一个错误,说它无法找到文件C:\ Users \ Administrator \ Downloads,这是我的文件位置,文件名GridViewExport是正确的 – Chris