電子メールを送信する Web サイトをテストするため (登録確認など)、SMTP サーバーを構成する必要があります。
私は実際に電子メールを送信したくありません。コードが正しいことを確認したいだけです。たとえば、メールがキューフォルダーに配置されていることを確認できるようにしたいと考えています。
設定が簡単な SMTP サーバーを推奨できる人はいますか?
メッセージを受信するがどこにも配信しない SMTP サーバーであるPapercutもあります (メッセージが正しく送信されていることを確認できます)。受信したメッセージは小さな GUI に表示され、ディレクトリにも書き込まれます。
.NETでは、SmtpClientは、ピックアップディレクトリに配置することで電子メールを送信するように構成できます。
SmtpClientのデフォルトのコンストラクターは、app.configから設定を取得するため、テスト環境では、次のように構成できます。
<configuration>
<system.net>
<mailSettings>
<smtp deliveryMethod="specifiedPickupDirectory">
<specifiedPickupDirectory pickupDirectoryLocation="path to a directory" />
</smtp>
</mailSettings>
</system.net>
</configuration>
MSDNリファレンス-app.configmailSettings要素http://msdn.microsoft.com/en-us/library/w355a94k.aspx
smtp4devプロジェクトは、別のダミー SMTP サーバーです。メッセージをログに記録し、最近のメッセージの内容を表示できる、素晴らしくシンプルな UI を備えているため、気に入っています。MSI インストーラーを使用して C# で記述されています。ソースコードが利用可能です。
そこにいる.NETの人のために。シンプルに保ちます。
これを調査していたところ、開発者の 1 人が、メールの送信方法をオーバーライドできる構成設定について思い出しました。
これにより、メールごとにファイルが作成され、そのままになります。
<system.net>
<mailSettings>
<smtp deliveryMethod="SpecifiedPickupDirectory">
<specifiedPickupDirectory pickupDirectoryLocation="\\SharedFolder\MailDrop\" />
</smtp>
</mailSettings>
</system.net>
ブログ投稿A Simple SMTP Server Mock for .NET で 必要なものが得られると思います: SMTP サーバー モック
SMTP サーバー モックは基本的に、電子メール メッセージを送信するアプリケーションの単体テストに使用できる偽の SMTP サーバーです。
また、smtp mock server を Google 検索すると、テスト用の SMTP サーバーの選択が提供されます。お気に入り:
これを行う別の方法は、同じインターフェイスを実装する SmtpClient の周りにラッパーを作成することです。次に、クラスにラッパーを挿入して使用します。単体テストを行うときは、メソッドの呼び出しと応答を期待するモック ラッパーに置き換えることができます。
編集: SmtpClient はインターフェイスから派生せず、仮想メソッドを持たないため、ラッパーが必要です (少なくとも RhinoMocks の場合)。仮想メソッドなしでクラスを直接モックできるモック フレームワークを使用する場合は、ラッパーをスキップして SmtpClient モックを直接注入できます。
public class SmtpClientWrapper
{
private SmtpClient Client { get; set; }
public SmtpClientWrapper( SmtpClient client )
{
this.Client = client;
}
public virtual void Send( MailMessage msg )
{
this.Client.Send( msg );
}
...
}
public class MyClass
{
private SmtpClientWrapper Client { get; set; }
public MyClass( SmtpClientWrapper client )
{
this.Client = client;
}
public void DoSomethingAndNotify()
{
...
this.Client.Send( msg );
}
}
テスト済み (RhinoMocks を使用):
public void DoSomethingAndNotifySendsAMessageTest()
{
SmtpClientWrapper client = MockRepository.GenerateMock<SmtpClientWrapper>();
client.Expect( c => c.Send( new MailMessage() ) ).IgnoreArguments();
MyClass klass = new MyClass( client );
klass.DoSomethingAndNotify();
client.VerifyAllExpectations();
}
私はこれを見つけました-http: //improve.dk/archive/2010/07/01/papercut-vs-smtp4dev-testing-mail-sending-locally.aspxどちらも優れたツールであるpapercutとsmtp4devの使用方法を説明しています
私は開発者向けのAntixSMTPサーバーを使用しています。これはアプリケーションを開くのと同じくらい簡単です。メッセージはフォルダに保存され、UIで表示できます。かなり迅速/簡単なソリューション。ここで言及したかった。
netDumbster も使用できます。
Mac OS X を使用している場合は、MockSMTP.appを使用できます
DevNull SMTP サーバーは、クライアントと SMTP サーバー間の通信に関する詳細をすべてログに記録します。送信コードが機能しない理由を診断しようとしている場合に役立つようです。
Java で書かれており、実行可能な jar としてデプロイされます。ソースコードは公開されていないようです。
Python がインストールされている場合は、次の 1 つのライナーを実行して、メッセージを stdout にダンプするコンソールでデバッグ smtp サーバーを実行できます。
sudo python -m smtpd -n -c DebuggingServer localhost:25
ここから引っ掛かりました: http://muffinresearch.co.uk/archives/2010/10/15/fake-smtp-server-with-python/
tvanfossonによって提案されたSmtpClientWrapperクラスは、Sendメソッドの宣言で非常に重要な「virtual」キーワードを必要とすることに注意してください。そうでない場合は、SmtpClientを直接モックしようとするのと同じボートに戻ります。
他の多くの提案によると、私はかなり多く使用した無料のツールです: http://www.toolheap.com/test-mail-server-tool/
実際には TDD には適していませんが、送信される各電子メールで Outlook Express ウィンドウをポップアップできるため、手動テストに役立ちます。
Sean Carpenter が指摘したように、Papercutはローカル開発の強力なソリューションです。ただし、ステージング サーバーまたはテスト サーバーも実行している場合は、開発環境とステージング環境で同じアプローチを使用できるため、 mailtrap.ioの方が全体的にシンプルなソリューションになる可能性があります。
私自身のhttp://ssfd.codeplex.com/もあり、これはオープン ソースの SMTP エミュレーターです。電子メールを受信し、タスク アイコンでアクセスできるフォルダにドロップします