LightSwitch : サーバーからメール送信

LightSwitch アプリケーションをデプロイしたサーバーからメール送信する方法を紹介します。

アプリケーションでメール送信したいことはよくあると思います。
管理者に対して稼動報告エラー発生時のアラート、またはワークフロー処理の通知など。

せっかくなので(?)、以下の画面キャプチャーを撮るために Azure にデプロイして Hotmail アカウントからメールを送信してみますが、オンプレミスの環境でも全く同じように動作するはずです。
※元々は知り合いから 「Azure からだとメール送信時に例外が発生してしまう」という話を聞いたので検証のつもりでやってみましたが、実際にやってみると問題なくメールを送れます。

実際にコードを書いてみると普通の .NET (C#) のコードで、ロジック自体は LightSwitch に特有のものは全くありません。

LightSwitch らしいところというとテーブルのメソッド(今回は テーブル_Inserted メソッド)でメール送信を行っているところでしょうか。クライアントPC から直接サーバーサイドのロジックを起動することはできないので、テーブルの更新のタイミングでサーバーサイドのロジックを走らせる工夫が必要です。

なお元ネタは以下の二つです。


ソリューションを一つ作り、検証用のテーブルは “Mail” とします。

image

このテーブルに行が追加された時にメールを送信することにします。
実際のシナリオでいうと「エラーログを記録したタイミングでメール送信」といったところでしょうか。

画面はお手軽に、編集可能グリッドにでもしておきます。

image

Mail テーブルのデザイナーに戻って、“MailSet_Inserted” メソッドを追加します。

image


“ApplicationDataService.cs” は以下のようにします。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.LightSwitch;
using Microsoft.LightSwitch.Security.Server;

using System.Net;
using System.Net.Mail;

namespace LightSwitchApplication
{
    public partial class ApplicationDataService
    {
        private const string SmtpServer = "smtp.live.com";
        private const int SmtpPort = 587;

        private const string SmtpUser = "秘密@live.jp";
        private const string SmtpPassword = "秘密";

        private const string MailTo = "秘密@live.jp";

        partial void MailSet_Inserted(Mail entity)
        {
            MailAddress userAddress = new MailAddress(SmtpUser);
            MailAddress fromAddress = new MailAddress(SmtpUser);
            MailAddress toAddress = new MailAddress(MailTo);

            MailMessage mail = new MailMessage();
            mail.From = fromAddress;
            mail.To.Add(toAddress);
            mail.Subject = entity.Subject;
            mail.Body = entity.Body;

            SmtpClient smtp = new SmtpClient(SmtpServer, SmtpPort);
            smtp.EnableSsl = true;
            smtp.Credentials = new NetworkCredential(userAddress.Address, SmtpPassword);
            smtp.Send(mail);
        }
    }
}

メール送信のために使用するクラスは System.Net.Mail 名前空間内の MailMessage クラス、SmtpClient クラス、および System.Net 名前空間内の NetworkCredential クラスです。

Hotmail の場合は、SMTPサーバー名は “smtp.live.com” (live.jp ドメインであっても) を、ポートは587 番を指定します。SSL であることも忘れずに(EnableSsl プロパティ)。

SMTPの情報、アカウントなどは上のコードではハードコーディングしていますが、実際には設定ファイルから読み出すなどの工夫をしてください。

今回はMail テーブルから Insert された行の Subject 列と Body 列の値をもらってきて、メールを組み立てています。


ビルドに成功したら Azure にデプロイしてみます。デプロイ方法は以下のページを参考に(両方の手順が必要)。

デプロイが完了したら実行してみます。

 image

リボンの [保存] ボタンをクリックして、エラーメッセージなどがなければメール送信に成功しています。

image

以上のようにすると、LightSwitch アプリケーションでサーバーからメールを送信することができます。簡単ですね。

広告
カテゴリー: LightSwitch タグ: パーマリンク

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中