この記事で扱っていること
- Labviewでgmailを送信する方法
を紹介しています。
注意:すべてのエラーを確認しているわけではないので、記事の内容を実装する際には自己責任でお願いします。また、エラー配線は適当な部分があるので適宜修正してください。
LabVIEWを使用することで何か処理を自動化させることができるのはとても便利です。
人間がつきっきりで見ていなくてもプログラムが勝手にやってくれるようにできるのがプログラミングの醍醐味です。
一方で、処理が終わった後にそれをどう知らせるかについて考えてみたことはあるでしょうか?
例えば、何か測定を行ったりしてそれをファイル出力していたとします。これを何か簡単な文面とともに誰かに報告する、こういった操作も自動化できればさらに便利になると思います。
LabVIEWではそのための仕組みとしてメール送信に対応する関数が用意されているので、それらを駆使してより便利な自動化を目指せます。
他のメールサービスも利用できるのかもしれませんが、この記事ではGoogleでアカウントを作った場合のgmailの使用を想定しています。
[2022/09/06追記] gmailの設定で「安全性の低いアプリのアクセス」の設定ができなくなった場合にどのようにgmailを送るようにするかについての情報を追加しました。
[2024/05/03追記] 2024年5月時点での、安全性の低いアプリのアクセスの際に必要なパスワードの生成方法について情報を追加しました。詳しくは「安全性の低いアプリのアクセス設定ができない場合」の準備1の最後の方を見て下さい。この方法でLabVIEWによるSMTPの関数およびPythonを使用してGmailが送れることは確認しています。ただし、この方法がいつまで使用できるかについてや、この方法によるセキュリティ上の問題は不明です。
どんな結果になるか
ここでは、適当に測定データをcsvにしたファイルを添付し、件名や本文はテンプレートとして時刻の情報やファイル名の情報を表示させています。
プログラムを実行すると、適当なcsvが生成されてそれを指定したgmailアドレスにファイルを添付した状態で送信することができます。
今回の例では、件名はファイルの名前、本文には「何年何月何日何時何分何秒の記録」と書いていて、実際にそのcsvファイルが添付されて送信されている形としています。
プログラムの構造
データファイルを生成する部分についてはもちろん個々のプログラムによりますが、今回のサンプルでは単に10行3列の乱数データを用意し、これをcsvに保存しました。
ファイルを閉じる関数のパス出力は、後でメール添付するファイルを指定するのに使用できます。
メール送信部分は、データ通信>>プロトコルの関数パレットにある関数を使用しています。
今回は件名をファイル名としました。また本文には何時何分に終了した測定のデータを添付しています、と表示できるように文字列にフォーマット化関数でテンプレ化しています。実際はもちろんどんな値としてもかまいません。
なお、Gmailの場合、ハンドルを開く関数のサーバアドレスは固定で、「smtp.gmail.com:587」となります(587の前にコロン(:)を忘れないようにします)。
Gmailが届かない?
上記のプログラムを使って、実際にテストしてみると、中には「あれ、gmail届かないぞ」という場合もあると思います。その場合には、エラー(例えば363540など)が出ると思います。
そんな場合には、送信元アドレスのアカウントでGmailにセキュリティの重大な警告というメッセージが出ているか確認してみます。
私が試したところ、これはgmailの設定でセキュリティの設定を変更する必要があり、以下の図の要領でセキュリティに関する項目の設定を有効にすることでエラーが消えて無事送れるようになりました。
これを有効にすることでメールが届くようになると思います。
安全性の低いアプリのアクセス設定ができない場合
上の項目で紹介した、「安全性の低いアプリのアクセス設定」にて、許可を有効にするという方法は、現在(2021年9月)できないようです。
Googleが、この有効、無効にする機能そのものをなくしてしまっているからですね。
じゃあできないじゃん!と嘆く前に、以下で紹介するようにPythonを使用する方法を試してみてください。要はPython経由でLabVIEWからメールを送る、という方法になります。
準備1
Pythonからメールを送れるようにする必要があるのですが、これにはGoogleのアカウントのセキュリティの設定から「Googleへのログイン」にて「2段階認証プロセス」をオンの状態として、かつアプリパスワードを設定する必要があります。
2段階認証プロセスについては、Googleのアカウントで登録した電話番号に送られてくるコードを入力して行うようです。
以下の図のような画面が出てくると思うので、画面の指示に従ってコードを入力します。
コード入力後、2段階認証プロセスを有効にするというボタンが表れるので有効にします。
そしてアプリパスワードを生成します。
アプリパスワード生成のアプリ名やデバイス名は以下の図のような設定でとりあえず問題なさそうです。
アプリパスワードが生成されたら、これを記録しておきます。あとでプログラムの中で使用します。
ここまででGoogleのアカウント側の設定は終わりました。
一応、ここで生成したパスワードを使うことで、上で紹介したSMTPの方法でうまくメール送信はできるみたいです。この場合、「ハンドルを開く」の関数に対して、「ユーザー名」としてはGoogleのアカウント名(基本的にgmailアドレスになっていると思います)、「パスワード」に今生成した値を入れます。
[2024/05/03 追記]
2024年5月の時点で、上記の「パスワード」の生成ページには以下のURLから飛べるようです。
こちらをクリックするとアプリパスワードの生成画面に進むので、適当な名前のアプリ名(以下の図ではmyLVとしています)を設定して生成します。
生成されるのは16桁の英数字で、4桁ごとにスペースがありますが、vi上でパスワードを指定する際にはスペースを無くして入力します。
[追記終わり]
とはいえ、Pythonの方でメールを送ることもできるので、次にプログラム側の準備をします。
準備2
Pythonでメールを送るので、それ用のPythonコードを書く必要があります。
以下のPythonプログラムは、特に添付ファイルなどはなく、件名と本文のみのシンプルな構成の場合の例です。
LabVIEWからPythonプログラムをPythonノードで呼ぶ場合、Python側の処理は関数の形をしている必要があることに注意します。
なお、このコードはPython 2.Xでは動作しないので、3.XのバージョンがPCにインストールされている必要があります。
上記のようなPythonコードを用意し終えたら、LabVIEW側でこの.pyファイルを呼ぶためのプログラムを書きます。
Pythonノードを使用して、以下のようなプログラムを作れば完成です。
基本的に各制御器に書かれた通りにメールアドレスなどを入力していけば大丈夫ですが、「アプリパスワード」は先ほど準備1で生成した文字を、間にスペースなど入れずに入力します。この部分については定数としてブロックダイアグラムで固定値として扱ってしまってもいいと思います。
なお、Pythonノードは以下の図のように「接続」のパレットの中にあります。
注意点としては、.pyファイルの場所を指定する、ファイルパスの中に日本語が含まれるとエラーが起こることがある点です。回避策としては、日本語を含まないパスにするようにしましょう。
また、上でも書きましたが、Pythonコードが3.XのPythonでしか対応していない機能を書いているため、PythonノードのPythonセッションを開くの関数で指定するPythonバージョンも3.Xのバージョンにするよう必要があります。具体的に3.XのXにどのバージョンが入るかは、LabVIEWのバージョンによってPythonセッションを開くの関数が対応するバージョンが異なるので、この関数のヘルプを確認してください。
元々のLabVIEWの関数としてあるSMTPの関数でもできるからいいじゃん、と思うかもしれませんが、試したところSMTPの方はなぜか件名に日本語が入っていると文字化けすることがあるようです。
一方で、上のPythonプログラムでメールを送る場合には文字化けしないようです。なぜなのかはわかりませんが・・・。
もしLabVIEWとPythonの連携について興味が出た!という場合には以下のような記事も参考になるかなと思います。
LabVIEWでどこまでの範囲を自動化するか、これは人それぞれだと思いますが、ここで紹介した以外にも、例えば何かプログラムでエラーが出たときにそれをメールで知らせるような場合にも今回の記事の内容が応用できると思います。
できるところまで自動化したいという要望を持った方に本記事が参考になればうれしいです。
ここまで読んでいただきありがとうございました。
コメント