ValenceではSMTPサーバーを指定することでRPGプログラムからメールを送信することが可能です。
例えば、App Builderで承認のプロセス処理などを作成する際や、特定の操作が行われた際に通知メールを送信するようなことが可能です。Tipsでは、メール送信機能の使用方法をご紹介します。
メール送信機能作成時に必要となるライセンスプログラム
メール送信機能を含むRPGプログラムをコンパイルするには、IBMiのライセンスプログラム(IBM i 5770-SS1 オプション13 System Openness Includes(オープンネス)) が必要になります。
オープンネスが導入されているか、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