SmtpClientを使用して、添付ファイル付きのメールを送信しています。ただし、特定のバッチでは、MailMessageを送信するのではなく、何らかの方法で保存する必要があります。次に、メッセージをユーザーの下書きフォルダに手動でアップロードすることを考えています。
添付ファイルをそのままにしてこれらのメッセージを保存することは可能ですか(不可能だと思いました)。または、ユーザーアカウントのフォルダーにメッセージをアップロードしますか?
誰かがこれの経験を持っているなら、私は少しの助けやポインタをいただければ幸いです。
ASP.NETでテストするときは、電子メールをフォルダーに保存するのではなく、電子メールサーバー経由で送信します。多分あなたはあなたのweb.config
バッチ用にこのような設定をしますか?
<system.net>
<mailSettings>
<smtp deliveryMethod="SpecifiedPickupDirectory">
<specifiedPickupDirectory pickupDirectoryLocation="c:\Temp\mail\"/>
</smtp>
</mailSettings>
</system.net>
追加情報:
他の回答のSpecifiedPickupDirectory
情報と同様に、メールがサイトルートからの相対フォルダに送信されるようにしたい場合-パスがわからないビルドサーバーでのテストに便利です-メール送信コードに簡単なチェックを追加できます:
SmtpClient client = new SmtpClient();
...
// Add "~" support for pickupdirectories.
if (client.DeliveryMethod == SmtpDeliveryMethod.SpecifiedPickupDirectory && client.PickupDirectoryLocation.StartsWith("~"))
{
string root = AppDomain.CurrentDomain.BaseDirectory;
string pickupRoot = client.PickupDirectoryLocation.Replace("~/", root);
pickupRoot = pickupRoot.Replace("/",@"\");
client.PickupDirectoryLocation = pickupRoot;
}
テストは次のようになります(App_Dataを使用して、IISがフォルダーに書き込むことができるようにしてください)。
// Arrange - get SitePath from AppDomain.Current.BaseDirectory + ..\
string pickupPath = Path.Combine(SitePath, "App_Data", "TempSmtp");
if (!Directory.Exists(pickupPath))
Directory.CreateDirectory(pickupPath);
foreach (string file in Directory.GetFiles(pickupPath, "*.eml"))
{
File.Delete(file);
}
// Act (send some emails)
// Assert
Assert.That(Directory.GetFiles(pickupPath, "*.eml").Count(), Is.EqualTo(1));
これは役立ちます- Microsoft(Net.Mail.MailMessageへのSave()機能の追加
主なアイデアは、リフレクションによって保存メソッドを作成することにより、MailMessageの拡張を作成することです。
これは、system.net
/web.config
ファイルのapp.config
設定で構成できます。
<system.net>
<mailSettings>
<smtp deliveryMethod="Network">
<network Host="mail.mydomain.com" port="25" />
</smtp>
<!-- Use this setting for development
<smtp deliveryMethod="SpecifiedPickupDirectory">
<specifiedPickupDirectory pickupDirectoryLocation="C:\Temp" />
</smtp>
-->
</mailSettings>
</system.net>
また、これは System.Web.Mail
からSystem.Net.Mail
への移行 に関する情報のリンクです。
バグには、フレームワークの一部のバージョンでの回避策としての追加も必要です。したがって、完成したバージョンは次のようになります。
<system.net>
<mailSettings>
<smtp deliveryMethod="SpecifiedPickupDirectory">
<specifiedPickupDirectory pickupDirectoryLocation="c:\Temp\mail\"/>
<network Host="localhost" />
</smtp>
</mailSettings>
</system.net>