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のアカウント情報から
ログインとセキュリティの「安全性の低いアプリの許可」を有効化する必要があります。
ソースはこちら
※ログイン情報はご自分の物に書き換えてください。
# 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の値をプロパティなり
計算式で設定してください。