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