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 static org.opengion.fukurou.util.StringUtil.csv2ArrayOnly; 019 import static org.opengion.fukurou.util.StringUtil.nval; 020 021 import java.util.ArrayList; 022 import java.util.List; 023 import java.util.Map; 024 import java.util.TreeMap; 025 026 import javax.mail.internet.AddressException; 027 import javax.mail.internet.InternetAddress; 028 029 import org.opengion.fukurou.db.DBUtil; 030 import org.opengion.hayabusa.common.HybsSystem; 031 032 /** 033 * メール定型?びそれも基づ???目の合?を行うクラスです? 034 * コンストラクタには定型文ID及?シス?IDで定型??スタよりメールの定型?取得します? 035 * メール??目のゲ?ーでは、定型???を?にパラメータ値とマ?ジして??目を合成します? 036 * 宛?につ?、セ?した社員ID、グループIDと定型??宛?設定に基づき?社員マスタと 037 * グループ?スタよりメールアドレス??を取得して宛?マップを作?します? 038 * 039 * 040 * @og.rev 5.6.6.0 (2013/07/05) host?対応?GE37??です? 041 * 042 * @og.group メールモジュール 043 * 044 * @version 4.0 045 * @author Sen.Li 046 * @since JDK1.6 047 */ 048 public class MailPattern { 049 050 // 5.2.0.0 (2010/09/01) Ver4互換モード対? 051 private static final String CONTENTS = HybsSystem.sysBool( "VER4_COMPATIBLE_MODE" ) ? "CONTENT" : "CONTENTS"; 052 private static final String ADDRESS = HybsSystem.sysBool( "VER4_COMPATIBLE_MODE" ) ? "MEMBER" : "ADDRESS"; 053 private static final String NAME_JA = HybsSystem.sysBool( "VER4_COMPATIBLE_MODE" ) ? "NAME" : "NAME_JA"; 054 private static final String KBNAME = HybsSystem.sysBool( "VER4_COMPATIBLE_MODE" ) ? "NM_KBN" : "KBNAME"; 055 056 // 5.1.0.0 (2009/11/04) CONTENT ?CONTENTS 057 // 5.2.0.0 (2010/09/01) Ver4互換モード対? 058 // private static final String selGE31 = "SELECT PTN_ID,FROM_ID,TO_ID,CC_ID,BCC_ID,TITLE,CONTENTS" 059 private static final String selGE31 = "SELECT PTN_ID,FROM_ID,TO_ID,CC_ID,BCC_ID,TITLE,"+CONTENTS 060 + " ,JOKEN" // 5.6.6.0 (2013/07/05) 061 + " FROM GE31" 062 + " WHERE SYSTEM_ID =? AND PTN_ID=? AND FGJ='1'"; 063 // 5.1.0.0 (2009/11/04) MEMBER ?ADDRESS , NM_KBN ?KBNAME , NAME ?NAME_JA 064 // 5.2.0.0 (2010/09/01) Ver4互換モード対? 065 // private static final String selGE33 = "SELECT A.ADDRESS,A.NAME_JA,B.NAME_JA" 066 private static final String selGE33 = "SELECT A."+ADDRESS+",A."+NAME_JA+",B."+NAME_JA 067 + " FROM GE33 A,GE33 B" 068 + " WHERE A.FGJ='1' AND B.FGJ(+)='1' AND A.GROUP_ID=B.GROUP_ID(+)" 069 // + " AND A.KBNAME='1' AND B.KBNAME(+)='0' AND A.SYSTEM_ID=B.SYSTEM_ID(+)" 070 + " AND A."+KBNAME+"='1' AND B."+KBNAME+"(+)='0' AND A.SYSTEM_ID=B.SYSTEM_ID(+)" 071 + " AND A.SYSTEM_ID =? " 072 + " AND A.GROUP_ID =?"; 073 // 5.3.5.0 (2011/05/01) Ver4対応漏れ対? 074 // 5.9.6.3 (2013/10/25) selGE35をpublic? 075 // private static final String selGE35 = "SELECT NAME_JA,MAIL" 076 // private static final String selGE35 = "SELECT "+NAME_JA+",MAIL" 077 /** 078 * GE35のメールアドレス検索? 079 */ 080 public static final String selGE35 = "SELECT "+NAME_JA+",MAIL" 081 + " FROM GE35" 082 + " WHERE USERID=?"; 083 084 // 5.6.6.0 (2013/07/05) 振り?け条件 085 private static final String selGE37 = "SELECT HOST,PORT,AUTH,AUTHUSER,AUTHPASS" 086 + " FROM GE37" 087 + " WHERE SYSTEM_ID = ?" 088 + " AND JOKEN = ?" 089 + " AND FGJ ='1'"; 090 091 // ???タのカラ?号(定型??スタ??ブル) 092 // 5.1.9.0 (2010/09/01) public ?private へ変更 093 // private static final int GE31_PTN_ID = 0 ; // 未使用 094 private static final int GE31_FROM_ID = 1 ; 095 private static final int GE31_TO_ID = 2 ; 096 private static final int GE31_CC_ID = 3 ; 097 private static final int GE31_BCC_ID = 4 ; 098 private static final int GE31_TITLE = 5 ; 099 private static final int GE31_CONTENTS = 6 ; // 5.1.0.0 (2009/11/04) CONTENT ?CONTENTS 100 private static final int GE31_JOKEN = 7 ; // 5.6.6.0 (2013/07/05) 101 102 // ???タのカラ?号(グループ?スタ) 103 private static final int GE33_ADDRESS = 0 ; // 5.1.0.0 (2009/11/04) MEMBER ?ADDRESS 104 private static final int GE33_MNAME = 1 ; 105 private static final int GE33_GNAME = 2 ; 106 // ???タのカラ?号(社員マスタ) 107 // 5.6.9.3 (2013/10/25) public? 108 // private static final int GE35_NAME = 0 ; 109 // private static final int GE35_MAIL = 1 ; 110 /** 111 * GE35のユーザ名称 112 */ 113 public static final int GE35_NAME = 0 ; 114 /** 115 * GE35のメールアドレス 116 */ 117 public static final int GE35_MAIL = 1 ; 118 119 // ???タのカラ?号(送信ホスト?スタ) 120 private static final int GE37_HOST = 0 ; 121 private static final int GE37_PORT = 1 ; 122 private static final int GE37_AUTH = 2 ; 123 private static final int GE37_AUTHUSER = 3 ; 124 private static final int GE37_AUTHPASS = 4 ; 125 126 // ???タのカラ?号(宛???ブル) 127 /** カラ?号(宛???ブル) {@value} */ 128 public static final int IDX_DST_ID = 0 ; 129 /** カラ?号(宛???ブル) {@value} */ 130 public static final int IDX_GROUP_ID = 1 ; 131 /** カラ?号(宛???ブル) {@value} */ 132 public static final int IDX_GROUP_NAME = 2 ; 133 /** カラ?号(宛???ブル) {@value} */ 134 public static final int IDX_DST_NAME = 3 ; 135 /** カラ?号(宛???ブル) {@value} */ 136 public static final int IDX_DST_ADDR = 4 ; 137 /** カラ?号(宛???ブル) {@value} */ 138 public static final int IDX_DST_KBN = 5 ; 139 /** カラ?号(宛???ブル) {@value} */ 140 public static final int IDX_FGJ = 6 ; 141 142 /** メール送信区?{@value} */ 143 public static final int KBN_TO = 0 ; // メール送信区?TO) 144 /** メール送信区?{@value} */ 145 public static final int KBN_CC = 1 ; // メール送信区?CC) 146 /** メール送信区?{@value} */ 147 public static final int KBN_BCC = 2 ; // メール送信区?BCC) 148 149 private static final String PreFixGroup = "GP."; 150 private final List<String> errAddrList = new ArrayList<String>(); 151 // private Map<String, String> paramMap = new HashMap<String, String>(); 152 private final Map<String, String> paramMap ; 153 private String fromId = null; 154 private final String toId ; 155 private final String ccId ; 156 private final String bccId ; 157 private String[][] title = null; 158 private String[][] content = null; 159 private Map<String, String[]> mailDstMap; 160 161 // 5.6.6.0 (2013/07/05) 162 private String host = HybsSystem.sys( "COMMON_MAIL_SERVER" ); 163 private String smtpPort = HybsSystem.sys( "SMTP_PORT" ); 164 private String auth = HybsSystem.sys( "MAIL_SEND_AUTH" ); 165 private String authUser = HybsSystem.sys( "MAIL_SEND_AUTH_USER" ); 166 private String authPass = HybsSystem.sys( "MAIL_SEND_AUTH_PASSWORD" ); 167 168 169 private final String DBID = HybsSystem.sys( "RESOURCE_DBID" ); // 5.5.5.1 (2012/08/07) リソース系DBID 付け忘れ対? 170 171 /** 172 * メール定型?ブジェクトを作?するコンストラクタです? 173 * 定型??スタより取得したデータを各フィルードにセ?します? 174 * 175 * @og.rev 5.5.5.1 (2012/08/07) リソース系DBID 付け忘れ対? 176 * @og.rev 5.6.6.0 (2013/07/05) 振り?け対? 177 * 178 * @param params パラメータのマッ? 179 */ 180 public MailPattern( final Map<String, String> params ){ 181 paramMap = params; 182 String sysId = params.get( "SYSTEM_ID" ); 183 String pid = params.get( "PTN_ID" ); 184 String[] selGE30Args = { sysId,pid }; 185 // String[][] ptn = DBUtil.dbExecute( selGE31, selGE30Args, AbstractMailManager.appInfo ); 186 String[][] ptn = DBUtil.dbExecute( selGE31, selGE30Args, AbstractMailManager.appInfo, DBID ); // 5.5.5.1 (2012/08/07) 187 if( ptn == null || ptn.length <=0 ) { 188 String errMsg = "定型?得できません。シス?ID?? + sysId + "定型文ID?? + pid ; 189 throw new RuntimeException( errMsg ); 190 } 191 fromId = ptn[0][GE31_FROM_ID]; 192 toId = ptn[0][GE31_TO_ID]; 193 ccId = ptn[0][GE31_CC_ID]; 194 bccId = ptn[0][GE31_BCC_ID]; 195 String tit = ptn[0][GE31_TITLE]; 196 if( tit != null && tit.length() > 0 ) { 197 title = splitParam( tit ); 198 } 199 String con = ptn[0][GE31_CONTENTS]; // 5.1.0.0 (2009/11/04) CONTENT ?CONTENTS 200 if( con != null && con.length() > 0 ) { 201 content = splitParam( con ); 202 } 203 // 5.6.6.0 (2013/07/05) 振り?け対? 204 String joken = ptn[0][GE31_JOKEN]; 205 if( joken != null && joken.length() > 0 ) { 206 String[] selGE37Args = { sysId,joken }; 207 String[][] jkn = DBUtil.dbExecute( selGE37, selGE37Args, AbstractMailManager.appInfo, DBID ); 208 if( ptn == null || ptn.length <=0 ) { 209 String errMsg = "メールホスト?振??が取得できません。シス?ID?? + sysId + "振?件?? + joken ; 210 throw new RuntimeException( errMsg ); 211 } 212 host = jkn[0][GE37_HOST]; 213 smtpPort = jkn[0][GE37_PORT]; 214 auth = jkn[0][GE37_AUTH]; 215 authUser = jkn[0][GE37_AUTHUSER]; 216 authPass = jkn[0][GE37_AUTHPASS]; 217 } 218 } 219 220 /** 221 * 定型??送信?D??設定?とパラメータ{@FROM}を?に送信?ドレスを取得します? 222 * 定型?は{@FROM}とセ?されて?場合?、パラメータ??#064;FROM??値を?に、社員IDをセ? 223 * されて?場合?直接そ?IDを?に社員マスタから送信?ドレスを取得します? 224 * 送信?ドレス取得できなければ例外を投げます? 225 * 226 * @og.rev 4.3.7.5 (2009/07/08) 送信?称が設定されて???合?、アドレス?>で囲わな? 227 * 228 * @return 送信?ドレス 229 */ 230 public String getFromAddr(){ 231 // 定型?{@FROM}⇒ユーザーよりセ?した??タで置換える?ユーザーIDの場合?そ?まま 232 if( "{@FROM}".equals( fromId ) ) { 233 fromId = paramMap.get( "FROM" ); 234 } 235 paramMap.put( "FROM_ID" , fromId ); // 送信?D 236 237 String[] userInf = getUserInfo( fromId ); 238 String fromAddr = null; 239 if( userInf != null && checkAddr ( fromId, userInf[1] ) ){ // 送信?ールアドレスチェ? 240 paramMap.put( "FROM_NAME", userInf[0] ); // 送信?? 241 // 4.3.7.5 (2009/07/08) 242 if( userInf[0] != null && userInf[0].length() > 0 ) { 243 fromAddr = userInf[0] + "<" + userInf[1] + ">" ; 244 } 245 else { 246 fromAddr = userInf[1]; 247 } 248 paramMap.put( "FROM_ADDR", fromAddr ); // 送信?ールアドレス 249 } 250 else { 251 String errMsg = "送信?ーザー??エラー。ユーザーID?? + fromId; 252 throw new RuntimeException( errMsg ); 253 } 254 255 return fromAddr; 256 } 257 258 /** 259 * マ?ジ済?メールタイトルを返します? 260 * 261 * @return メールタイトル 262 * 263 */ 264 public String getTitle(){ 265 return marge( title ); 266 } 267 268 /** 269 * マ?ジ済?メール本?返します? 270 * 271 * @og.rev 5.1.0.0 (2009/11/04) HEADER ?H_TXT , FOOTER ?F_TXT カラ?変更 272 * 273 * @return メール本? 274 */ 275 public String getContent(){ 276 String header = paramMap.get( "HEADER" ); // 5.1.0.0 (2009/11/04) HEADER ?H_TXT 277 StringBuilder contentBuf = new StringBuilder(); 278 if ( header != null ) { 279 contentBuf.append( header ).append( '\n' ); 280 } 281 contentBuf.append( marge( content ) ).append( '\n' ); 282 String fooder = paramMap.get( "FOOTER" ); // 5.1.0.0 (2009/11/04) FOOTER ?F_TXT 283 if ( fooder != null ) { 284 contentBuf.append( fooder ); 285 } 286 287 return contentBuf.toString(); 288 } 289 290 /** 291 * 引数の??により、定数??の部?パラメータの部??します? 292 * 例?A{@PARAM1}B"⇒rtn[0][0]="A",rtn[0][1]="B",rtn[1][0]="PARAM1" 293 * 294 * @param src ?対象の?? 295 * 296 * @return 定数??の部?パラメータの部??した配? 297 */ 298 private String[][] splitParam( final String src ) { 299 String[][] rtn = new String[2][]; 300 if( src == null ) { return new String[2][0]; } 301 302 ArrayList<String> listCons = new ArrayList<String>() ; 303 ArrayList<String> listPara = new ArrayList<String>() ; 304 305 int start = 0; 306 int index = src.indexOf( "{@" ); 307 while( index >= 0 ) { 308 listCons.add( src.substring( start, index ) ); 309 int end = src.indexOf( '}',index ); 310 if( end < 0 ) { 311 String errMsg = "{@ と } との対応関係がずれて?す?" 312 + "src=[" + src + "] : index=" + index ; 313 throw new RuntimeException( errMsg ); 314 } 315 listPara.add( src.substring( index + 2, end )); 316 317 start = end+1 ; 318 index = src.indexOf( "{@",start ); 319 } 320 listCons.add ( src.substring( start ) ); 321 322 rtn[0] = listCons.toArray( new String[listCons.size()] ); 323 rtn[1] = listPara.toArray( new String[listPara.size()] ); 324 325 return rtn; 326 } 327 328 /** 329 * 送信先?アドレスをセ?します? 330 * 定型?定義されて?宛?(TO、CC、BCC)を引数として渡します?引数には{@TO}、{@CC}、{@BCC}が含まれて?す? 331 * {@TO}、{@CC}、{@BCC}を?期設定?値で置換えて、実?メールアドレスマップを作?します? 332 * 333 * @return 宛?のマッ? 334 */ 335 public Map<String, String[]> getDstMap(){ 336 String[] toBuf = getDstArray( toId ); 337 String[] ccBuf = getDstArray( ccId ); 338 String[] bccBuf = getDstArray( bccId ); 339 340 // 送信?TO、CC、BCC)のマップを作?します? 341 mailDstMap = (TreeMap<String, String[]>)getDstAddrMap( bccBuf, KBN_BCC ); 342 mailDstMap.putAll( (TreeMap<String, String[]>) getDstAddrMap( ccBuf, KBN_CC ) ); 343 mailDstMap.putAll( (TreeMap<String, String[]>) getDstAddrMap( toBuf, KBN_TO ) ); 344 setDstWord(); 345 346 return mailDstMap; 347 } 348 349 /** 350 * アドレスエラーのメ?ージリストを返します? 351 * 352 * @return メ?ージリス? 353 */ 354 public List<String> getErrList(){ 355 return errAddrList; 356 } 357 358 /** 359 * 送信先?アドレスをcsv形式から?列にセ?します? 360 * 引数は定型??スタにセ?したも?です?例:{@TO},C12345,GP.IT 361 * ??#064;TO????#064;CC????#064;BCC??パラメータ??ブルにセ?したも?で置き換えます? 362 * ?後?配?には、ユーザーID及?グループIDが混在します? 363 * 364 * @param csvId csv形式?アドレス 365 * 366 * @return 送信先?アドレスの配? 367 */ 368 private String[] getDstArray( final String csvId ){ 369 String[] csvArr = csv2ArrayOnly( csvId ); 370 ArrayList<String> list = new ArrayList<String>(); 371 372 String[] tmp; 373 int size = csvArr.length; 374 for( int i = 0; i < size; i++ ){ 375 if( csvArr[i].startsWith( "{@" )){ 376 tmp = csv2ArrayOnly( paramMap.get( csvArr[i].substring( 2, csvArr[i].length() - 1 ) ) ); 377 int len = tmp.length; 378 for(int j=0;j<len;j++){ 379 list.add( tmp[j] ); 380 } 381 } 382 else{ 383 list.add( csvArr[i]); 384 } 385 } 386 return list.toArray( new String[list.size()] ); 387 } 388 389 /** 390 * 送信先?アドレス・マップを作?します? 391 *?数 dstBuf にはユーザーIDとグループID混在する配?です? 392 *?ーザーIDの場合?社員マスタのビューから名前及?メールアドレスを取得してマップにセ?します? 393 *?ループIDの場合?グループ?スタより、名前及びメールアドレスを取得してマップにセ?します? 394 *???ユーザーが存在する場合??にセ?した方が採用されます? 395 * 396 * @og.rev 5.1.0.0 (2009/11/04) MEMBER ?ADDRESS カラ?変更 397 * 398 * @param dstBuf ユーザーIDとグループID混在する配? 399 * @param kbn 送信区?0:TO/1:CC/2:BCC] 400 * 401 * @return 送信先?アドレス・マッ? 402 */ 403 private Map<String, String[]> getDstAddrMap( final String[] dstBuf, final int kbn ){ 404 Map<String,String[]> dstMap= new TreeMap<String,String[]>(); 405 // IDX_DST_ID ,IDX_GROUP_ID, IDX_GROUP_NAME ,IDX_DST_NAME ,IDX_DST_ADDR ,IDX_DST_KBN ,IDX_FGJ 406 String[] dstInit = { "", "", "", "", "", Integer.toString( kbn ), "7" }; 407 408 int len = dstBuf.length; 409 for( int i=0; i < len; i++ ){ 410 if( dstBuf[i].startsWith( PreFixGroup ) ) { // グループIDの場合?グループ?スタより、メンバ?を取得します? 411 String[][] groupUsers = getGroupUsers( dstBuf[i].substring( PreFixGroup.length() ) ); 412 if( groupUsers.length > 0 ) { 413 int memberCnt = groupUsers.length; 414 for( int j = 0; j < memberCnt; j++ ) { // グループメンバ?の処? 415 String[] grpMember = dstInit.clone(); 416 grpMember[IDX_GROUP_ID] = dstBuf[i].substring( PreFixGroup.length() ); // グループID 417 grpMember[IDX_GROUP_NAME] = groupUsers[j][GE33_GNAME]; // グループ名 418 grpMember[IDX_DST_ID] = groupUsers[j][GE33_ADDRESS]; // 宛?ID 419 grpMember[IDX_DST_NAME] = groupUsers[j][GE33_MNAME]; // 宛?? 420 if( groupUsers[j][GE33_ADDRESS].contains( "@" ) ) { // メールアドレスがセ?される?? 421 grpMember[IDX_DST_ADDR] = groupUsers[j][GE33_ADDRESS]; //?ールアドレス 422 } 423 else { // 社員IDがセ?された?? 424 String[] userAddr = getUserInfo( groupUsers[j][GE33_ADDRESS] ); 425 if ( userAddr != null && userAddr.length > 0 ){ 426 grpMember[IDX_DST_ADDR] = userAddr[GE35_MAIL]; //?ールアドレス 427 } 428 } 429 if ( checkAddr( grpMember[IDX_DST_ID], grpMember[IDX_DST_ADDR] ) ){ // アドレス構文チェ? 430 grpMember[IDX_FGJ] = AbstractMailManager.FGJ_SEND_WAIT; // 送信? 431 } 432 else { 433 grpMember[IDX_FGJ] = AbstractMailManager.FGJ_ADDR_ERR; // アドレス取得エラー 434 errAddrList.add( "アドレス取得エラー。ユーザーID?? + grpMember[IDX_DST_ID] + " アドレス?? + grpMember[IDX_DST_ADDR] ); 435 } 436 dstMap.put( groupUsers[j][GE33_ADDRESS], grpMember ); 437 } 438 } 439 else { // グループ?スタよりメンバ?取得できな??? 440 String[] emptyGp = dstInit.clone(); 441 emptyGp[IDX_GROUP_ID] = dstBuf[i]; // グループID 442 emptyGp[IDX_GROUP_NAME] = "*"; // グループID 443 emptyGp[IDX_DST_ID] = "NO-MEMBER"; // 宛?ID 444 dstMap.put( dstBuf[i], emptyGp ); 445 } 446 } 447 else { // ユーザーIDの場? 448 String[] indMember = dstInit.clone(); 449 indMember[IDX_DST_ID] = dstBuf[i]; // 宛?ID 450 indMember[IDX_GROUP_ID] = "*"; // グループID 451 indMember[IDX_GROUP_NAME] = "*"; // グループID 452 String[] userAddr = getUserInfo( dstBuf[i] ); 453 if ( userAddr != null && userAddr.length > 0 ){ 454 indMember[IDX_DST_NAME] = userAddr[GE35_NAME]; // 宛?? 455 indMember[IDX_DST_ADDR] = userAddr[GE35_MAIL]; //?ールアドレス 456 if ( checkAddr( indMember[IDX_DST_ID], userAddr[1] ) ) { 457 indMember[IDX_FGJ] = AbstractMailManager.FGJ_SEND_WAIT; 458 } 459 else { 460 indMember[IDX_FGJ] = AbstractMailManager.FGJ_ADDR_ERR; 461 errAddrList.add( "アドレス取得エラー。ユーザーID?? + indMember[IDX_DST_ID] + " アドレス?? + indMember[IDX_DST_ADDR] ); 462 } 463 464 } 465 else { 466 indMember[IDX_FGJ] = AbstractMailManager.FGJ_ADDR_ERR; // 状況コー? 467 } 468 dstMap.put( dstBuf[i], indMember ); 469 } 470 } 471 return dstMap; 472 } 473 474 /** 475 * グループ?スタより、ユーザー??を取得します? 476 * 戻り?の配?には、ユーザーIDまた?メールアドレス、ユーザー名?グループ名が?納されて?す? 477 * 478 * @og.rev 5.5.5.1 (2012/08/07) リソース系DBID 付け忘れ対? 479 * 480 * @param groupId グループID 481 * 482 * @return ユーザー?? 483 */ 484 private String[][] getGroupUsers( final String groupId ){ 485 String sysId = paramMap.get( "SYSTEM_ID" ); 486 String[] ge33SelArgs = { sysId,groupId }; 487 // String[][] ge33Datas = DBUtil.dbExecute( selGE33,ge33SelArgs,AbstractMailManager.appInfo ); 488 String[][] ge33Datas = DBUtil.dbExecute( selGE33,ge33SelArgs,AbstractMailManager.appInfo, DBID ); // 5.5.5.1 (2012/08/07) 489 490 if ( ge33Datas.length == 0 ) { 491 String errMsg = "グループ情報取得できません。グループID?? + groupId ; 492 if( "true".equals( paramMap.get( "ADDR_CHECK" ) ) ){ 493 throw new RuntimeException( errMsg ); 494 } 495 else { 496 errAddrList.add( errMsg ); 497 } 498 } 499 return ge33Datas; 500 } 501 502 /** 503 * メール送信ホストを返します? 504 * GE31のJOKEN(振り?け条件)を?に、GE37??ブルの HOST を取得します? 505 * 振り?け条件が未設定?場合?、シス?定数のCOMMON_MAIL_SERVER を使用します? 506 * 507 * (初期値:シス?定数のCOMMON_MAIL_SERVER[={@og.value org.opengion.hayabusa.common.SystemData#COMMON_MAIL_SERVER}])? 508 * 509 * @og.rev 5.6.6.0 (2013/07/05) 510 * 511 * @return メール送信ホス? 512 */ 513 public String getHost(){ 514 return host; 515 } 516 517 /** 518 * メール送信ポ?ト番号を返しま? 519 * GE31のJOKEN(振り?け条件)を?に、GE37??ブルの PORT を取得します? 520 * 振り?け条件が未設定?場合?、シス?定数のSMTP_PORT を使用します? 521 * 522 * (初期値:シス?定数のSMTP_PORT[={@og.value org.opengion.hayabusa.common.SystemData#SMTP_PORT}])? 523 * 524 * @og.rev 5.6.6.0 (2013/07/05) 525 * 526 * @return メール送信ポ?ト番号 527 */ 528 public String getSmtpPort(){ 529 return smtpPort; 530 } 531 532 /** 533 * メール送信時認証有無を返しま? 534 * GE31のJOKEN(振り?け条件)を?に、GE37??ブルの AUTH を取得します? 535 * 振り?け条件が未設定?場合?、シス?定数のMAIL_SEND_AUTH を使用します? 536 * 537 * (初期値:シス?定数のMAIL_SEND_AUTH[={@og.value org.opengion.hayabusa.common.SystemData#MAIL_SEND_AUTH}])? 538 * 539 * @og.rev 5.6.6.0 (2013/07/05) 540 * 541 * @return メール送信時認証有無 542 */ 543 public String getAuth(){ 544 return auth; 545 } 546 547 /** 548 * メール送信認証ユーザを返しま? 549 * GE31のJOKEN(振り?け条件)を?に、GE37??ブルの AUTHUSER を取得します? 550 * 振り?け条件が未設定?場合?、シス?定数のMAIL_SEND_AUTH_USER を使用します? 551 * 552 * (初期値:シス?定数のMAIL_SEND_AUTH_USER[={@og.value org.opengion.hayabusa.common.SystemData#MAIL_SEND_AUTH_USER}])? 553 * 554 * @og.rev 5.6.6.0 (2013/07/05) 555 * 556 * @return メール送信認証ユーザ 557 */ 558 public String getAuthUser(){ 559 return authUser; 560 } 561 562 /** 563 * メール送信認証パスワードを返しま? 564 * GE31のJOKEN(振り?け条件)を?に、GE37??ブルの AUTHPASS を取得します? 565 * 振り?け条件が未設定?場合?、シス?定数のMAIL_SEND_AUTH_PASSWORD を使用します? 566 * 567 * (初期値:シス?定数のMAIL_SEND_AUTH_PASSWORD[={@og.value org.opengion.hayabusa.common.SystemData#MAIL_SEND_AUTH_PASSWORD}])? 568 * 569 * @og.rev 5.6.6.0 (2013/07/05) 570 * 571 * @return メール送信認証パスワー? 572 */ 573 public String getAuthPass(){ 574 return authPass; 575 } 576 577 /** 578 * アドレスの構文チェ?を行います?合法?場合?'true'(取得できた)?法?場合?'false'(有効アドレス取得できず)を返します? 579 * 580 * @param userId ユーザーID 581 * @param address アドレス 582 * 583 * @return アドレスの構文チェ?結果(true:取?false:取得できず) 584 */ 585 private boolean checkAddr( final String userId, final String address ) { 586 boolean rtn = true; 587 try { 588 new InternetAddress( address ); 589 } 590 catch ( AddressException aep ) { 591 if ( "true".equals( paramMap.get( "ADDR_CHECK" ) ) ) { 592 String errMsg = "ユーザーメールアドレスエラー。ユーザーID?? + userId + " アドレス?? + address; 593 throw new RuntimeException( errMsg,aep ); 594 } 595 rtn = false; 596 } 597 return rtn; 598 } 599 600 /** 601 * 引数の配?から?を合成します? 602 * src[0]に配?には定数??、src[1]にはパラメータ 603 * 604 * @param src 引数の配? 605 * 606 * @return 合?された文? 607 */ 608 private String marge( final String[][] src ){ 609 StringBuilder rtnBuf = new StringBuilder(); 610 String rtn; 611 if ( src != null ){ 612 int len = src[1].length; 613 for(int i=0; i< len; i++) { 614 rtnBuf.append( src[0][i] ); 615 rtnBuf.append( paramMap.get( src[1][i] ) ); 616 } 617 rtnBuf.append( src[0][len] ); 618 rtn = rtnBuf.toString(); 619 } 620 else { 621 rtn = null; 622 } 623 624 return rtn; 625 } 626 627 /** 628 * 宛?(TO、CC、BCC)のID、名前?メールアドレスをパラメータマップにセ?します? 629 * 630 */ 631 private void setDstWord() { 632 StringBuilder to_id = new StringBuilder(); 633 StringBuilder to_name = new StringBuilder(); 634 StringBuilder to_addr = new StringBuilder(); 635 StringBuilder cc_id = new StringBuilder(); 636 StringBuilder cc_name = new StringBuilder(); 637 StringBuilder cc_addr = new StringBuilder(); 638 StringBuilder bcc_id = new StringBuilder(); 639 StringBuilder bcc_name = new StringBuilder(); 640 StringBuilder bcc_addr = new StringBuilder(); 641 int kbn; 642 for( String dstId : mailDstMap.keySet() ) { 643 kbn = Integer.parseInt( mailDstMap.get( dstId )[IDX_DST_KBN]); 644 switch( kbn ) { 645 case KBN_TO: 646 to_id.append( ',' ).append( dstId ); 647 to_name.append( ',' ).append( mailDstMap.get( dstId )[IDX_DST_NAME] ); 648 to_addr.append( ',' ).append( mailDstMap.get( dstId )[IDX_DST_NAME] ); 649 to_addr.append( '<' ).append( mailDstMap.get( dstId )[IDX_DST_ADDR] ).append( ">" ); 650 break; 651 case KBN_CC: 652 cc_id.append( ',' ).append( dstId ); 653 cc_name.append( ',' ).append( mailDstMap.get( dstId )[IDX_DST_NAME] ); 654 cc_addr.append( ',' ).append( mailDstMap.get( dstId )[IDX_DST_NAME] ); 655 cc_addr.append( '<' ).append( mailDstMap.get( dstId )[IDX_DST_ADDR] ).append( ">" ); 656 break; 657 case KBN_BCC: 658 bcc_id.append( ',' ).append( dstId ); 659 bcc_name.append( ',' ).append( mailDstMap.get( dstId )[IDX_DST_NAME] ); 660 bcc_addr.append( ',' ).append( mailDstMap.get( dstId )[IDX_DST_NAME] ); 661 bcc_addr.append( '<' ).append( mailDstMap.get( dstId )[IDX_DST_ADDR] ).append( ">" ); 662 break; 663 default: 664 String errMsg = "こ?アドレス区?サポ?トされません。区?? + kbn; 665 throw new RuntimeException( errMsg ); 666 } 667 } 668 // 予????に追?ます? 669 paramMap.put( "TO_ID" , ( to_id.length() > 0 ) ? to_id.toString().substring( 1 ):"" ); 670 paramMap.put( "TO_NAME" , ( to_name.length() > 0 ) ? to_name.toString().substring( 1 ):"" ); 671 paramMap.put( "TO_ADDR" , ( to_addr.length() > 0 ) ? to_addr.toString().substring( 1 ):"" ); 672 paramMap.put( "CC_ID" , ( cc_id.length() > 0 ) ? cc_id.toString().substring( 1 ):"" ); 673 paramMap.put( "CC_NAME" , ( cc_name.length() > 0 ) ? cc_name.toString().substring( 1 ):"" ); 674 paramMap.put( "CC_ADDR" , ( cc_addr.length() > 0 ) ? cc_addr.toString().substring( 1 ):"" ); 675 paramMap.put( "BCC_ID" , ( bcc_id.length() > 0 ) ? bcc_id.toString().substring( 1 ):"" ); 676 paramMap.put( "BCC_NAME", ( bcc_name.length() > 0 ) ? bcc_name.toString().substring( 1 ):"" ); 677 paramMap.put( "BCC_ADDR", ( bcc_addr.length() > 0 ) ? bcc_addr.toString().substring( 1 ):"" ); 678 } 679 680 /** 681 * 社員マスタより名前、メールアドレスを取得します? 682 * 戻り? rtn[0]:ユーザー名? rtn[1]:ユーザーメールアドレス 683 * 684 * @og.rev 4.3.6.6 (2009/05/15) メールアドレスが直接?された場合に対? 685 * @og.rev 5.5.5.1 (2012/08/07) リソース系DBID 付け忘れ対? 686 * 687 * @param userId ユーザーID 688 * 689 * @return 配???(rtn[0]:ユーザー名? rtn[1]:ユーザーメールアドレス) 690 */ 691 private String[] getUserInfo( final String userId ){ 692 String[] rtn = null; 693 694 if ( userId.contains( "@" ) ) { 695 rtn = new String[2]; 696 rtn[0] = ""; 697 rtn[1] = userId; 698 } 699 else { 700 String[] ge35SelArgs = { userId }; 701 // String[][] ge35Datas = DBUtil.dbExecute( selGE35,ge35SelArgs,AbstractMailManager.appInfo ); 702 String[][] ge35Datas = DBUtil.dbExecute( selGE35,ge35SelArgs,AbstractMailManager.appInfo, DBID ); // 5.5.5.1 (2012/08/07) 703 if ( ge35Datas.length > 0) { 704 rtn = ge35Datas[0]; 705 } 706 else { 707 String errMsg = "ユーザー??取得できません。ユーザーID?? + userId ; 708 if( "true".equals( paramMap.get( "ADDR_CHECK" ) ) ){ 709 throw new RuntimeException( errMsg ); 710 } 711 else { 712 errAddrList.add( errMsg ); 713 } 714 } 715 } 716 return rtn; 717 } 718 }