Windows Azureアプリに適用
ASP.NET MVC 3アプリからSecure Mailが使えるのであれば、ASP.NET MVC 3アプリをWindows Azure上で動かした場合もSecure Mailが使えるかもしれないと考えました。現在、Windows AzureとしてSMTPサーバ機能は提供されていないため、Windows Azureアプリからメールを送信する時は、外部のSMTPサーバに接続してメール送信を行います。
Windows AzureにももちろんSecure Mailはインストールされていませんが、ASP.NET MVC 3をホスティングサービスへ発行する場合と同様に、DLLのローカルコピープロパティを「True」にしておけば、Windows Azureアプリとして作成してWindows Azureに配置した場合もSecure Mailの動作に必要なDLLがコピーされます。
Windows Azureアプリを作成
Windows Azureアプリを作成するには次の手順を踏みます。
- Visual Studio 2010を管理者として実行
-
新規プロジェクトの作成から[Windows Azureプロジェクト]を選択
- ロールはどのロールも選択しない
- ソリューションエクスプローラでソリューション名を右クリックして[追加]-[既存のプロジェクト]メニューを使って、既存のASP.NET Webアプリのプロジェクトを追加
-
Windows Azureプロジェクト側で「ソリューションWebロールプロジェクト」の追加を実施
-
ASP.NET MVC 3の動作に必要なDLLは残念ながらまだWindows Azureにはインストールされていないため、Secure Mailと同様に必要なDLLの参照設定の[ローカルコピー]プロパティを「True」にしてします。どの参照設定の変更が必要かは『ASP.NET MVC 3をAzureで動かす』を参考にしてください。
この手順によりASP.NET MVC 3アプリとして稼働していたサンプルをWindows Azure上で動作させるためのWindows Azureアプリが完成します。
Windows Azureに配置
Windows AzureアプリのVisual Studioでの一通りの動作確認が完了したら、ソリューションエクスプローラのWindows Azureプロジェクトを右クリックして[配置]メニューを選択します。
必要な情報を入れて[OK]ボタンをクリックすればWindows Azureにプログラムの配置が行われます。
Windows Azure環境での動作確認
Windows Azure Portalに表示されているDNS nameのURLをクリックすればWindows Azure上で稼働するWebアプリに接続します。
ここで各種情報をいれて[送信]ボタンをクリックすれば文字化けなく受信できるメールが送信されます。
From: hatsune@wankuma.com To: hatsune@wankuma.com Content-Type: text/plain; charset="iso-2022-jp" Content-Transfer-Encoding: 7bit Subject: =?iso-2022-jp?B?GyRCJDMkbCRPGyhCdGVzdBskQiRHJDkhIxsoQg==?= Date: Tue, 14 Jun 2011 13:57:38 +00 MIME-Version: 1.0 Status: U X-UIDL: 1308059860.25181.mbox401-3 $B$3$l$O(Btest$B$NK\J8$G$9!#(B
おわりに
ASP.NET MVC 3アプリからWindows Azureアプリを作成してSecure Mailですんなりメールが送信できたのには理由があります。それは次の3行の存在です。
_msg.Charset = "ISO-2022-JP" _msg.ContentType = "text/plain" _msg.Header.Add(Dart.PowerTCP.SecureMail.HeaderLabelType.ContentTransferEncoding, "7bit")
Windows Azureは英語環境なので、明示的に日本語を指定しないと「Content-Type: text/plain; charset="iso-8859-1"」となってしまい、メール本文が文字化けを起こします。Windows Azureを使うときの鉄則である「省略値は日本語指定とは限らないので、明示的に日本語を指定できるときは指定する」はここでも当てはまっていると言えるでしょう。