Mam problemy podczas wysyłania wielu załączników w moim programie.Wiele załączników w języku C#
Nie miałem żadnych problemów, zanim spróbowałem dodać wiele załączników. Więc zmieniłem trochę kodu i przestało działać.
Utwórz załącznik: Nie dodano całego kodu, aby był bardziej widoczny.
Attachment attachment = getAttachment(bodyFile, "Formulier" + counter + ".doc");
attachments.Add(attachment);
//attachment.Dispose();
if (attachments != null)
{
foreach (Attachment attachment in attachments)
{
email.Attachments.Add(attachment);
}
}
Get Załącznik
private Attachment getAttachment(string bodyFile, string title)
{
return createDocument(bodyFile, title);
}
tworzenia pliku
private Attachment createDocument(string bodyFile, string title)
{
string activeDir = HttpContext.Current.Server.MapPath("/Tools");
string newPath = Path.Combine(activeDir, "Documents");
Directory.CreateDirectory(newPath);
newPath = Path.Combine(newPath, title);
FileStream fs = File.Create(newPath);
fs.Close();
File.WriteAllText(newPath, bodyFile);
var fstemp = new FileStream(newPath, FileMode.Open, FileAccess.Read);
return new Attachment(fstemp, title, MediaTypeNames.Application.Octet);
}
błąd pojawia się w moim rejestratorze
2012-07-04 15:45:26,149 [19] ERROR Mvc - System.Net.Mail.SmtpException: Failure sending mail. ---> System.ObjectDisposedException: Cannot access a closed file.
at System.IO.__Error.FileNotOpen()
at System.IO.FileStream.Read(Byte[] array, Int32 offset, Int32 count)
at System.Net.Mime.MimePart.Send(BaseWriter writer)
at System.Net.Mime.MimeMultiPart.Send(BaseWriter writer)
at System.Net.Mail.Message.Send(BaseWriter writer, Boolean sendEnvelope)
at System.Net.Mail.SmtpClient.Send(MailMessage message)
--- End of inner exception stack trace ---
at System.Net.Mail.SmtpClient.Send(MailMessage message)
at ARTex.Tools.Mailer.Send(SmtpClient smtpClient, List`1 receivers, String subject, String body, List`1 attachments, String cc) in C:\Projects\KTN.Web.ARTex\ARTex\ARTex\Tools\Mailer.cs:line 262
EDIT
Pozbyłem się metodą .Dispose i zmienił var fstemp = new FileStream(newPath ...
Teraz mogę wysłać kilka załączników. Ale teraz losowo dają błąd lub nie. 4 na 5 razy działa. Po raz czwarty ponownie wyświetla błąd, ponieważ nie może otworzyć pliku. Piąty raz magicznie znów działa.
EDIT: Rozwiązanie
użyłem przy użyciu bloku w połączeniu z dwóch odpowiedzi. I to zadziałało. Tnx do @HatSoft i @Aghilas Yakoub
Teraz pojawia się ten błąd, gdy próbowałem, co powiedział System.Net.Mail.SmtpException: Niepowodzenie wysyłania poczty. ---> System.ObjectDisposedException: Nie można uzyskać dostępu do zamkniętego pliku. w System.IO .__ Błąd.FileNotOpen() – Sllix
Myślę, że to rozwiązało problem. Ale czasami otrzymuję błąd losowy. Ale to działa, jak sądzę. Dziękuję Ci. – Sllix
Mam nadzieję, że znajdę nowy problem bardzo szybko :) – Sllix