Migaro. 技術Tips

                       

ミガロ. 製品の技術情報
IBMiの活用に役立つ情報を掲載!


Valence メール送信機能の利用方法

ValenceではSMTPサーバーを指定することでRPGプログラムからメールを送信することが可能です。
例えば、App Builderで承認のプロセス処理などを作成する際や、特定の操作が行われた際に通知メールを送信するようなことが可能です。Tipsでは、メール送信機能の使用方法をご紹介します。

メール送信機能作成時に必要となるライセンスプログラム

メール送信機能を含むRPGプログラムをコンパイルするには、IBMiのライセンスプログラム(IBM i 5770-SS1 オプション13 System Openness Includes(オープンネス)) が必要になります。

ライセンスプログラム5770SS1 オープンネス

オープンネスが導入されているか、IBMiにエミュレーターで接続後、以下コマンドで確認可能です。

GO LICPGM

「ライセンスプログラムの処理」画面が表示されるので、「10.導入済みライセンス・プログラムの表示」を選択します。
「導入済みライセンス・プログラムの表示」画面でオープンネスが導入されているかご確認ください。

Valence SMTPサーバーの設定

Valenceの「ポータル管理」 > 「設定」の「IBMi設定」 > 「Eメール」の設定を変更します。

ポータル管理設定

Valenceからメールを送信する場合には、SMTPサーバーのホスト名、ポート番号、またSMTP認証が必要な場合には、 電子メール用デフォルト認証形式を「TLS」に変更後、電子メール用デフォルトSMTP認証ユーザー、電子メール用デフォルトSMTP認証パスワードを設定してください。
これらの設定は、RPGプログラム側から変更してメール送信することも可能です。

Valence メール送信の実装

条件付きコンパイル設定

Valenceにはメール送信するRPGプログラム「vvMail」が用意されています。
vvMailを使用するには、D定義書(Dspec)のコードを読み込む前に/define (条件付きコンパイル)  を使用してEmailを使用するコンパイル条件を設定してください。

例えば、EXNABBTNベースのRPGの場合、D定義書を読み込んでいるvvNabBtnの前に定義してください。

      /copy qcpylesrc,vvHspec
      /define includeEMAIL
     ** --------------------------------------------------------------
      /include qcpylesrc,vvNabBtn
     ** --------------------------------------------------------------
     ** program start
     ** --------------------------------------------------------------
      /free
       Initialize();
       // place your code within the Process procedure...
       //
       Process();
       CleanUp();
       *inlr=*on;
      /end-free

RPG Toolkit vvMail

メール送信

vvMailデータセットにパラメータを設定後、vvMail_send を使用してメールを送信します。
デフォルトでは、ポータル管理 > 設定 のEmailで定義したSMTPホスト、ポート番号、認証方法、認証情報を使用してメールを送信します。
以下例は、noreply@migaro.co.jp から sample@migaro.co.jpにメールを送信しています。

     p Process         b
     d                 pi
      /free
       vvMail.from= '"Valence Mail"<noreply@migaro.co.jp>';
       vvMail.to= 'sample@migaro.co.jp';
       vvMail.subject='メールタイトル';
       vvMail.body = 'メール本文の内容<div>メール本文の内容2行目</div>';
       if vvMail_send(vvMail);
         //メール送信成功
         SetResponse('success':'true');
         SetResponse('info':'メール送信完了');
       else;
         //メール送信失敗
         SetResponse('success':'false');
         SetResponse('msg':'メール送信完了');
       endif;
      /end-free
     p                 e
      /include qcpylesrc,vvNabBtn

vvMailには、vvMail.cc とvvMail.bcc も定義されていますので、CCやBCCでメールを送信したい場合には、ユーザーをカンマ区切りで指定して送信することもできます。

メールにファイルを添付

Valenceのメール機能では、ファイルを添付することも可能です。
IBMiのIFS上に出力されたファイルパスをvvMail.attachmentに設定するだけです。
また、複数のファイルを送付したい場合はカンマ区切りで複数のIFSパスを指定してください。

デフォルトでは、vvMail.attachmentに設定されたIFSパスがファイル名として設定されます。
ファイル名を変更したい場合はvvMail.attachAliasにファイル名を設定してください。

     p Process         b
     d                 pi
     d tempPath        s            100a    varying
     d attachFiles     s            500a    varying
     d attachAlias     s            100a    varying          
      /free
       vvMail.from= '"Valence Mail"<NoReply@migaro.co.jp>';
       vvMail.to= 'sample@migaro.co.jp';
       vvMail.subject = 'メールタイトル';
       vvMail.body = 'メール本文の内容<div>2行目</div>';

       tempPath = vvUtility_getValenceSetting('TEMP_PATH');

       attachFiles = %trim(tempPath) + 'image.jpg' + ',' 
                   + %trim(tempPath) + 'readme.txt'  ;

       attachAlias = '椅子.jpg,readme.txt';

       //添付ファイル
       vvMail.attachment  = attachFiles;
       vvMail.attachAlias = attachAlias;

       if vvMail_send(vvMail);
         //メール送信成功
         SetResponse('success':'true');
         SetResponse('info':'メール送信完了');
       else;
         //メール送信失敗
         SetResponse('success':'false');
         SetResponse('msg':'メール送信完了');
       endif;
      /end-free
     p                 e
      /include qcpylesrc,vvNabBtn

attachment にカンマ区切りでIFSファイルパスを設定、attachAlias にファイルの別名を設定しています。

添付ファイル付きメールの例

SMTPサーバーや認証情報を指定して送信

SMTPホストやポート番号、認証形式、認証情報をRPGから割り当てることも可能です。
各ユーザーごとに異なるSMTPサーバーを使用することもできます。

     p Process         b
     d                 pi 
      /free    
       vvMail.host = 'smtp.sample.com' ;
       vvMail.port = '587' ;
       vvMail.authType = 'TLS';
       vvMail.authUser = 'sample@migaro.co.jp';
       vvMail.authPwd = 'samplePassword';

       vvMail.from= 'sample@migaro.co.jp';
       vvMail.to= 'sample2@migaro.co.jp';
       vvMail.subject='メールタイトル';
       vvMail.body = 'メール本文の内容';
       if vvMail_send(vvMail);
         //メール送信成功
       else;
         //メール送信失敗
       endif;
      /end-free
     p                 e
      /include qcpylesrc,vvNabBtn