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.nval;
019
020 import java.util.List;
021 import java.util.ArrayList;
022 import java.util.HashMap;
023 import java.util.Map;
024
025 import javax.mail.Address;
026 import javax.mail.SendFailedException;
027 import javax.mail.internet.InternetAddress;
028
029 import org.opengion.fukurou.db.DBUtil;
030 import org.opengion.fukurou.mail.MailTX;
031 import org.opengion.fukurou.util.ApplicationInfo;
032 import org.opengion.hayabusa.common.HybsSystem;
033
034 /**
035 * タグ mailSender2 及ã?バッチによる送信の共通å?ç�?ƒ¨åˆ?‚’実è£?�—てã�?�¾すã?
036 * 送信タグ mailSender2 もしくã?送信ãƒ??モンからパラメータを受取りますã?
037 * パラメータ中の定型文ID及ã?シスãƒ?ƒ IDで定型æ–??スタよりメールの定型æ–?‚’取得してã€?
038 * パラメータ値とマã?ジしてメールæ–?‚’合æ?しますã?同時に、宛å?にセãƒ?ƒˆした社員IDã€?
039 * グループIDと定型æ–??宛å?設定に基づきã?社員マスタとグループã?スタよりメールアドレス
040 * æƒ??を取得して送信を行いますã?
041 * エラーがなければ送信したå†?®¹を履歴ãƒ??ブル、宛å?ãƒ??ブルに書き込みますã?
042 * æœ?¾Œに本処ç�??呼出å…?�«送信結果、エラーメãƒ?‚»ージを返しますã?
043 *
044 * @og.group メールモジュール
045 *
046 * @version 4.0
047 * @author Sen.Li
048 * @since JDK1.6
049 */
050 public abstract class AbstractMailManager {
051
052 // 5.2.0.0 (2010/09/01) Ver4互換モード対å¿?
053 private static final String CONTENTS = HybsSystem.sysBool( "VER4_COMPATIBLE_MODE" ) ? "CONTENT" : "CONTENTS";
054
055 private static final String selYkno = "SELECT GE32S02.NEXTVAL YKNO FROM DUAL";
056 // 5.0.3.0 (2009/11/04) CONTENT �CONTENTS
057 // 5.2.0.0 (2010/09/01) Ver4互換モード対å¿?
058 // private static final String insGE32 = "INSERT INTO GE32(YKNO,PARA_KEY,PTN_ID,FROM_ADDR,TITLE,CONTENTS,ATTACH1,ATTACH2,ATTACH3,ATTACH4,ATTACH5,DYSET,USRSET,PGUPD,SYSTEM_ID,FGJ)"
059 private static final String insGE32 = "INSERT INTO GE32(YKNO,PARA_KEY,PTN_ID,FROM_ADDR,TITLE,"+CONTENTS+",ATTACH1,ATTACH2,ATTACH3,ATTACH4,ATTACH5,DYSET,USRSET,PGUPD,SYSTEM_ID,FGJ)"
060 + " VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,'1')";
061 private static final String insGE34 = "INSERT INTO GE34(YKNO,DST_ID,GROUP_ID,DST_NAME,DST_ADDR,DST_KBN,FGJ,DYSET,USRSET,PGUPD)"
062 + " VALUES(?,?,?,?,?,?,?,?,?,?)";
063 /** フラグ定数 {@value} */
064 protected static final String FGJ_SEND_WAIT = "0";
065 /** フラグ定数 {@value} */
066 protected static final String FGJ_SEND_OVER = "1";
067 /** フラグ定数 {@value} */
068 protected static final String FGJ_ADDR_ERR = "7";
069 /** フラグ定数 {@value} */
070 protected static final String FGJ_ACNT_ERR = "8";
071
072 // å†?ƒ¨ãƒ??タのカラãƒ?•ª号(履歴ãƒ??ブル)
073 private static final int GE32_YKNO = 0 ;
074 private static final int GE32_PARAKEY = 1 ;
075 private static final int GE32_PTN_ID = 2;
076 private static final int GE32_FROM_ADDR = 3;
077 private static final int GE32_TITLE = 4;
078 private static final int GE32_CONTENTS = 5; // 5.0.3.0 (2009/11/04) CONTENT �CONTENTS
079 private static final int GE32_ATTACH1 = 6;
080 private static final int GE32_ATTACH2 = 7;
081 private static final int GE32_ATTACH3 = 8;
082 private static final int GE32_ATTACH4 = 9;
083 private static final int GE32_ATTACH5 = 10;
084 private static final int GE32_DYSET = 11;
085 private static final int GE32_USRSET = 12;
086 private static final int GE32_PGUPD = 13;
087 private static final int GE32_SYSTEM_ID = 14;
088 // å†?ƒ¨ãƒ??タのカラãƒ?•ª号(履歴ãƒ??ブル)
089 private static final int GE34_YKNO = 0 ;
090 private static final int GE34_DST_ID = 1 ;
091 private static final int GE34_GROUP_ID = 2 ;
092 private static final int GE34_DST_NAME = 3 ;
093 private static final int GE34_DST_ADDR = 4 ;
094 private static final int GE34_DST_KBN = 5 ;
095 private static final int GE34_FGJ = 6 ;
096 private static final int GE34_DYSET = 7 ;
097 private static final int GE34_USRSET = 8 ;
098 private static final int GE34_PGUPD = 9 ;
099 // private static String host = HybsSystem.sys( "COMMON_MAIL_SERVER" );
100 private static String charset = HybsSystem.sys( "MAIL_DEFAULT_CHARSET" );
101 // private static String smtpPort = HybsSystem.sys( "SMTP_PORT" ); // 5.4.3.2 (2012/01/06)
102 // private static String auth = HybsSystem.sys( "MAIL_SEND_AUTH" ); // 5.4.3.2 (2012/01/06)
103 // private static String authUser = HybsSystem.sys( "MAIL_SEND_AUTH_USER" ); // 5.4.3.2 (2012/01/06)
104 // private static String authPass = HybsSystem.sys( "MAIL_SEND_AUTH_PASSWORD" ); // 5.4.3.2 (2012/01/06)
105 private boolean debugFlag = false;
106 private final List<String> errAddrList = new ArrayList<String>();
107 private static final int MAX_RETRY = 3 ; // メールアドレスエラー発生したå?合ã?メール再é?回数
108
109 // 5.6.6.0 (2013/07/05) host等ã?外部æŒ?®šに対å¿?
110 private String host = HybsSystem.sys( "COMMON_MAIL_SERVER" ); // 5.6.6.0 (2013/07/05)
111 private String smtpPort = HybsSystem.sys( "SMTP_PORT" ); // 5.6.6.0 (2013/07/05)
112 private String auth = HybsSystem.sys( "MAIL_SEND_AUTH" ); // 5.6.6.0 (2013/07/05)
113 private String authUser = HybsSystem.sys( "MAIL_SEND_AUTH_USER" ); // 5.6.6.0 (2013/07/05)
114 private String authPass = HybsSystem.sys( "MAIL_SEND_AUTH_PASSWORD" ); // 5.6.6.0 (2013/07/05)
115
116 private String mailTitle, mailContent, fromAddr;
117 private String[] attachFiles;
118 private Map<String, String[]> mailDstMap = null;
119 private Map<String,String> initParamMap = null; // パラメータマッãƒ?
120 private MailTX mail = null;
121
122 protected final String DBID = HybsSystem.sys( "RESOURCE_DBID" ); // 5.5.5.1 (2012/08/07) リソース系DBID 付け忘れ対å¿?
123
124 /** コネクションにアプリケーションæƒ??を追記するかどã�?�‹æŒ?®?*/
125 private static final boolean USE_DB_APPLICATION_INFO = HybsSystem.sysBool( "USE_DB_APPLICATION_INFO" ) ;
126
127 /** アプリケーションæƒ?? */
128 public static final ApplicationInfo appInfo;
129 static {
130 if( USE_DB_APPLICATION_INFO ) {
131 appInfo = new ApplicationInfo();
132 // ユーザーID,IPアドレス,ホスト名
133 appInfo.setClientInfo( "MailModuel", HybsSystem.HOST_ADRS, HybsSystem.HOST_NAME );
134 // 画面ID,操ä½?プログラãƒ?D
135 appInfo.setModuleInfo( "MailModuel", "MailManager", "MailManager" );
136 }
137 else {
138 appInfo = null;
139 }
140 }
141
142 /**
143 * 呼出å…?‚ˆりパラメータマップを受取って、メールオブジェクãƒ?mailObj)を作æ?しますã?
144 * メールオブジェクトã?定型文ID及ã?シスãƒ?ƒ IDに基づã�?�¦定型æ–??スタからメールの定型æ–?‚’取得してã€?
145 * パラメータ値とマã?ジしてメールæ–??å�??目を合成しますã?
146 * 宛å?につã�?�¦は、宛å?にセãƒ?ƒˆした社員ID、グループIDと定型æ–??宛å?設定に基づきã?社員マスタとグループã?スタ
147 * よりメールアドレスを取得して宛å?マップを作æ?しますã?
148 * まã�??添付ファイルのセãƒ?ƒˆ処ç�?‚‚行ってã�?�¾すã?
149 *
150 * @og.rev 5.6.6.0 (2013/07/05) host等ã?外部設定対å¿?
151 *
152 * @param params パラメータのマッãƒ?
153 */
154 public void create( final Map<String, String> params ) {
155 initParamMap = params;
156 MailPattern mailObj = new MailPattern( params );
157 fromAddr = mailObj.getFromAddr();
158 setAttachFiles( params.get( "ATTACH1" )
159 , params.get( "ATTACH2" )
160 , params.get( "ATTACH3" )
161 , params.get( "ATTACH4" )
162 , params.get( "ATTACH5" ) ); // 添付ファイルのセãƒ?ƒˆ
163 mailDstMap = mailObj.getDstMap();
164 mailTitle = mailObj.getTitle();
165 mailContent = mailObj.getContent();
166 errAddrList.addAll( mailObj.getErrList() );
167
168 // 5.6.6.0 (2013/07/05)
169 host = nval( mailObj.getHost() ,host );
170 smtpPort = nval( mailObj.getSmtpPort() ,smtpPort );
171 auth = nval( mailObj.getAuth() ,auth );
172 authUser = nval( mailObj.getAuthUser() ,authUser );
173 authPass = nval( mailObj.getAuthPass() ,authPass );
174 }
175
176 /**
177 * メール送信を行うメソãƒ?ƒ‰ですã?
178 * createメソãƒ?ƒ‰より合æ?したå†?®¹で送信を行いますã?アドレスエラー発生時にã€?
179 * ユーザー設å®?addrCheck)により再é?/中止しますã?
180 * メールサーバã?に送信して、例å¤?SendFailedException"をキャãƒ?ƒ�できたらã?
181 * メールアカウントがエラーとなるã?をå?かりますã?そして、例外ã?オブジェクトかã‚?
182 * エラーとなってã�?‚‹アカウントを取得して宛å?マップから除外して、残りのアドレスに再é?できますã?
183 * 送信後履歴ãƒ??ブル(GE32)、宛å?ãƒ??ブル(GE34)に送信結果を書き込みますã?
184 *
185 * og.rev 5.4.3.2 (2012/01/06) 送信時認証対å¿?
186 *
187 */
188 public void send() {
189 List<String> invalidAddrBuf = new ArrayList<String>();
190 // mail = new MailTX( host, charset );
191 mail = new MailTX( host, charset, smtpPort, auth, authUser, authPass ); // 5.4.3.2 認証対å¿?
192 mail.setFrom( fromAddr ); // 送信è€?‚¢ドレス
193 mail.setFilename( attachFiles ); // 添付ファイルをセãƒ?ƒˆしますã?
194 mail.setSubject( mailTitle ); // メールタイトル
195 mail.setMessage( mailContent ); // メール本æ–?
196 mail.setDebug( debugFlag );
197 setMailDst( invalidAddrBuf ); // 宛å?をセãƒ?ƒˆしますã?
198 // メール送信を行いますã?
199 int retryCount = MAX_RETRY;
200 while( retryCount > 0 ) {
201 try {
202 mail.sendmail();
203 }
204 catch( RuntimeException rex ) {
205 Throwable cause = rex.getCause();
206 if( cause instanceof SendFailedException ) {
207 Address[] invAddress = ( (SendFailedException) cause ).getInvalidAddresses();
208 if( invAddress != null ) {
209 int invCount = invAddress.length;
210 for( int i = 0; i < invCount; i++ ) {
211 invalidAddrBuf.add( ( (InternetAddress) invAddress[i] ).getAddress() );
212 }
213 }
214 }
215 else {
216 String errMsg = "送信時にエラー発生しましたã€? + rex.getMessage();
217 throw new RuntimeException( errMsg,rex );
218 }
219 }
220
221 // if( invalidAddrBuf.size() > 0 ) {
222 // StringBuilder errMsgBuf = new StringBuilder();
223 // for( int i = 0; i < invalidAddrBuf.size(); i++ ) {
224 // errMsgBuf.append( "," ).append( invalidAddrBuf.get( i ) );
225 // }
226 // String userIds = getUserIds( invalidAddrBuf );
227 // String errMsg = "アドレスエラー。ユーザーID?? + userIds + " アドレス?? + errMsgBuf.toString().substring( 1 );
228 // if( "true".equals( initParamMap.get( "ADDR_CHECK" ) ) ){
229 // throw new RuntimeException( errMsg );
230 // }
231 // else {
232 // // メールアカウントチェãƒ?‚¯しなã�??合ã?無効のメールアドレスを除ã�?�¦再é?しますã?
233 // setMailDst( invalidAddrBuf );
234 // retryCount--;
235 // invalidAddrBuf.clear();
236 // errAddrList.add( errMsg );
237 // }
238 // }
239 // else {
240 // retryCount = -1;
241 // }
242
243 if( invalidAddrBuf.isEmpty() ) {
244 retryCount = -1;
245 }
246 else {
247 StringBuilder errMsgBuf = new StringBuilder();
248 for( int i = 0; i < invalidAddrBuf.size(); i++ ) {
249 errMsgBuf.append( ',' ).append( invalidAddrBuf.get( i ) );
250 }
251 String userIds = getUserIds( invalidAddrBuf );
252 String errMsg = "アドレスエラー。ユーザーID?? + userIds + " アドレス?? + errMsgBuf.toString().substring( 1 );
253 if( "true".equals( initParamMap.get( "ADDR_CHECK" ) ) ){
254 throw new RuntimeException( errMsg );
255 }
256 else {
257 // メールアカウントチェãƒ?‚¯しなã�??合ã?無効のメールアドレスを除ã�?�¦再é?しますã?
258 setMailDst( invalidAddrBuf );
259 retryCount--;
260 invalidAddrBuf.clear();
261 errAddrList.add( errMsg );
262 }
263 }
264 }
265 commitMailDB(); // 送信結果を履歴ãƒ??ブル、宛å?ãƒ??ブルにセãƒ?ƒˆしますã?
266 }
267
268 /**
269 * ãƒ?ƒ�ãƒ?‚°æƒ??の表示を行うかどã�?�‹[true/false]をセãƒ?ƒˆしますã?
270 *
271 * @param debug [true:出力すã‚?それ以å¤?しない]
272 */
273 public void setDebug( final boolean debug ) {
274 debugFlag = debug;
275 }
276
277 /**
278 * メール送信è€?‚¢ドレスをセãƒ?ƒˆしますã?
279 *
280 * @param from 送信è€?‚¢ドレス
281 */
282 public void setFromAddr( final String from ) {
283 fromAddr = from;
284 }
285
286 /**
287 * メールタイトルをセãƒ?ƒˆしますã?
288 *
289 * @param title メールタイトル
290 */
291 public void setTitle( final String title ) {
292 mailTitle = title;
293 }
294
295 /**
296 * メール本æ–?‚’セãƒ?ƒˆしますã?
297 *
298 * @param content メール本æ–?
299 */
300 public void setContent( final String content ) {
301 mailContent = content;
302 }
303
304 /**
305 * メール送信ホストをセãƒ?ƒˆしますã?
306 * 初期値は、シスãƒ?ƒ 定数のCOMMON_MAIL_SERVER を使用しますã?
307 *
308 * (初期値:シスãƒ?ƒ 定数のCOMMON_MAIL_SERVER[={@og.value org.opengion.hayabusa.common.SystemData#COMMON_MAIL_SERVER}])ã€?
309 *
310 * @og.rev 5.6.6.0 (2013/07/05)
311 *
312 * @param hostName 送信ホスãƒ?
313 */
314 public void setHost( final String hostName ) {
315 host = nval( hostName, host );
316 }
317
318 /**
319 * メール送信ポã?ト番号をセãƒ?ƒˆしますã?
320 * 初期値は、シスãƒ?ƒ 定数のSMTP_PORT を使用しますã?
321 *
322 * (初期値:シスãƒ?ƒ 定数のSMTP_PORT[={@og.value org.opengion.hayabusa.common.SystemData#SMTP_PORT}])ã€?
323 *
324 * @og.rev 5.6.6.0 (2013/07/05)
325 *
326 * @param port SMTPポã?ãƒ?
327 */
328 public void setPort( final String port ) {
329 smtpPort = nval( port, smtpPort );
330 }
331
332 /**
333 * メール送信時認証有無をセãƒ?ƒˆしますã?
334 * 認証を行う場合ã?「POP_BEFORE_SMTP」とæŒ?®šして下さã�??
335 * 認証時には認証ユーザと認証パスワードを設定するå¿?¦�がありますã?
336 * 初期値は、シスãƒ?ƒ 定数のMAIL_SEND_AUTH を使用しますã?
337 *
338 * (初期値:シスãƒ?ƒ 定数のMAIL_SEND_AUTH[={@og.value org.opengion.hayabusa.common.SystemData#MAIL_SEND_AUTH}])ã€?
339 *
340 * @og.rev 5.6.6.0 (2013/07/05)
341 *
342 * @param useAuth 認証方å¼?
343 */
344 public void setAuth( final String useAuth ) {
345 auth = nval( useAuth, auth );
346 }
347
348 /**
349 * メール送信認証ユーザをセãƒ?ƒˆしますã?
350 * 初期値は、シスãƒ?ƒ 定数のMAIL_SEND_AUTH_USER を使用しますã?
351 *
352 * (初期値:シスãƒ?ƒ 定数のMAIL_SEND_AUTH_USER[={@og.value org.opengion.hayabusa.common.SystemData#MAIL_SEND_AUTH_USER}])ã€?
353 *
354 * @og.rev 5.6.6.0 (2013/07/05)
355 *
356 * @param user 認証ユーザ
357 */
358 public void setAuthUser( final String user ) {
359 authUser = nval( user, authUser );
360 }
361
362 /**
363 * メール送信認証パスワードをセãƒ?ƒˆしますã?
364 * 初期値は、シスãƒ?ƒ 定数のMAIL_SEND_AUTH_PASSWORD を使用しますã?
365 *
366 * (初期値:シスãƒ?ƒ 定数のMAIL_SEND_AUTH_PASSWORD[={@og.value org.opengion.hayabusa.common.SystemData#MAIL_SEND_AUTH_PASSWORD}])ã€?
367 *
368 * @og.rev 5.6.6.0 (2013/07/05)
369 *
370 * @param pass 認証パスワーãƒ?
371 */
372 public void setAuthPass( final String pass ) {
373 authPass = nval( pass, authPass );
374 }
375
376 /**
377 * メール送信è€?‚¢ドレスを返しますã?
378 *
379 * @return 送信è€?‚¢ドレス
380 */
381 public String getFromAddr() {
382 return fromAddr;
383 }
384
385 /**
386 * メールタイトルを返しますã?
387 *
388 * @return メールタイトル
389 */
390 public String getTitle() {
391 return mailTitle;
392 }
393
394 /**
395 * メール本æ–?‚’返しますã?
396 *
397 * @return メール本æ–?
398 */
399 public String getContent() {
400 return mailContent;
401 }
402
403 /**
404 * 送信結果を履歴ãƒ??ブル(GE32)と宛å?ãƒ??ブル(GE34)に登録しますã?
405 * 登録時に、桁数オーバã?にならなã�?‚ˆã�?�«、テーブル定義の桁数を上限としてã€?
406 * 登録前にå�??目の桁数整ç�?‚’行いますã?
407 *
408 * @og.rev 5.5.5.1 (2012/08/07) リソース系DBID 付け忘れ対ç?
409 */
410 protected void commitMailDB(){
411 // 履歴ãƒ??ブルの追åŠ?
412 String[] insGE32Args = new String[15];
413 String ykno = getYkno();
414 insGE32Args[GE32_YKNO] = ykno;
415 insGE32Args[GE32_PARAKEY] = initParamMap.get( "PARAKEY" );
416 insGE32Args[GE32_PTN_ID] = trim( initParamMap.get( "PTN_ID" ), 20 );
417 insGE32Args[GE32_FROM_ADDR] = trim( fromAddr, 100);
418 insGE32Args[GE32_TITLE] = trim( mailTitle, 300);
419 insGE32Args[GE32_CONTENTS] = trim( mailContent,4000); // 5.0.3.0 (2009/11/04) CONTENT �CONTENTS
420 insGE32Args[GE32_ATTACH1] = "";
421 insGE32Args[GE32_ATTACH2] = "";
422 insGE32Args[GE32_ATTACH3] = "";
423 insGE32Args[GE32_ATTACH4] = "";
424 insGE32Args[GE32_ATTACH5] = "";
425 if ( attachFiles != null ) {
426 int attSize = attachFiles.length;
427 for( int i = 0; i < attSize; i++ ) {
428 insGE32Args[6 + i] = trim( attachFiles[i], 256);
429 }
430 }
431 insGE32Args[GE32_DYSET] = HybsSystem.getDate( "yyyyMMddHHmmss" );
432 insGE32Args[GE32_USRSET] = initParamMap.get( "LOGIN_USERID" );
433 insGE32Args[GE32_PGUPD] = initParamMap.get( "PGID" );
434 insGE32Args[GE32_SYSTEM_ID] = initParamMap.get( "SYSTEM_ID" );
435 // DBUtil.dbExecute( insGE32, insGE32Args, appInfo );
436 DBUtil.dbExecute( insGE32, insGE32Args, appInfo, DBID ); // 5.5.5.1 (2012/08/07)
437
438 // 宛å?ãƒ??ブル追åŠ?
439 String[] insGE34Args = new String[10];
440 insGE34Args[GE34_YKNO]= ykno;
441 for( String dstId : mailDstMap.keySet() ) {
442 insGE34Args[GE34_DST_ID] = trim( mailDstMap.get( dstId )[MailPattern.IDX_DST_ID] , 10 );
443 insGE34Args[GE34_GROUP_ID] = trim( mailDstMap.get( dstId )[MailPattern.IDX_GROUP_ID], 20 );
444 insGE34Args[GE34_DST_NAME] = trim( mailDstMap.get( dstId )[MailPattern.IDX_DST_NAME], 20 );
445 insGE34Args[GE34_DST_ADDR] = trim( mailDstMap.get( dstId )[MailPattern.IDX_DST_ADDR], 100 );
446 insGE34Args[GE34_DST_KBN] = mailDstMap.get( dstId )[MailPattern.IDX_DST_KBN];
447 insGE34Args[GE34_FGJ] = mailDstMap.get( dstId )[MailPattern.IDX_FGJ];
448 insGE34Args[GE34_DYSET] = HybsSystem.getDate( "yyyyMMddHHmmss" );
449 insGE34Args[GE34_USRSET] = initParamMap.get( "LOGIN_USERID" );
450 insGE34Args[GE34_PGUPD] = initParamMap.get( "PGID" );
451 // DBUtil.dbExecute( insGE34, insGE34Args, appInfo );
452 DBUtil.dbExecute( insGE34, insGE34Args, appInfo, DBID ); // 5.5.5.1 (2012/08/07)
453 }
454 }
455
456 /**
457 * パラメータマップをセãƒ?ƒˆしますã?
458 *
459 * @param params パラメータのマッãƒ?
460 */
461 protected void setInitParams( final Map<String, String> params ) {
462 initParamMap = params;
463 }
464
465 /**
466 * 添付ファイル配å?をセãƒ?ƒˆしますã?
467 *
468 * @param attach1 添付ファイルå�?
469 * @param attach2 添付ファイルå�?
470 * @param attach3 添付ファイルå�?
471 * @param attach4 添付ファイルå�?
472 * @param attach5 添付ファイルå�?
473 */
474 protected void setAttachFiles( final String attach1
475 , final String attach2
476 , final String attach3
477 , final String attach4
478 , final String attach5 ) {
479 List<String> fileList = new ArrayList<String>();
480 if( attach1 != null && attach1.length() != 0 ) { fileList.add( attach1 ); }
481 if( attach2 != null && attach2.length() != 0 ) { fileList.add( attach2 ); }
482 if( attach3 != null && attach3.length() != 0 ) { fileList.add( attach3 ); }
483 if( attach4 != null && attach4.length() != 0 ) { fileList.add( attach4 ); }
484 if( attach5 != null && attach5.length() != 0 ) { fileList.add( attach5 ); }
485 attachFiles = fileList.toArray( new String[fileList.size()] );
486 }
487
488 /**
489 * メール宛å?マップをセãƒ?ƒˆしますã?
490 *
491 * @param mailDst メール宛å?マッãƒ?
492 */
493 protected void setMailDstMap( final Map<String, String[]> mailDst ) {
494 mailDstMap = mailDst;
495 }
496
497 /**
498 * メール宛å?マップをセãƒ?ƒˆしますã?
499 *
500 * @return メール宛å?マッãƒ?
501 */
502 protected Map<String, String[]> getMailDstMap() {
503 return mailDstMap;
504 }
505
506 /**
507 * æŒ?®šã?長さ以å†??æ–?—å?を返しますã?
508 *
509 * @param src オリジナルのæ–?—å?
510 * @param maxLen æŒ?®šã?長ã�?
511 *
512 * @return æŒ?®šã?長さに短縮された文字å?
513 */
514 protected String trim( final String src, final int maxLen ) {
515 String rtn = src;
516 if( src != null && src.length() > maxLen ) {
517 rtn = src.substring( 0, maxLen );
518 }
519 return rtn;
520 }
521
522 /**
523 * アドレスチェãƒ?‚¯のエラーリストを返しますã?
524 *
525 * @return エラーリスãƒ?
526 */
527 protected List<String> getErrList(){
528 return errAddrList;
529 }
530
531 /**
532 * 宛å?マップをå…?�«ã€??信オブジェクトに宛å?をセãƒ?ƒˆしますã?
533 * セãƒ?ƒˆする際に、アカウントエラーとなってã�?‚‹アドレスを除外しますã?
534 * 宛å?が存在しなã�??合ã?例外を投げますã?
535 *
536 * @og.rev 4.3.7.5 (2009/07/08) 送信先名称が設定されてã�?�ªã�??合ã?、アドレスã‚?>で囲わなã�?
537 *
538 * @param invalidAddr 宛å?のリスãƒ?
539 */
540 private void setMailDst( final List<String> invalidAddr ){
541 ArrayList<String> toList = new ArrayList<String>();
542 ArrayList<String> ccList = new ArrayList<String>();
543 ArrayList<String> bccList = new ArrayList<String>();
544
545 Map<Integer, ArrayList<String>> tempMap = new HashMap<Integer, ArrayList<String>>();
546 tempMap.put( Integer.valueOf( MailPattern.KBN_TO ), toList );
547 tempMap.put( Integer.valueOf( MailPattern.KBN_CC ), ccList );
548 tempMap.put( Integer.valueOf( MailPattern.KBN_BCC ), bccList );
549
550 for( String dstId : mailDstMap.keySet() ) {
551 String[] dstInfo = mailDstMap.get( dstId );
552 Integer kbn = Integer.valueOf( dstInfo[MailPattern.IDX_DST_KBN] );
553 if( !invalidAddr.contains( dstInfo[MailPattern.IDX_DST_ADDR] )
554 && !FGJ_ADDR_ERR.equals( dstInfo[MailPattern.IDX_FGJ] )){
555 dstInfo[MailPattern.IDX_FGJ] = FGJ_SEND_OVER;
556
557 // 4.3.7.5 (2009/07/08)
558 String name = dstInfo[MailPattern.IDX_DST_NAME];
559 if( name != null && name.length() > 0 ) {
560 tempMap.get( kbn ).add( dstInfo[MailPattern.IDX_DST_NAME] + "<"+ dstInfo[MailPattern.IDX_DST_ADDR] + ">" );
561 }
562 else {
563 tempMap.get( kbn ).add( dstInfo[MailPattern.IDX_DST_ADDR] );
564 }
565 }
566 else {
567 if( FGJ_SEND_OVER.equals( dstInfo[MailPattern.IDX_FGJ] ) ) {
568 dstInfo[MailPattern.IDX_FGJ] = FGJ_ACNT_ERR;
569 }
570 }
571 }
572
573 mail.clearTo(); // 宛å?(TO)をクリア
574 mail.clearCc(); // 宛å?(CC)をクリア
575 mail.clearBcc(); // 宛å?(BCC)をクリア
576 boolean haveValidAddr = false ;
577 // if( toList.size() > 0 ) { // toのセãƒ?ƒˆ
578 if( ! toList.isEmpty() ) { // toのセãƒ?ƒˆ
579 haveValidAddr = true;
580 String[] to = toList.toArray( new String[toList.size()] );
581 mail.setTo( to );
582 }
583 // if( ccList.size() > 0 ) { // ??½??セãƒ?ƒˆ
584 if( ! ccList.isEmpty() ) { // ??½??セãƒ?ƒˆ
585 haveValidAddr = true;
586 String[] cc = ccList.toArray( new String[ccList.size()] );
587 mail.setCc( cc );
588 }
589 // if( bccList.size() > 0 ) { // bccのセãƒ?ƒˆ
590 if( ! bccList.isEmpty() ) { // bccのセãƒ?ƒˆ
591 haveValidAddr = true;
592 String[] bcc = bccList.toArray( new String[bccList.size()] );
593 mail.setBcc( bcc );
594 }
595 if( !haveValidAddr ){ // 宛å?全部無効の場合ã?例外を投げますã?
596 String errMsg = "宛å?のメールアドレスが有効ではありませんã€?
597 + "TO , CC , BCC のã�?�¥れにもアドレスが設定されてã�?�¾せんã€?; // 5.1.8.0 (2010/07/01) errMsg 修正
598 throw new RuntimeException( errMsg );
599 }
600 }
601
602 /**
603 * 要æ±?Oを採番しますã?
604 * こã?要æ±?Oで履歴ãƒ??ブル(GE32)と宛å?ãƒ??ブル(GE30)の関連付けを持たせますã?
605 *
606 * @og.rev 5.5.5.1 (2012/08/07) リソース系DBID 付け忘れ対ç?
607 *
608 * @return 要æ±?O
609 */
610 private String getYkno() {
611 // String[][] tmp = DBUtil.dbExecute( selYkno, new String[0], appInfo );
612 String[][] tmp = DBUtil.dbExecute( selYkno, new String[0], appInfo, DBID ); // 5.5.5.1 (2012/08/07)
613 if( tmp == null || tmp.length == 0 ) {
614 String errMsg = "要æ±?O採番エラー"
615 + " SQL=" + selYkno ; // 5.1.8.0 (2010/07/01) errMsg 修正
616 throw new RuntimeException( errMsg );
617 }
618 return tmp[0][0];
619 }
620
621 /**
622 * メールアドレスのリストよりユーザーIDをé?引きしますã?
623 *
624 * @param addressList メールアドレスのリスãƒ?
625 *
626 * @return ユーザーID
627 */
628 private String getUserIds( final List<String> addressList ){
629 StringBuilder idBuf = new StringBuilder();
630 Map<String,String> addressMap = new HashMap<String, String>();
631 for( String userId : mailDstMap.keySet() ) {
632 String[] dstInfo = mailDstMap.get( userId );
633 addressMap.put( dstInfo[MailPattern.IDX_DST_ADDR], userId );
634 }
635 for(int i=0; i < addressList.size(); i++){
636 idBuf.append( ',' ).append( addressMap.get( addressList.get( i ) ) );
637 }
638 String rtn = "";
639 if ( idBuf.length() > 0 ) {
640 rtn = idBuf.toString().substring( 1 );
641 }
642 return rtn;
643 }
644 }