29. juli 2008 - 12:26
Der er
5 kommentarer og 1 løsning
MailAttachment problem
Jeg arbejder på en formular hvor folk kan indtaste deres data og derefter sende den afsted til en email. Formularen skal indholde en attachment funktion så folk kan sende billeder eller andet med. Alt sammen virker okay når man udfylder felterne og vedhæfter en fil. Problemet opstår hvis man IKKE vedhæfter en fil, så kommer der en fejl. Koden: private void SendMail(string from, string to_, string subject, string body) { MailMessage printMail = new MailMessage(); printMail.From = from; printMail.To = to_; printMail.Subject = subject; printMail.Body = body; printMail.BodyFormat = MailFormat.Html; ///Her starter attachment string strdir = "D:\\temp\\"; string strfilename = Path.GetFileName(txtFile.PostedFile.FileName); txtFile.PostedFile.SaveAs(strdir + strfilename); printMail.Attachments.Add(new MailAttachment(strdir + strfilename)); ///Slutter her try { SmtpMail.Send(printMail); } catch (Exception exc) { Response.Write(exc.ToString()); } ///Sletter filen fra serveren igen File.Delete(strdir + strfilename); } Det som der sker er at filen bliver midlertidigt lagt op på serveren og så slettet igen. Men når man vælger ikke at vedhæfte en fil så går det i kage. Kan man skrive en if sætning eller lignende som gør at den springer vedhæftningen over hvis den er lig med ingenting? Alt hjælp er kærkommen da jeg ikke er specielt skarp til c# formular feltet ser således ud: <input type="file" id="txtFile" name="txtFile" runat="server" />
Annonceindlæg fra DE-CIX
Edge computing: behandling ved kilden
Edge computing revolutionerer den måde, data behandles på, ved at bringe kapacitet og ydeevne tættere på dér, hvor der er behov for det.
15. april 2025
Du kunne jo prøve med: if( (strfilename != null) or (strfilename != "") ) { txtFile.PostedFile.SaveAs(strdir + strfilename); printMail.Attachments.Add(new MailAttachment(strdir + strfilename)); } Jeg er ikke sikker, men det er hvad jeg ville prøve med. Hvis filnavnet der returneres ikke er null eller en tom streng, skal koden inde i løkken køres, ellers springes det over.
Skidt pyt med de point, du har jo selv løst det. Men det kunne måske hjælpe andre senere, hvis du kort kunne beskrive hvordan du fiksede det. :-)
Her er løsningen så.. jeg kombinerede det med noget at kode jeg fandt her på eksperten ;) private void SendMail(string from, string to_, string subject, string body) { MailMessage printMail = new MailMessage(); printMail.From = from; printMail.To = to_; printMail.Subject = subject; printMail.Body = body; printMail.BodyFormat = MailFormat.Html; String StrFileName = ""; StrFileName = Request.Files["fileAttachment"].FileName; if (StrFileName != "") { StrFileName = StrFileName.Substring(StrFileName.LastIndexOf("\\") + 1); Request.Files["fileAttachment"].SaveAs(Server.MapPath(StrFileName)); MailAttachment MyAttachment = new MailAttachment(Server.MapPath(StrFileName)); printMail.Attachments.Add(MyAttachment); } try { SmtpMail.Send(printMail); } catch (Exception exc) { Response.Write(exc.ToString()); } if (StrFileName != "") File.Delete(Server.MapPath(StrFileName)); }