Salut les gars j'essaye d'ajouter une pièce jointe à un email mais j'obtiens cette exception étrange qui n'est pas claire ce que je fais mal. Je reçois la pièce jointe d'un formulaire de saisie de fichierSystem.Mail.Net ne peut pas accéder au fichier fermé Exception en essayant d'ajouter une pièce jointe
<div class="form-group">
<br/>
Select any files to attach to email
<div class="input-group">
<label class="input-group-btn btn btn-default btn-file" id="attachFiles">
Upload <input type="button" id="attach" name="Upload" style="display: none" value="Upload"/>
</label>
<label class="input-group-btn btn btn-default btn-file">
Browse <input type="file" id="attachInput" multiple="false" style="display: none"/>
</label>
<input type="text" disabled="disabled" id="attachText" class="form-control input-group-addon"/>
</div>
<br/>
<ul id="issueFormAttachName" class="list-group list-inline"></ul>
Alors je reçois ces fichiers via la demande et de les stocker dans une variable publique pour y accéder ultérieurement via un contrôleur différent
[HttpPost]
[Route("home/saveAttachment")]
public ActionResult SaveAttachment()
{
try
{
EmailAttachments = new EmailAttachments
{
FileCollectionBase = Request.Files
};
return Json("Ok");
}
catch (Exception ex)
{
return Json("Error occurred. Error details: " + ex.Message);
}
}
Après cela, j'appelle mon contrôleur pour envoyer l'e-mail en utilisant ce fichier
string usersToReceived = "";
EmailMessage email = new EmailMessage
{
InnerHtmlBody = emailDto.EmailBody,
Subject = $"Support enquiry ticket number #{issueId}",
EmailHeader = "Thank you for contacting support"
};
emailDto.Users.ForEach(u => usersToReceived += u + ";");
Dictionary<string, Stream> streams = new Dictionary<string, Stream>();
//Check if attachments exist
if (HomeController.EmailAttachments?.FileCollectionBase.Count > 0)
{
foreach (string streamName in HomeController.EmailAttachments.FileCollectionBase)
{
streams.Add(streamName, HomeController.EmailAttachments.FileCollectionBase[streamName].InputStream);
}
foreach (string file in HomeController.EmailAttachments.FileCollectionBase)
{
//make sure stream is not disposed untill send is done
//Streams dont need to be explicitly disposed
email.AddAttachment(streams[file], file, HomeController.EmailAttachments.FileCollectionBase[file]?.ContentType);
}
}
email.Send(usersToReceived);
}
La méthode d'ajout de pièce jointe juste ca lls le constructeur natif Attachment
Maintenant, parfois, quand je vider mon cache et essayer d'utiliser le code ci-dessus, cela fonctionnera mais la plupart du temps cela jettera une exception avec l'erreur Impossible d'accéder au fichier fermé quelqu'un sait ce qui se passe ici? Je ne ai essayé d'avoir une méthode de cache clair à la fin mais cela ne fonctionne pas
Vos pièces jointes meurent avec un pipeline MVC. Si vous réécrivez le contenu de Request.Files à une autre variable ICollection et que vous le stockez, il fonctionnera comme un charme. –
merci va donner un coup – Harry
Salut une autre question quand ai-je besoin de les réécrire au moment de la Request.Files ou plus tard ou avant que j'appelle l'envoi? Parce que je ne vois pas où mon application quitte le pipeline MVC – Harry