Hallo zusammen,
ich würde gerne eine PDF Datei per Mail versenden.
Dazu nutze ich die Klasse using System.Net.Mail.
Das versenden der Mail klappt auch ohne Probleme, nur beim Attachment habe ich ein kleines Problem.
ich generiere mein Attachment wie folgt:
Attachment attachFile = new Attachment(pdfURL);
myMail.Attachments.Add(attachFile);
die "pdfURL" ist eine URL wie z.B. "http://server/loc=sdasdsdasd".
Die URL generiert mir dann die PDF Datei, sprich wenn ich die URL im Browser aufrufe, bekomme ich die PDF angezeigt.
jedoch wenn ich jetzt das ganze Debuge hält VS2010 mit an der Stelle des Attachments an und sagt mir:
Illegales Zeichen im Pfad.
ArgumentException: Illegales Zeichen im Pfad.]
System.Security.Permissions.FileIOPermission.HasIllegalCharacters(String[] str) +9369221
System.Security.Permissions.FileIOPermission.AddPathList(FileIOPermissionAccess access, AccessControlActions control, String[] pathListOrig, Boolean checkForDuplicates, Boolean needFullPath, Boolean copyPathList) +73
System.Security.Permissions.FileIOPermission..ctor(FileIOPermissionAccess access, AccessControlActions control, String[] pathList, Boolean checkForDuplicates, Boolean needFullPath) +44
System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy, Boolean useLongPath) +590
System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share) +83
System.Net.Mail.AttachmentBase.SetContentFromFile(String fileName, String mediaType) +76
System.Net.Mail.AttachmentBase..ctor(String fileName) +48
System.Net.Mail.Attachment..ctor(String fileName) +17
axERMWebClient.secure.frmSendInvoiceMail.Button1_Click(Object sender, EventArgs e) in D:\XXX\XXXXXXX\secure\frmSendInvoiceMail.aspx.cs:54
System.Web.UI.WebControls.Button.OnClick(EventArgs e) +118
System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument) +112
System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +10
System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +13
System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +36
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint
Hallo,
Ich glaube dass das so nicht Möglich ist.
Meines Wissens hast du zwei Möglichkeiten:
Möglichkeit
das Attachement herausnehmen und im HTML Text der EMail auf die Pdf Datei verweisen.
Möglichkeit
Bei einem Attachement wird ein FileName (Dateisystem) oder ein Stream erwartet. Entweder das pdf herunterladen und den Constructor mit Dateinamen verwenden oder einen FileStream erzeugen und den Constructor mit FileStream verwenden.
Wobei ich mir ziemlich sicher bin das du auch beim Filestream die Datei zuerst vom Web Server herunterladen musst - quasi ein FileStream direkt auf Http nicht Möglich ist.
Gruß
Sascha
die url ist ein string und daher kein Attachement. Attachements sind Dateien oder Streams. Wenn du willst, das der Empfänger direkt von deinem Server das Teil abholen kann, dann schicke ihm den link im MessageBody. Wenn nicht, dann musst du erst einen Request gegen deinen Server machen und dann den Response als Attachement an die mail hängen (nur die Datei... nicht den gesamten response...)
Okay also den Link mitsenden geht dabei nicht aus Organisatorischen Gründen.
Hat jemand nen kleines Beispiel wie ich die PDF dann mit nem Stream abhole und in das Attachment packe ?
schau dir die klasse Webrequest an.
Hallo,
du musst auf jedenfall darauf achten, dass der Stream solange geöffnet ist, bis
SmtpClient.Send() durchgeführt wurde, da erst zu diesem Zeitpunkt die Streams der Attachments gelesen werden.
Ich generiere auch PDFs on the fly und packe diese dann in den Anhang. Allerdings
erhalte ich bei der Generierung ein Byte-Array(byte[]), welches ich widerum als
MemoryStream verpacke, damit ich es als Stream verwenden kann.
Da du ja die PDF-Datei auf dem gleichen Server generierst, wäre es natürlich einfacher die Generierungslogik vor dem Versenden der Mail aufzurufen, anstatt sich die Datei per WebRequest zu holen.
Falls nur letzters möglich ist, musst du wohl den Weg über den Stream des Response gehen.
Gruß
Daniel