2017-03-10 6 views
0

Ich erstelle ein PDF mit iutxtsharp. Die PDF-Datei wird normalerweise erstellt und an den Browser gesendet, damit der Benutzer die Datei einfach auf seinem Computer speichern kann. Jetzt möchte ich dieses generierte PDF automatisch auch per Email versenden. Ich habe versucht, das Dokument zu konvertieren, bevor es in den Kontext und an eine E-Mail anhängen, aber ohne Erfolg. Mein Code ist:E-Mail-Anhang senden erstellt in HttpContext.Current.Response

HttpContext.Current.Response.Clear(); 
HttpContext.Current.Response.ContentType = "application/pdf"; 
HttpContext.Current.Response.AddHeader("content-disposition", "attachment;filename=mypdf.pdf"); 
HttpContext.Current.Response.Cache.SetCacheability(HttpCacheability.NoCache); 

StringWriter stringWriter = new StringWriter(); 
HtmlTextWriter htmlTextWriter = new HtmlTextWriter(stringWriter); 

string imagepath = Server.MapPath(".") + "/assets/myimages/myimage.png"; 

Document Doc = new Document(PageSize.A4, 10f, 10f, 10f, 10f); 
HTMLWorker htmlparser = new HTMLWorker(Doc); 
PdfWriter pdfwriter= PdfWriter.GetInstance(Doc, HttpContext.Current.Response.OutputStream); 

Doc.Open(); 
iTextSharp.text.Image image = iTextSharp.text.Image.GetInstance(imagepath); 
image.ScalePercent(106f,90f); 
Doc.Add(image); 
//adding elements using itextshart pdf 
AddPDf(pdfwriter,Doc); 

//to add html in pdf 
// htmlparser.Parse(stringReader); 


OnEndPage(pdfwriter, Doc); 
Doc.Close(); 
email_send(Doc.ToString()); 
HttpContext.Current.Response.End(); 


public void email_send(string filename) 
    { 
     MailMessage mail = new MailMessage(); 
     SmtpClient SmtpServer = new SmtpClient("smtp.gmail.com"); 
     mail.From = new MailAddress("[email protected]"); 
     mail.To.Add("[email protected]"); 
     mail.Subject = "Test Mail - 1"; 
     mail.Body = "mail with attachment"; 

     System.Net.Mail.Attachment attachment; 
     attachment = new System.Net.Mail.Attachment((Server.MapPath(filename.ToString()))); 
     mail.Attachments.Add(attachment); 

     SmtpServer.Port = 587; 
     SmtpServer.Credentials = new System.Net.NetworkCredential("[email protected]", "mypass"); 
     SmtpServer.EnableSsl = true; 

     SmtpServer.Send(mail); 

    } 

Der Fehler, den ich bekommen ist:

Could not find file   

    {"Could not find file 'C:\\Admin\\iTextSharp.text.Document'.":"C: \\Admin\\iTextSharp.text.Document"} 
+0

_ "aber mit keinem Erfolg" _ - bitte lesen [fragen] und erklären, was _does_ passiert. Warum rufen Sie 'Response.End()' auf, haben Sie versucht, die Dokumentation für diese Methode zu lesen? – CodeCaster

+0

Ich habe meinen Code bearbeiten. Bitte überprüfen Sie – focus

+0

Jetzt sollten Sie den Titel ändern, da Sie keine E-Mail nach Response.End mehr senden. Aber was ist los? E-Mail wird nicht gesendet? Dokument ist nicht angehängt? –

Antwort

0

Der Grund für den Fehler ist, dass Sie den Doc Objektverweis auf Ihre email_send Methode vorbei sind, anstelle des Dateipfades.
Ich habe eine etwas ähnliche E-Mail-Lösung gemacht, indem ich das Dokument zu einem MemoryStream gelesen habe und das als Anhang weitergab.

public void email_send(Document d) 
{ 
    MailMessage mail = new MailMessage(); 
    SmtpClient SmtpServer = new SmtpClient("smtp.gmail.com"); 
    mail.From = new MailAddress("[email protected]"); 
    mail.To.Add("[email protected]"); 
    mail.Subject = "Test Mail - 1"; 
    mail.Body = "mail with attachment"; 

    System.IO.MemoryStream ms = new System.IO.MemoryStream(); 
    iTextSharp.text.pdf.PdfWriter writer = iTextSharp.text.pdf.PdfWriter.GetInstance(d, ms); 
    System.Net.Mime.ContentType ct = new System.Net.Mime.ContentType(System.Net.Mime.MediaTypeNames.Application.Pdf); 
    Attachment attach = new Attachment(ms, ct); 

    mail.Attachments.Add(attach); 

    SmtpServer.Port = 587; 
    SmtpServer.Credentials = new System.Net.NetworkCredential("[email protected]", "mypass"); 
    SmtpServer.EnableSsl = true; 

    SmtpServer.Send(mail); 

    writer.Flush(); 
    writer.Dispose(); 
    ms.Dispose(); 

} 

Nennen Sie es email_send(Doc).

+0

Hallo, jetzt die E-Mail senden, aber es ist eine Noname-Datei ohne jede PDF-Erweiterung beigefügt. Die Datei ist 0kb – focus

+0

Haben Sie diese neueste Version verwendet, habe ich einen Hew Tippfehler vor ca. 10min bearbeitet. – Sami

+0

Ja und ich erhalte eine Noname-Datei 0kb als Anhang. – focus

Verwandte Themen