こんにちは、電子メールに添付ファイルを追加しようとしていますが、私は何が間違っているのかわかりません。 私は、ファイルの入力フォームから添付ファイルを取得していますSystem.Mail.Netは閉じたファイルにアクセスできない添付ファイルを追加しようとしたときに例外が発生する
<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>
それから私は、リクエストを経由して、このファイルを取得し、別のコントローラ
[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);
}
}
を経由して、後でそれらにアクセスするパブリック変数に格納していますこの後、私は、このファイル
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);
}
追加取り付け方法だけでCAを使用して電子メールを送信するために私のコントローラを呼び出しています
時にはキャッシュをクリアして上記のコードを使用しようとすると、これはうまくいくが、ほとんどの場合、これはエラーで例外をスローすることができないアクセスできないクローズドファイルの誰もが何をしているのか知っている?私は最後にキャッシュのクリア方法を持ってみましたでしたが、これはそれがasp.net mvc pipelineトリックです
あなたの添付ファイルはMVCパイプラインで消滅します。 Request.Filesコンテンツを別のICollectionの変数に書き換えて保存すると、魅力的なように機能します。 –
ありがとうございます。 – Harry
こんにちは別の質問私はRequest.Filesのポイントでそれらを書き直す必要がありますか?私のアプリケーションがMVCパイプラインをどこに残すかわからないからです。 – Harry