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