Я пытаюсь отправить асинхронное письмо с прикрепленными файлами. Эти вложения создаются «на лету» и сохраняются на сервере, поэтому я хотел бы удалить их после отправки письма.Удаление вложений MailMessage приводит к зависанию веб-сайта
Приведенный ниже код успешно отправляет электронное письмо, однако после этого весь сайт блокируется. Я могу только предположить, что он не может удалить сгенерированный файл, который был прикреплен к электронной почте, никаких ошибок не выбрасывается и журналы не публикуются. Я знаю, что путь к файлу верен, так как тот же путь используется для присоединения файла к письму. Примечание. Я удаляю объекты Message и Attachment.
Все работает отлично в моей среде разработки, но не на производстве. Следует отметить, что этот код выполняется из .dll, который помещается в папку bin на веб-сайте.
ThreadStart starter = delegate { SendAsync(ref message, Attachments, Settings); };
Thread thread = new Thread(starter);
thread.IsBackground = true;
thread.Start();
private static void SendAsync(ref MailMessage Message, List<clsEmailAttachment> Attachments, clsSmtpSettings Settings)
{
try
{
SmtpClient smtp = new SmtpClient();
smtp.Host = Settings.Host;
NetworkCredential Credential = new NetworkCredential(Settings.Username, Settings.Password, Settings.Domain);
smtp.UseDefaultCredentials = false;
smtp.Credentials = Credential;
smtp.DeliveryMethod = SmtpDeliveryMethod.Network;
smtp.Send(Message);
}
catch (Exception SendingEmailException)
{
Log.PostLog(null, 4007, SendingEmailException.Message);
}
finally
{
try
{
Message.Attachments.Dispose();
Message.Dispose();
foreach (clsEmailAttachment attachment in Attachments)
{
if (attachment.Delete == true)
{
try
{
File.Delete(attachment.Path);
}
catch { throw; }
}
}
}
catch (Exception DeletingAttachmentsException)
{
Log.PostLog(null, 4008, DeletingAttachmentsException.Message);
}
}
}
вы пробовали отладки это? Каково значение 'attachment' в цикле' foreach'? – Ckrempp