如何将我的pdf放在邮件附件中

时间:2013-05-24 15:07:11

标签: c#

我需要一个代码帮助才能将我的.pdf文件发送到电子邮件中。 我试图找到一个解决方案,但我找不到一个。 抱歉我的英文不好

这是我的pdf创建代码

SaveFileDialog dialog1 = new SaveFileDialog();
            dialog1.Title = "Saving pdf ";
            dialog1.Filter = "PDF Files (*.pdf)|*.pdf|All files (*.*)|*.*";
            dialog1.RestoreDirectory = true;
            if (dialog1.ShowDialog() == DialogResult.OK)
            {
                MessageBox.Show(dialog1.FileName);
            }
           /*  DialogResult result = folderBrowserDialog1.ShowDialog();
             if (result == DialogResult.OK)
             {
                 string caminho = folderBrowserDialog1.SelectedPath;
                 var pasta2 = caminho.Replace(@"\", @"\\");*/
                 Document doc = new Document(PageSize.A4.Rotate(), 10, 10, 42, 35);
                 PdfWriter writertest = PdfWriter.GetInstance(doc, new FileStream(dialog1.FileName, FileMode.Create));
                 doc.Open();
                 PdfPTable table = new PdfPTable(itemDataGridView.Columns.Count);
                 for (int j = 0; j < itemDataGridView.Columns.Count; j++)
                 {
                     table.AddCell(new Phrase(itemDataGridView.Columns[j].HeaderText));
                 }
                 table.HeaderRows = 1;
                 for (int i = 0; i < itemDataGridView.Rows.Count; i++)
                 {
                     for (int k = 0; k < itemDataGridView.Columns.Count; k++)
                     {
                         if (itemDataGridView[k, i].Value != null)
                         {
                             table.AddCell(new Phrase(itemDataGridView[k, i].Value.ToString()));
                         }
                     }
                 }
                 doc.Add(table);
                 doc.Close();

这是我的电子邮件发送代码

 Pesquisar_Items pesquisar = new Pesquisar_Items();
            var client = new SmtpClient("smtp.live.com", 25);
            client.EnableSsl = true;
            client.Credentials = new NetworkCredential("josepedrobrito@hotmail.com", "*******");
            var mail = new MailMessage();
            mail.From = new MailAddress("josepedrobrito@hotmail.com");
            mail.To.Add(textBox1.Text);
            mail.IsBodyHtml = true;
            mail.Subject = textBox2.Text;
            string mailBody = "<table width='100%' style='border:Solid 1px Black;'>"; ;
            foreach (DataGridViewRow row in itemDataGridView.Rows)
            {
                mailBody += "<tr>";
                foreach (DataGridViewCell cell in row.Cells)
                {
                    mailBody += "<td>" + cell.Value + "</td>";
                }
                mailBody += "</tr>";
            }
            mailBody += "</table>";
            client.Send(mail);
            MessageBox.Show("O email send ");
            this.Close();

1 个答案:

答案 0 :(得分:5)

您创建了Attachment,然后将其添加到Attachments集合中:

// Create the attachment.
Attachment data = new Attachment(file, MediaTypeNames.Application.Pdf);
// Add the file attachment to this e-mail message.
message.Attachments.Add(data);

file是您要附加到电子邮件的文件的路径名,从FileSaveDialog返回。

您可能还想做更多事情,例如添加时间戳信息等,您需要致电

data.Dispose();

发送邮件后。

当您从代码创建文件时,您可以将其保存到临时目录,然后在发送电子邮件后将其从磁盘中删除,而无需用户查看对话框或输入文件名。

Source

您只需附加内存流即可直接从内存创建附件:

using (MemoryStream memoryStream = new MemoryStream())
{
    PdfWriter writertest = PdfWriter.GetInstance(doc, memoryStream);
    // Write contents of Pdf here

    // Set the position to the beginning of the stream.
    memoryStream.Seek(0, SeekOrigin.Begin);

    // Create attachment
    ContentType contentType = new ContentType();
    contentType.MediaType = MediaTypeNames.Application.Pdf;
    contentType.Name = fileNameTextBox.Text;
    Attachment attachment = new Attachment(memoryStream, contentType);

    // Add the attachment
    message.Attachments.Add(attachment);

    // Send Mail via SmtpClient
    smtpClient.Send(message);
}

Source