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

Pythonでメール送信

前回の続きです。

データ分析の結果、異常条件や閾値を判別できるようになります。

その結果をリアルタイムのデータに当てはめ、
同様の条件が発生した場合にアラートとしてメールで通知できると便利です。
Pythonを使用したサンプルを作成してみました。

外部ライブラリの取り込み

Pythonのsmtplibライブラリを使ってメール送信します。
このライブラリを使用すると簡単にメール送信ロジックを実装できるのですが、
残念なことにSpotfireのironPythonには含まれていませんので
pythonを別途インストールしそちらのライブラリを読み込みます。

手順は普通のPythonと同じです。

import clr
import sys
paths = 'C:\Python25\Lib'
sys.path.append ( paths ) 

pythonのバージョンですが、
SpotfireのPythonと合わせるために2.5を使用しました。

Gailを使用してメール送信

今回のサンプルではsmtpサーバーとしてgmailを使用しています。
あらかじめgoogleのアカウント情報から
ログインとセキュリティの「安全性の低いアプリの許可」を有効化する必要があります。

1

ソースはこちら

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

# coding: UTF-8 #文字コード設定
# -*- coding: utf-8 -*-

import clr
import sys
paths = 'C:\Python25\Lib'
sys.path.append ( paths ) 

import smtplib
from email.MIMEText 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('xxxxxxxxxxxxx@gmail.com', 'xxxxxxxxxx')
    s.sendmail(from_addr, [to_addr], msg.as_string())
    s.close()

#----------------
#  specValue(閾値)がtheValue(測定値)を超えている場合はメール送信
#    from_addr : メール送信元( gmailの場合は認証アドレスが指定される )
#    to_addr   : メール送信先
#    Title     : 件名
#    Body      : 本文
#    specValue : 設定値
#    theValue  : 測定値
#----------------

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

送信先アドレスやメールタイトルと本文
閾値と測定値はそれぞれパラメータとして入力できるようにしてありますので
from_addr , to_addr , Title , Body , specValue , theValueの値をプロパティなり
計算式で設定してください。