001 /* 002 * Copyright (c) 2009 The openGion Project. 003 * 004 * Licensed under the Apache License, Version 2.0 (the "License"); 005 * you may not use this file except in compliance with the License. 006 * You may obtain a copy of the License at 007 * 008 * http://www.apache.org/licenses/LICENSE-2.0 009 * 010 * Unless required by applicable law or agreed to in writing, software 011 * distributed under the License is distributed on an "AS IS" BASIS, 012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, 013 * either express or implied. See the License for the specific language 014 * governing permissions and limitations under the License. 015 */ 016 package org.opengion.hayabusa.mail; 017 018 import java.util.ArrayList; 019 import java.util.HashMap; 020 import java.util.List; 021 import java.util.Map; 022 import java.util.Arrays; 023 024 import org.opengion.fukurou.db.DBUtil; 025 import org.opengion.fukurou.mail.MailTX; 026 import org.opengion.fukurou.util.LogWriter; 027 import org.opengion.fukurou.util.StringUtil; 028 import org.opengion.hayabusa.common.HybsSystem; 029 030 /** 031 * パッチによるメール送信の実?ラスです? 032 * 送信??モンはパラメータ??ブル(GE30)を監視して、新規???タが登録されたら? 033 * そ???タをパラメータとしてメール合?処?ソ?に渡して合?を行って送信します? 034 * ?に、??果を受取って、パラメータ??ブルの状況フラグを?信?送信エラーに更新します? 035 * エラーが発生した?合?エラー??ブルにエラーメ?ージを書き込みます? 036 * 037 * @og.group メールモジュール 038 * 039 * @version 4.0 040 * @author Sen.Li 041 * @since JDK1.6 042 */ 043 public class MailManager_DB extends AbstractMailManager { 044 // 5.2.0.0 (2010/09/01) Ver4互換モード対? 045 private static final String H_TXT = HybsSystem.sysBool( "VER4_COMPATIBLE_MODE" ) ? "HEADER" : "H_TXT"; 046 private static final String F_TXT = HybsSystem.sysBool( "VER4_COMPATIBLE_MODE" ) ? "FOOTER" : "F_TXT"; 047 048 // 5.2.0.0 (2010/09/01) Ver4互換モード対? 049 // private static final String selGE30 = "SELECT UNIQ,PTN_ID,FROM_ID,TO_ID,CC_ID,BCC_ID,H_TXT,F_TXT" // 5.0.3.0 (2009/11/04) 050 private static final String selGE30 = "SELECT UNIQ,PTN_ID,FROM_ID,TO_ID,CC_ID,BCC_ID,"+H_TXT+","+F_TXT 051 +",PARAM0,PARAM1,PARAM2,PARAM3,PARAM4,PARAM5,PARAM6,PARAM7,PARAM8,PARAM9" 052 +",ATTACH1,ATTACH2,ATTACH3,ATTACH4,ATTACH5" 053 + " FROM GE30" 054 + " WHERE SYSTEM_ID =? AND FGJ='1'"; 055 private static final String insGE36 = "INSERT INTO GE36(PARA_KEY,ERRMSG,DYSET,USRSET,PGUPD,SYSTEM_ID,FGJ)" 056 + " VALUES(?,?,?,?,?,?,'1')"; 057 private static final String updGE30 = "UPDATE GE30 SET FGJ= ? WHERE UNIQ = ? "; 058 private static final String SNED_OK = "2"; 059 private static final String SNED_NG = "8"; 060 private static final int GE30_UNIQ = 0 ; 061 private static final int GE30_PTN_ID = 1 ; 062 private static final int GE30_FROM_ID = 2 ; 063 private static final int GE30_TO_ID = 3 ; 064 private static final int GE30_CC_ID = 4 ; 065 private static final int GE30_BCC_ID = 5 ; 066 private static final int GE30_H_TXT = 6 ; // 5.0.3.0 (2009/11/04) HEADER ?H_TXT 067 private static final int GE30_F_TXT = 7 ; // 5.0.3.0 (2009/11/04) FOOTER ?F_TXT 068 private static final int GE30_PARAM0 = 8 ; 069 private static final int GE30_PARAM1 = 9 ; 070 private static final int GE30_PARAM2 = 10 ; 071 private static final int GE30_PARAM3 = 11 ; 072 private static final int GE30_PARAM4 = 12 ; 073 private static final int GE30_PARAM5 = 13 ; 074 private static final int GE30_PARAM6 = 14 ; 075 private static final int GE30_PARAM7 = 15 ; 076 private static final int GE30_PARAM8 = 16 ; 077 private static final int GE30_PARAM9 = 17 ; 078 private static final int GE30_ATTACH1 = 18 ; 079 private static final int GE30_ATTACH2 = 19 ; 080 private static final int GE30_ATTACH3 = 20 ; 081 private static final int GE30_ATTACH4 = 21 ; 082 private static final int GE30_ATTACH5 = 22 ; 083 private static final int GE36_PARA_KEY = 0 ; 084 private static final int GE36_ERRMSG = 1 ; 085 private static final int GE36_DYSET = 2 ; 086 private static final int GE36_USRSET = 3 ; 087 private static final int GE36_PGUPD = 4 ; 088 private static final int GE36_SYSTEM_ID = 5 ; 089 private final List<String> errMsgList = new ArrayList<String>(); 090 091 /** 092 * バッチより呼出のメインメソ?です? 093 * パラメータ??ブル(GE30)を監視します? 094 * 新規???タが登録されたら、メール?合?して送信を行います? 095 * エラーが発生した?合?エラー??ブルにエラーメ?ージを書き込みます? 096 * 097 * @og.rev 5.5.5.1 (2012/08/07) リソース系DBID 付け忘れ対? 098 * 099 * @param systemId シス?ID 100 */ 101 public void sendDBMail( final String systemId ){ 102 // パラメータ??ブルよりバッチでセ?した??タを取得します? 103 // String[][] ge30datas = DBUtil.dbExecute( selGE30, new String[]{ systemId }, appInfo ); 104 String[][] ge30datas = DBUtil.dbExecute( selGE30, new String[]{ systemId }, appInfo, DBID ); // 5.5.5.1 (2012/08/07) 105 106 int ge30Len = ge30datas.length; 107 for( int i=0; i < ge30Len; i++ ) { 108 String fgj = SNED_OK; 109 try { 110 Map<String, String> initParam = makeParamMap( systemId, ge30datas[i] ); 111 create( initParam ); 112 send(); // 合?されたメール?、宛?で送信処?行います? 113 errMsgList.addAll( getErrList() ); 114 } 115 catch( RuntimeException rex ) { 116 fgj = SNED_NG; 117 errMsgList.add( "メール送信失敗しました。パラメータキー?? + ge30datas[i][GE30_UNIQ] + " " + rex.getMessage() ); 118 } 119 finally { 120 commitParamTable( ge30datas[i][GE30_UNIQ], fgj ); 121 // if ( errMsgList.size() > 0 ) { 122 if ( ! errMsgList.isEmpty() ) { 123 writeErrorTable( ge30datas[i][GE30_UNIQ], systemId, errMsgList ); 124 errMsgList.clear(); 125 } 126 } 127 } 128 } 129 130 /** 131 * パラメータ??ブルに登録した??タをパラメータマップにセ?します? 132 * 133 * @param systemId シス?ID 134 * @param ge30Data パラメータ??ブルの??タ配? 135 * 136 * @return ??タをセ?したマッ? 137 */ 138 private Map<String, String> makeParamMap( final String systemId, final String[] ge30Data ){ 139 Map<String,String> paramMap = null; 140 if( ( ge30Data != null ) && ( ge30Data.length > 0 ) ) { 141 paramMap = new HashMap<String,String>(); 142 paramMap.put( "SYSTEM_ID", systemId ); 143 paramMap.put( "PARAKEY", ge30Data[GE30_UNIQ] ); 144 paramMap.put( "PTN_ID" , ge30Data[GE30_PTN_ID] ); 145 paramMap.put( "FROM" , ge30Data[GE30_FROM_ID] ); 146 paramMap.put( "TO" , ge30Data[GE30_TO_ID] ); 147 paramMap.put( "CC" , ge30Data[GE30_CC_ID] ); 148 paramMap.put( "BCC" , ge30Data[GE30_BCC_ID] ); 149 paramMap.put( "H_TXT" , ge30Data[GE30_H_TXT] ); // 5.0.3.0 (2009/11/04) HEADER ?H_TXT 150 paramMap.put( "F_TXT" , ge30Data[GE30_F_TXT] ); // 5.0.3.0 (2009/11/04) FOOTER ?F_TXT 151 paramMap.put( "PARAM0" , ge30Data[GE30_PARAM0] ); 152 paramMap.put( "PARAM1" , ge30Data[GE30_PARAM1] ); 153 paramMap.put( "PARAM2" , ge30Data[GE30_PARAM2] ); 154 paramMap.put( "PARAM3" , ge30Data[GE30_PARAM3] ); 155 paramMap.put( "PARAM4" , ge30Data[GE30_PARAM4] ); 156 paramMap.put( "PARAM5" , ge30Data[GE30_PARAM5] ); 157 paramMap.put( "PARAM6" , ge30Data[GE30_PARAM6] ); 158 paramMap.put( "PARAM7" , ge30Data[GE30_PARAM7] ); 159 paramMap.put( "PARAM8" , ge30Data[GE30_PARAM8] ); 160 paramMap.put( "PARAM9" , ge30Data[GE30_PARAM9] ); 161 paramMap.put( "ATTACH1", ge30Data[GE30_ATTACH1] ); 162 paramMap.put( "ATTACH2", ge30Data[GE30_ATTACH2] ); 163 paramMap.put( "ATTACH3", ge30Data[GE30_ATTACH3] ); 164 paramMap.put( "ATTACH4", ge30Data[GE30_ATTACH4] ); 165 paramMap.put( "ATTACH5", ge30Data[GE30_ATTACH5] ); 166 paramMap.put( "DATE", HybsSystem.getDate("yyyy/MM/dd") ); 167 paramMap.put( "TIME", HybsSystem.getDate("HH:mm:ss") ); 168 paramMap.put( "LOGIN_USERID", "DAEMON" ); 169 paramMap.put( "LOGIN_USERNAME", "DAEMON" ); 170 paramMap.put( "PGID", "DAEMON" ); 171 } 172 return paramMap; 173 } 174 175 /** 176 * 送信後?パラメータ??ブルの状況フラグを更新します? 177 * 送信エラーなし?場合?フラグを?送信?2)’?エラーの場合?送信エラー(8)’に更新します? 178 * 179 * @og.rev 5.5.5.1 (2012/08/07) リソース系DBID 付け忘れ対? 180 * 181 * @param uniq ユニ?クキー 182 * @param fgj 状況フラグ[2:送信?8:エラー] 183 */ 184 private void commitParamTable( final String uniq, final String fgj ){ 185 String[] updGE30Args = { fgj, uniq }; 186 // DBUtil.dbExecute( updGE30, updGE30Args, appInfo ); 187 DBUtil.dbExecute( updGE30, updGE30Args, appInfo, DBID ); // 5.5.5.1 (2012/08/07) 188 } 189 190 /** 191 * エラー??ブルにエラーメ?ージを登録します? 192 * 193 * @og.rev 4.4.0.1 (2009/08/08) メール送信追? 194 * @og.rev 5.5.5.1 (2012/08/07) リソース系DBID 付け忘れ対? 195 * 196 * @param paraKey パラメータキー(GE36.PARA_KEY) 197 * @param systemId シス?ID 198 * @param emList エラーメ?ージリス? 199 * 200 */ 201 // private void writeErrorTable( final String paraKey, final String systemId, final List<String> errMsgList ){ 202 private void writeErrorTable( final String paraKey, final String systemId, final List<String> emList ){ 203 String[] insGE36Args = new String[6]; 204 insGE36Args[GE36_PARA_KEY] = paraKey; 205 insGE36Args[GE36_DYSET] = HybsSystem.getDate( "yyyyMMddHHmmss" ); 206 insGE36Args[GE36_USRSET] = "DAEMON"; 207 insGE36Args[GE36_PGUPD] = "DAEMON"; 208 insGE36Args[GE36_SYSTEM_ID] = systemId; 209 for( int i=0; i< emList.size(); i++ ){ 210 insGE36Args[GE36_ERRMSG] = trim( emList.get( i ), 4000); 211 // DBUtil.dbExecute( insGE36, insGE36Args,appInfo ); 212 DBUtil.dbExecute( insGE36, insGE36Args, appInfo, DBID ); // 5.5.5.1 (2012/08/07) 213 } 214 215 sendMail( paraKey, systemId, emList ); // 4.4.0.1 (2009/08/08) 216 } 217 218 /** 219 * エラー??のメール送信を行います? 220 * エラーメールは、シス?パラメータ の COMMON_MAIL_SERVER(メールサーバ?)と 221 * ERROR_MAIL_FROM_USER(エラーメール発信?と、ERROR_MAIL_TO_USERS(エラーメール受信? 222 * がすべて設定されて?場合に??信されます? 223 * 224 * @og.rev 4.4.0.1 (2009/08/08) 追? 225 * @og.rev 5.4.3.2 (2012/01/06) 認証対? 226 * 227 * @param paraKey メールキー 228 * @param systemId シス?ID 229 * @param emList エラーメ?ージリス? 230 */ 231 // private void sendMail( final String paraKey, final String systemId, final List<String> errMsgList ) { 232 private void sendMail( final String paraKey, final String systemId, final List<String> emList ) { 233 234 String host = HybsSystem.sys( "COMMON_MAIL_SERVER" ); 235 String from = HybsSystem.sys( "ERROR_MAIL_FROM_USER" ); 236 String charset = HybsSystem.sys( "MAIL_DEFAULT_CHARSET" ); 237 String smtpPort = HybsSystem.sys( "SMTP_PORT" ); // 5.4.3.2 (2012/01/06) 238 String auth = HybsSystem.sys( "MAIL_SEND_AUTH" ); // 5.4.3.2 (2012/01/06) 239 String authPort = HybsSystem.sys( "MAIL_SEND_AUTH_PORT" ); // 5.8.1.1 (2014/11/14) 240 String authUser = HybsSystem.sys( "MAIL_SEND_AUTH_USER" ); // 5.4.3.2 (2012/01/06) 241 String authPass = HybsSystem.sys( "MAIL_SEND_AUTH_PASSWORD" ); // 5.4.3.2 (2012/01/06) 242 243 String[] to = StringUtil.csv2Array( HybsSystem.sys( "ERROR_MAIL_TO_USERS" ) ); 244 if( host != null && from != null && to.length > 0 ) { 245 String subject = "SYSTEM_ID=[" + systemId + "] , PARA_KEY=[" + paraKey + "] , " 246 + "DMN_HOST=[" + HybsSystem.HOST_NAME + "]" ; 247 StringBuilder inErrMsg = new StringBuilder(); 248 inErrMsg.append( emList.size() + "件のエラーがありました? ); 249 inErrMsg.append( HybsSystem.CR ); 250 for( int i=0; i< emList.size(); i++ ){ 251 inErrMsg.append( i+1 ); 252 inErrMsg.append( "-----" ); 253 inErrMsg.append( HybsSystem.CR ); 254 inErrMsg.append( emList.get( i ) ); 255 inErrMsg.append( HybsSystem.CR ); 256 } 257 try { 258 //MailTX tx = new MailTX( host ); 259 MailTX tx = new MailTX( host, charset, smtpPort, auth, authPort, authUser, authPass ); // 5.4.3.2 260 tx.setFrom( from ); 261 tx.setTo( to ); 262 tx.setSubject( "メールモジュール送信エラー?? + subject ); 263 tx.setMessage( inErrMsg.toString() ); 264 tx.sendmail(); 265 } 266 catch( Throwable ex ) { 267 String errMsg = "エラー時メール送信に失敗しました? + HybsSystem.CR 268 + " SUBJECT:" + subject + HybsSystem.CR 269 + " HOST:" + host + HybsSystem.CR 270 + " FROM:" + from + HybsSystem.CR 271 + " TO:" + Arrays.toString( to ) + HybsSystem.CR 272 + ex.getMessage(); // 5.1.8.0 (2010/07/01) errMsg 修正 273 LogWriter.log( errMsg ); 274 LogWriter.log( ex ); 275 } 276 } 277 } 278 }