2021/04/27

Python連携

閾値を超えた場合にメール送信

このコンテンツでは、特定の閾値を超えた場合に、アラートとしてメールを送信する方法について説明していきます。なお、本コンテンツで利用したバージョンはSpotfire10.10です。ご利用環境によって、一部画面構成が異なる可能性がありますので、ご了承ください。

Pythonでメール送信

Pythonとはデータ分析を実装する際によく使われるプログラミング言語です。
Spotfireで使えるPythonには以下の2種類があります。

①テキストエリアなどで使えるironPython
②データ関数で使えるPython 3.7.5(ver10.10 LTS)

前回の記事では、①のironPythonを使用してプロパティの値をPythonに渡し、結果をSpotfireに表示する処理をご紹介しました。その際に、外れ値に対して閾値オーバーの表示をしました。

このような閾値オーバーや異常条件を判別した際に、アラートを受け取れると便利です。今回は、前回作成したdxpファイルを使用し、閾値オーバーの際にメール送信する処理をご紹介します。

サンプルファイルの読み込み

本コンテンツで利用するサンプルファイルは、こちらからダウンロードしてください。
Pythonスクリプトの入出力で作成したdxpファイルになります。チップIDごとにパラメータが入っているデモデータを使用しています。

Gmailを使用してメール送信

今回のサンプルではsmtpサーバーとしてgmailを使用しています。
あらかじめGoogleアカウントの「セキュリティ」から、「安全性の低いアプリのアクセス」を有効化しておいてください。

スクリプトの設定

dxpファイルを開き、「ツール」から「データ関数を登録」をクリックします。

「データ関数の登録」ダイアログでは、以下の設定をしてください。

  • 名前:任意の名前
  • タイプ:Pythonスクリプト
  • スクリプト:以下を入力

※ログイン情報はご自身の物ものに書き換えてください。

import smtplib
from email.mime.text import MIMEText
from email.header import Header
from email import charset
from email.utils import formatdate

#メールを作成
def create_message(from_addr, to_addr, subject, body):
    cset = 'iso-2022-jp'
    msg = MIMEText(body.encode(cset), 'plain' , cset )
    msg['Subject'] = Header ( subject.encode(cset) ,cset )
    msg['From'] = from_addr
    msg['To'] = to_addr
    msg['Date'] = formatdate()
    return msg

#メールを送信
def send_gmail(from_addr, to_addr, msg):
    s = smtplib.SMTP('smtp.gmail.com', 587)
    s.ehlo()
    s.starttls()
    s.ehlo()
    s.login('□□□□□□@gmail.com', '****Password****')
    s.sendmail(from_addr, [to_addr], msg.as_string())
    s.close()

if ( specValue > theValue ) :
    msg = create_message(from_addr, to_addr, Title, Body )
    send_gmail(from_addr, to_addr, msg)

パラメータの入力

スクリプトに含まれている以下の6つのパラメータを順番に設定していきます。

  • from_addr : 送信元メールアドレス(今回はgmail)
  • to_addr : 送信先メールアドレス
  • Title : 件名
  • Body : 本文
  • specValue : 閾値
  • theValue : 最大値

「パラメータの入力」タブに移動し、「追加」をクリックします。

はじめに、from_addrパラメータを以下の設定で作成していきます。

  • タイプ:値
  • データ型:すべて

以下の3つのパラメータも、from_addrパラメータと同様の設定で作成してください。

  • to_addrパラメータ
  • Titleパラメータ
  • Bodyパラメータ

次に、specValueパラメータとtheValueパラメータを以下の設定で作成していきます。

  • タイプ:値
  • データ型:数値

今回は出力はメール送信のため、「パラメータの出力」設定は不要です。「パラメータの入力」で6つのパラメータの設定完了後、「実行」をクリックしてください。

パラメータの編集

データ関数実行後、「パラメータの編集」ダイアログが開きます。ここでは、6つのパラメータそれぞれに対して個別の設定をしていきます。

from_addrパラメータ

  • 入力ハンドラ:値
  • 値:送信元メールアドレス(今回はgmail)
  • データ型:String

to_addrパラメータ

  • 入力ハンドラ:値
  • 値:送信先メールアドレス
  • データ型:String

Titleパラメータ

  • 入力ハンドラ:値
  • 値:メールの件名にしたい文章を入力してください
  • データ型:String

Bodyパラメータ

  • 入力ハンドラ:値
  • 値:メールの本文にしたい文章を入力してください
  • データ型:String

specValueパラメータ

  • 入力ハンドラ:式
  • 式:「編集」をクリックし、最大値を表す以下の式を入力してください
  • Max([PT_Para])

theValueパラメータ

  • 入力ハンドラ:文書のプロパティ
  • プロパティ:UL(前回の記事で作成した閾値を設定するプロパティ)

最後に、「関数を自動的に更新」にチェックを入れてください。「OK」をクリックするとデータ関数が実行されます。

実行結果

閾値を設定する入力エリアで、22以下の数字を入力してみます。「helloPython」ボタンをクリックすると変更が反映されます。

最大値が閾値を超えている場合、送信先アドレスにメールが届きます。

【Python連携】記事一覧に戻る
全記事一覧に戻る