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          authPort        = HybsSystem.sys( "MAIL_SEND_AUTH_PORT" );              // 5.8.1.1 (2014/11/14)
114            private String          authUser        = HybsSystem.sys( "MAIL_SEND_AUTH_USER" );              // 5.6.6.0 (2013/07/05)
115            private String          authPass        = HybsSystem.sys( "MAIL_SEND_AUTH_PASSWORD" );  // 5.6.6.0 (2013/07/05)
116    
117            private String  mailTitle, mailContent, fromAddr;
118            private String[] attachFiles;
119            private Map<String, String[]>     mailDstMap              = null;
120            private Map<String,String>                initParamMap    = null;         // パラメータマッ�
121            private MailTX                                  mail                    = null;
122    
123            protected final String DBID = HybsSystem.sys( "RESOURCE_DBID" );                // 5.5.5.1 (2012/08/07) リソース系DBID 付ã‘忘れ対å¿?
124    
125            /** コãƒã‚¯ã‚·ãƒ§ãƒ³ã«ã‚¢ãƒ—リケーションæƒ??を追記ã™ã‚‹ã‹ã©ã?‹æŒ?®?*/
126            private static final boolean USE_DB_APPLICATION_INFO  = HybsSystem.sysBool( "USE_DB_APPLICATION_INFO" ) ;
127    
128            /** アプリケーション�? */
129            public static final ApplicationInfo appInfo;
130            static {
131                    if( USE_DB_APPLICATION_INFO ) {
132                            appInfo = new ApplicationInfo();
133                            // ユーザーID,IPアドレス,ホストå
134                            appInfo.setClientInfo( "MailModuel", HybsSystem.HOST_ADRS, HybsSystem.HOST_NAME );
135                            // ç”»é¢ID,æ“ä½?プログラãƒ?D
136                            appInfo.setModuleInfo( "MailModuel", "MailManager", "MailManager" );
137                    }
138                    else {
139                            appInfo = null;
140                    }
141            }
142    
143            /**
144             * 呼出å…?‚ˆã‚Šãƒ‘ラメータマップをå—å–ã£ã¦ã€ãƒ¡ãƒ¼ãƒ«ã‚ªãƒ–ジェクãƒ?mailObj)を作æ?ã—ã¾ã™ã?
145             * メールオブジェクトã?定型文IDåŠã?シスãƒ?ƒ IDã«åŸºã¥ã?¦å®šåž‹æ–??スタã‹ã‚‰ãƒ¡ãƒ¼ãƒ«ã®å®šåž‹æ–?‚’å–å¾—ã—ã¦ã€?
146             * パラメータ値ã¨ãƒžã?ジã—ã¦ãƒ¡ãƒ¼ãƒ«æ–??å??ç›®ã‚’åˆæˆã—ã¾ã™ã?
147             * å®›å?ã«ã¤ã?¦ã¯ã€å®›å?ã«ã‚»ãƒ?ƒˆã—ãŸç¤¾å“¡IDã€ã‚°ãƒ«ãƒ¼ãƒ—IDã¨å®šåž‹æ–??å®›å?設定ã«åŸºã¥ãã?社員マスタã¨ã‚°ãƒ«ãƒ¼ãƒ—ã?スタ
148             * よりメールアドレスをå–å¾—ã—ã¦å®›å?マップを作æ?ã—ã¾ã™ã?
149             * ã¾ã??添付ファイルã®ã‚»ãƒ?ƒˆå‡¦ç?‚‚行ã£ã¦ã?¾ã™ã?
150             * 
151             * @og.rev 5.6.6.0 (2013/07/05) hostç­‰ã?外部設定対å¿?
152             *
153             * @param       params  パラメータã®ãƒžãƒƒãƒ?
154             */
155            public void create( final Map<String, String> params ) {
156                    initParamMap = params;
157                    MailPattern mailObj = new MailPattern( params );
158                    fromAddr = mailObj.getFromAddr();
159                    setAttachFiles( params.get( "ATTACH1" )
160                                              , params.get( "ATTACH2" )
161                                              , params.get( "ATTACH3" )
162                                              , params.get( "ATTACH4" )
163                                              , params.get( "ATTACH5" ) ); // 添付ファイルã®ã‚»ãƒ?ƒˆ
164                    mailDstMap = mailObj.getDstMap();
165                    mailTitle = mailObj.getTitle();
166                    mailContent = mailObj.getContent();
167                    errAddrList.addAll( mailObj.getErrList() );
168                    
169                    // 5.6.6.0 (2013/07/05)
170                    host            = nval( mailObj.getHost()               ,host           );
171                    smtpPort        = nval( mailObj.getSmtpPort()   ,smtpPort       );
172                    auth            = nval( mailObj.getAuth()               ,auth           );
173                    authPort        = nval( mailObj.getAuthPort()   ,authPort       );              // 5.8.1.1 (2014/11/14)
174                    authUser        = nval( mailObj.getAuthUser()   ,authUser       );
175                    authPass        = nval( mailObj.getAuthPass()   ,authPass       );
176            }
177    
178            /**
179             * メールé€ä¿¡ã‚’行ã†ãƒ¡ã‚½ãƒ?ƒ‰ã§ã™ã?
180             * createメソãƒ?ƒ‰ã‚ˆã‚Šåˆæ?ã—ãŸå†?®¹ã§é€ä¿¡ã‚’行ã„ã¾ã™ã?アドレスエラー発生時ã«ã€?
181             * ユーザー設å®?addrCheck)ã«ã‚ˆã‚Šå†é?/中止ã—ã¾ã™ã?
182             * メールサーãƒã?ã«é€ä¿¡ã—ã¦ã€ä¾‹å¤?SendFailedException"をキャãƒ?ƒã§ããŸã‚‰ã?
183             * メールアカウントãŒã‚¨ãƒ©ãƒ¼ã¨ãªã‚‹ã?ã‚’å?ã‹ã‚Šã¾ã™ã?ãã—ã¦ã€ä¾‹å¤–ã?オブジェクトã‹ã‚?
184             * エラーã¨ãªã£ã¦ã?‚‹ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã‚’å–å¾—ã—ã¦å®›å?マップã‹ã‚‰é™¤å¤–ã—ã¦ã€æ®‹ã‚Šã®ã‚¢ãƒ‰ãƒ¬ã‚¹ã«å†é?ã§ãã¾ã™ã?
185             * é€ä¿¡å¾Œå±¥æ­´ãƒ??ブル(GE32)ã€å®›å?ãƒ??ブル(GE34)ã«é€ä¿¡çµæžœã‚’書ãè¾¼ã¿ã¾ã™ã?
186             *
187             * og.rev 5.4.3.2 (2012/01/06) é€ä¿¡æ™‚èªè¨¼å¯¾å¿?
188             *
189             */
190            public void send() {
191                    List<String> invalidAddrBuf       = new ArrayList<String>();
192                    // mail = new MailTX( host, charset );
193                    mail = new MailTX( host, charset, smtpPort, auth, authPort,authUser, authPass ); // 5.4.3.2 èªè¨¼å¯¾å¿?
194                    mail.setFrom( fromAddr );                       // é€ä¿¡è€?‚¢ãƒ‰ãƒ¬ã‚¹
195                    mail.setFilename( attachFiles );        // 添付ファイルをセãƒ?ƒˆã—ã¾ã™ã?
196                    mail.setSubject( mailTitle );           // メールタイトル
197                    mail.setMessage( mailContent );         // メール本�
198                    mail.setDebug( debugFlag );
199                    setMailDst( invalidAddrBuf );           // å®›å?ã‚’ã‚»ãƒ?ƒˆã—ã¾ã™ã?
200                    // メールé€ä¿¡ã‚’行ã„ã¾ã™ã?
201                    int retryCount = MAX_RETRY;
202                    while( retryCount > 0 ) {
203                            try {
204                                    mail.sendmail();
205                            }
206                            catch( RuntimeException rex ) {
207                                    Throwable cause = rex.getCause();
208                                    if( cause instanceof SendFailedException ) {
209                                            Address[] invAddress = ( (SendFailedException) cause ).getInvalidAddresses();
210                                            if( invAddress != null ) {
211                                                    int invCount = invAddress.length;
212                                                    for( int i = 0; i < invCount; i++ ) {
213                                                            invalidAddrBuf.add( ( (InternetAddress) invAddress[i] ).getAddress() );
214                                                    }
215                                            }
216                                    }
217                                    else {
218                                            String errMsg = "é€ä¿¡æ™‚ã«ã‚¨ãƒ©ãƒ¼ç™ºç”Ÿã—ã¾ã—ãŸã€? + rex.getMessage();
219                                            throw new RuntimeException( errMsg,rex );
220                                    }
221                            }
222    
223    //                      if( invalidAddrBuf.size() > 0 ) {
224    //                              StringBuilder errMsgBuf = new StringBuilder();
225    //                              for( int i = 0; i < invalidAddrBuf.size(); i++ ) {
226    //                                      errMsgBuf.append( "," ).append( invalidAddrBuf.get( i ) );
227    //                              }
228    //                              String userIds = getUserIds( invalidAddrBuf );
229    //                              String errMsg = "アドレスエラー。ユーザーID?? + userIds + " アドレス?? + errMsgBuf.toString().substring( 1 );
230    //                              if( "true".equals( initParamMap.get( "ADDR_CHECK" ) ) ){
231    //                                      throw new RuntimeException( errMsg );
232    //                              }
233    //                              else {
234    //                                      // メールアカウントãƒã‚§ãƒ?‚¯ã—ãªã??åˆã?無効ã®ãƒ¡ãƒ¼ãƒ«ã‚¢ãƒ‰ãƒ¬ã‚¹ã‚’除ã?¦å†é?ã—ã¾ã™ã?
235    //                                      setMailDst( invalidAddrBuf );
236    //                                      retryCount--;
237    //                                      invalidAddrBuf.clear();
238    //                                      errAddrList.add( errMsg );
239    //                              }
240    //                      }
241    //                      else {
242    //                              retryCount = -1;
243    //                      }
244    
245                            if( invalidAddrBuf.isEmpty() ) {
246                                    retryCount = -1;
247                            }
248                            else {
249                                    StringBuilder errMsgBuf = new StringBuilder();
250                                    for( int i = 0; i < invalidAddrBuf.size(); i++ ) {
251                                            errMsgBuf.append( ',' ).append( invalidAddrBuf.get( i ) );
252                                    }
253                                    String userIds = getUserIds( invalidAddrBuf );
254                                    String errMsg = "アドレスエラー。ユーザーID?? + userIds + " アドレス?? + errMsgBuf.toString().substring( 1 );
255                                    if( "true".equals( initParamMap.get( "ADDR_CHECK" ) ) ){
256                                            throw new RuntimeException( errMsg );
257                                    }
258                                    else {
259                                            // メールアカウントãƒã‚§ãƒ?‚¯ã—ãªã??åˆã?無効ã®ãƒ¡ãƒ¼ãƒ«ã‚¢ãƒ‰ãƒ¬ã‚¹ã‚’除ã?¦å†é?ã—ã¾ã™ã?
260                                            setMailDst( invalidAddrBuf );
261                                            retryCount--;
262                                            invalidAddrBuf.clear();
263                                            errAddrList.add( errMsg );
264                                    }
265                            }
266                    }
267                    commitMailDB();         // é€ä¿¡çµæžœã‚’履歴ãƒ??ブルã€å®›å?ãƒ??ブルã«ã‚»ãƒ?ƒˆã—ã¾ã™ã?
268            }
269    
270            /**
271             * ãƒ?ƒãƒ?‚°æƒ??ã®è¡¨ç¤ºã‚’行ã†ã‹ã©ã?‹[true/false]ã‚’ã‚»ãƒ?ƒˆã—ã¾ã™ã?
272             *
273             * @param   debug  [true:出力ã™ã‚?ãれ以å¤?ã—ãªã„]
274             */
275            public void setDebug( final boolean debug ) {
276                    debugFlag = debug;
277            }
278    
279            /**
280             * メールé€ä¿¡è€?‚¢ãƒ‰ãƒ¬ã‚¹ã‚’ã‚»ãƒ?ƒˆã—ã¾ã™ã?
281             *
282             * @param  from é€ä¿¡è€?‚¢ãƒ‰ãƒ¬ã‚¹
283             */
284            public void setFromAddr( final String from ) {
285                    fromAddr = from;
286            }
287    
288            /**
289             * メールタイトルをセãƒ?ƒˆã—ã¾ã™ã?
290             *
291             * @param  title メールタイトル
292             */
293            public void setTitle( final String title ) {
294                    mailTitle = title;
295            }
296    
297            /**
298             * メール本æ–?‚’ã‚»ãƒ?ƒˆã—ã¾ã™ã?
299             *
300             * @param  content メール本�
301             */
302            public void setContent( final String content ) {
303                    mailContent = content;
304            }
305    
306            /**
307             * メールé€ä¿¡ãƒ›ã‚¹ãƒˆã‚’ã‚»ãƒ?ƒˆã—ã¾ã™ã?
308             * åˆæœŸå€¤ã¯ã€ã‚·ã‚¹ãƒ?ƒ å®šæ•°ã®COMMON_MAIL_SERVER を使用ã—ã¾ã™ã?
309             *
310             * (åˆæœŸå€¤:シスãƒ?ƒ å®šæ•°ã®COMMON_MAIL_SERVER[={@og.value org.opengion.hayabusa.common.SystemData#COMMON_MAIL_SERVER}])ã€?
311             * 
312             * @og.rev 5.6.6.0 (2013/07/05)
313             *
314             * @param  hostName é€ä¿¡ãƒ›ã‚¹ãƒ?
315             */
316            public void setHost( final String hostName ) {
317                    host = nval( hostName, host );
318            }
319    
320            /**
321             * メールé€ä¿¡ãƒã?ト番å·ã‚’ã‚»ãƒ?ƒˆã—ã¾ã™ã?
322             * åˆæœŸå€¤ã¯ã€ã‚·ã‚¹ãƒ?ƒ å®šæ•°ã®SMTP_PORT を使用ã—ã¾ã™ã?
323             *
324             * (åˆæœŸå€¤:シスãƒ?ƒ å®šæ•°ã®SMTP_PORT[={@og.value org.opengion.hayabusa.common.SystemData#SMTP_PORT}])ã€?
325             * 
326             * @og.rev 5.6.6.0 (2013/07/05)
327             * 
328             * @param  port SMTPãƒã?ãƒ?
329             */
330            public void setPort( final String port ) {
331                    smtpPort = nval( port, smtpPort );
332            }
333    
334            /**
335             * メールé€ä¿¡æ™‚èªè¨¼æœ‰ç„¡ã‚’ã‚»ãƒ?ƒˆã—ã¾ã™ã?
336             * èªè¨¼ã‚’行ã†å ´åˆã?「POP_BEFORE_SMTPã€ã¨æŒ?®šã—ã¦ä¸‹ã•ã??
337             * èªè¨¼æ™‚ã«ã¯èªè¨¼ãƒ¦ãƒ¼ã‚¶ã¨èªè¨¼ãƒ‘スワードを設定ã™ã‚‹å¿?¦ãŒã‚りã¾ã™ã?
338             * åˆæœŸå€¤ã¯ã€ã‚·ã‚¹ãƒ?ƒ å®šæ•°ã®MAIL_SEND_AUTH を使用ã—ã¾ã™ã?
339             *
340             * (åˆæœŸå€¤:シスãƒ?ƒ å®šæ•°ã®MAIL_SEND_AUTH[={@og.value org.opengion.hayabusa.common.SystemData#MAIL_SEND_AUTH}])ã€?
341             * 
342             * @og.rev 5.6.6.0 (2013/07/05)
343             * 
344             * @param  useAuth èªè¨¼æ–¹å¼?
345             */
346            public void setAuth( final String useAuth ) {
347                    auth = nval( useAuth, auth );
348            }
349    
350            /**
351             * メールé€ä¿¡èªè¨¼ãƒ¦ãƒ¼ã‚¶ã‚’ã‚»ãƒ?ƒˆã—ã¾ã™ã?
352             * åˆæœŸå€¤ã¯ã€ã‚·ã‚¹ãƒ?ƒ å®šæ•°ã®MAIL_SEND_AUTH_USER を使用ã—ã¾ã™ã?
353             *
354             * (åˆæœŸå€¤:シスãƒ?ƒ å®šæ•°ã®MAIL_SEND_AUTH_USER[={@og.value org.opengion.hayabusa.common.SystemData#MAIL_SEND_AUTH_USER}])ã€?
355             * 
356             * @og.rev 5.6.6.0 (2013/07/05)
357             * 
358             * @param  user èªè¨¼ãƒ¦ãƒ¼ã‚¶
359             */
360            public void setAuthUser( final String user ) {
361                    authUser = nval( user, authUser );
362            }
363    
364            /**
365             * メールé€ä¿¡èªè¨¼ãƒ‘スワードをセãƒ?ƒˆã—ã¾ã™ã?
366             * åˆæœŸå€¤ã¯ã€ã‚·ã‚¹ãƒ?ƒ å®šæ•°ã®MAIL_SEND_AUTH_PASSWORD を使用ã—ã¾ã™ã?
367             *
368             * (åˆæœŸå€¤:シスãƒ?ƒ å®šæ•°ã®MAIL_SEND_AUTH_PASSWORD[={@og.value org.opengion.hayabusa.common.SystemData#MAIL_SEND_AUTH_PASSWORD}])ã€?
369             * 
370             * @og.rev 5.6.6.0 (2013/07/05)
371             * 
372             * @param  pass èªè¨¼ãƒ‘スワーãƒ?
373             */
374            public void setAuthPass( final String pass ) {
375                    authPass = nval( pass, authPass );
376            }
377    
378            /**
379             * メールé€ä¿¡è€?‚¢ãƒ‰ãƒ¬ã‚¹ã‚’è¿”ã—ã¾ã™ã?
380             *
381             * @return      é€ä¿¡è€?‚¢ãƒ‰ãƒ¬ã‚¹
382             */
383            public String getFromAddr() {
384                    return fromAddr;
385            }
386    
387            /**
388             * メールタイトルを返ã—ã¾ã™ã?
389             *
390             * @return      メールタイトル
391             */
392            public String getTitle() {
393                    return mailTitle;
394            }
395    
396            /**
397             * メール本æ–?‚’è¿”ã—ã¾ã™ã?
398             *
399             * @return      メール本�
400             */
401            public String getContent() {
402                    return mailContent;
403            }
404    
405            /**
406             * é€ä¿¡çµæžœã‚’履歴ãƒ??ブル(GE32)ã¨å®›å?ãƒ??ブル(GE34)ã«ç™»éŒ²ã—ã¾ã™ã?
407             * 登録時ã«ã€æ¡æ•°ã‚ªãƒ¼ãƒã?ã«ãªã‚‰ãªã?‚ˆã?«ã€ãƒ†ãƒ¼ãƒ–ãƒ«å®šç¾©ã®æ¡æ•°ã‚’上é™ã¨ã—ã¦ã€?
408             * 登録å‰ã«å??ç›®ã®æ¡æ•°æ•´ç?‚’行ã„ã¾ã™ã?
409             *
410             * @og.rev 5.5.5.1 (2012/08/07) リソース系DBID 付ã‘忘れ対ç­?
411             */
412            protected void commitMailDB(){
413                    // 履歴ãƒ??ブルã®è¿½åŠ?
414                    String[] insGE32Args = new String[15];
415                    String ykno = getYkno();
416                    insGE32Args[GE32_YKNO]          = ykno;
417                    insGE32Args[GE32_PARAKEY]       = initParamMap.get( "PARAKEY" );
418                    insGE32Args[GE32_PTN_ID]        = trim( initParamMap.get( "PTN_ID" ), 20 );
419                    insGE32Args[GE32_FROM_ADDR] = trim( fromAddr, 100);
420                    insGE32Args[GE32_TITLE]         = trim( mailTitle, 300);
421                    insGE32Args[GE32_CONTENTS]      = trim( mailContent,4000);              // 5.0.3.0 (2009/11/04) CONTENT �CONTENTS
422                    insGE32Args[GE32_ATTACH1]       = "";
423                    insGE32Args[GE32_ATTACH2]       = "";
424                    insGE32Args[GE32_ATTACH3]       = "";
425                    insGE32Args[GE32_ATTACH4]       = "";
426                    insGE32Args[GE32_ATTACH5]       = "";
427                    if ( attachFiles != null ) {
428                            int attSize = attachFiles.length;
429                            for( int i = 0; i < attSize; i++ ) {
430                                    insGE32Args[6 + i] = trim( attachFiles[i], 256);
431                            }
432                    }
433                    insGE32Args[GE32_DYSET]  = HybsSystem.getDate( "yyyyMMddHHmmss" );
434                    insGE32Args[GE32_USRSET] = initParamMap.get( "LOGIN_USERID" );
435                    insGE32Args[GE32_PGUPD] = initParamMap.get( "PGID" );
436                    insGE32Args[GE32_SYSTEM_ID] = initParamMap.get( "SYSTEM_ID" );
437    //              DBUtil.dbExecute( insGE32, insGE32Args, appInfo );
438                    DBUtil.dbExecute( insGE32, insGE32Args, appInfo, DBID );        // 5.5.5.1 (2012/08/07)
439    
440                    // å®›å?ãƒ??ブル追åŠ?
441                    String[] insGE34Args = new String[10];
442                    insGE34Args[GE34_YKNO]= ykno;
443                    for( String dstId : mailDstMap.keySet() ) {
444                            insGE34Args[GE34_DST_ID]        = trim( mailDstMap.get( dstId )[MailPattern.IDX_DST_ID]  , 10 );
445                            insGE34Args[GE34_GROUP_ID]      = trim( mailDstMap.get( dstId )[MailPattern.IDX_GROUP_ID], 20 );
446                            insGE34Args[GE34_DST_NAME]      = trim( mailDstMap.get( dstId )[MailPattern.IDX_DST_NAME], 20 );
447                            insGE34Args[GE34_DST_ADDR]      = trim( mailDstMap.get( dstId )[MailPattern.IDX_DST_ADDR], 100 );
448                            insGE34Args[GE34_DST_KBN]       = mailDstMap.get( dstId )[MailPattern.IDX_DST_KBN];
449                            insGE34Args[GE34_FGJ]           = mailDstMap.get( dstId )[MailPattern.IDX_FGJ];
450                            insGE34Args[GE34_DYSET]         = HybsSystem.getDate( "yyyyMMddHHmmss" );
451                            insGE34Args[GE34_USRSET]        = initParamMap.get( "LOGIN_USERID" );
452                            insGE34Args[GE34_PGUPD]         = initParamMap.get( "PGID" );
453    //                      DBUtil.dbExecute( insGE34, insGE34Args, appInfo );
454                            DBUtil.dbExecute( insGE34, insGE34Args, appInfo, DBID );                // 5.5.5.1 (2012/08/07)
455                    }
456            }
457    
458            /**
459             * パラメータマップをセãƒ?ƒˆã—ã¾ã™ã?
460             *
461             * @param       params  パラメータã®ãƒžãƒƒãƒ?
462             */
463            protected void setInitParams( final Map<String, String> params ) {
464                    initParamMap = params;
465            }
466    
467            /**
468             * 添付ファイルé…å?ã‚’ã‚»ãƒ?ƒˆã—ã¾ã™ã?
469             *
470             * @param       attach1 添付ファイルå?
471             * @param       attach2 添付ファイルå?
472             * @param       attach3 添付ファイルå?
473             * @param       attach4 添付ファイルå?
474             * @param       attach5 添付ファイルå?
475             */
476            protected void setAttachFiles( final String attach1
477                                                                    , final String attach2
478                                                                    , final String attach3
479                                                                    , final String attach4
480                                                                    , final String attach5 ) {
481                    List<String> fileList = new ArrayList<String>();
482                    if( attach1 != null && attach1.length() != 0 ) { fileList.add( attach1 ); }
483                    if( attach2 != null && attach2.length() != 0 ) { fileList.add( attach2 ); }
484                    if( attach3 != null && attach3.length() != 0 ) { fileList.add( attach3 ); }
485                    if( attach4 != null && attach4.length() != 0 ) { fileList.add( attach4 ); }
486                    if( attach5 != null && attach5.length() != 0 ) { fileList.add( attach5 ); }
487                    attachFiles = fileList.toArray( new String[fileList.size()] );
488            }
489    
490            /**
491             * メール宛å?マップをセãƒ?ƒˆã—ã¾ã™ã?
492             *
493             * @param   mailDst     メール宛å?マッãƒ?
494             */
495            protected void setMailDstMap( final Map<String, String[]> mailDst ) {
496                    mailDstMap = mailDst;
497            }
498    
499            /**
500             * メール宛å?マップをセãƒ?ƒˆã—ã¾ã™ã?
501             *
502             * @return      メール宛å?マッãƒ?
503             */
504            protected Map<String, String[]> getMailDstMap() {
505                    return mailDstMap;
506            }
507    
508            /**
509             * æŒ?®šã?é•·ã•以å†??æ–?­—å?ã‚’è¿”ã—ã¾ã™ã?
510             *
511             * @param       src             ã‚ªãƒªã‚¸ãƒŠãƒ«ã®æ–?­—å?
512             * @param       maxLen  æŒ?®šã?é•·ã?
513             *
514             * @return      æŒ?®šã?é•·ã•ã«çŸ­ç¸®ã•ã‚ŒãŸæ–‡å­—å?
515             */
516            protected String trim( final String src, final int maxLen ) {
517                    String rtn = src;
518                    if( src != null && src.length() > maxLen ) {
519                            rtn = src.substring( 0, maxLen );
520                    }
521                    return rtn;
522            }
523    
524            /**
525             * アドレスãƒã‚§ãƒ?‚¯ã®ã‚¨ãƒ©ãƒ¼ãƒªã‚¹ãƒˆã‚’è¿”ã—ã¾ã™ã?
526             *
527             * @return      エラーリス�
528             */
529            protected List<String> getErrList(){
530                    return errAddrList;
531            }
532    
533            /**
534             * å®›å?マップをå…?«ã€??信オブジェクトã«å®›å?ã‚’ã‚»ãƒ?ƒˆã—ã¾ã™ã?
535             * ã‚»ãƒ?ƒˆã™ã‚‹éš›ã«ã€ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã‚¨ãƒ©ãƒ¼ã¨ãªã£ã¦ã?‚‹ã‚¢ãƒ‰ãƒ¬ã‚¹ã‚’除外ã—ã¾ã™ã?
536             * å®›å?ãŒå­˜åœ¨ã—ãªã??åˆã?例外を投ã’ã¾ã™ã?
537             *
538             * @og.rev 4.3.7.5 (2009/07/08) é€ä¿¡å…ˆåç§°ãŒè¨­å®šã•れã¦ã?ªã??åˆã?ã€ã‚¢ãƒ‰ãƒ¬ã‚¹ã‚?>ã§å›²ã‚ãªã?
539             *
540             * @param invalidAddr å®›å?ã®ãƒªã‚¹ãƒ?
541             */
542            private void setMailDst( final List<String> invalidAddr ){
543                    ArrayList<String> toList = new ArrayList<String>();
544                    ArrayList<String> ccList = new ArrayList<String>();
545                    ArrayList<String> bccList = new ArrayList<String>();
546    
547                    Map<Integer, ArrayList<String>> tempMap = new HashMap<Integer, ArrayList<String>>();
548                    tempMap.put( Integer.valueOf( MailPattern.KBN_TO ),  toList );
549                    tempMap.put( Integer.valueOf( MailPattern.KBN_CC ),  ccList );
550                    tempMap.put( Integer.valueOf( MailPattern.KBN_BCC ), bccList );
551    
552                    for( String dstId : mailDstMap.keySet() ) {
553                            String[] dstInfo = mailDstMap.get( dstId );
554                            Integer kbn = Integer.valueOf( dstInfo[MailPattern.IDX_DST_KBN] );
555                            if( !invalidAddr.contains( dstInfo[MailPattern.IDX_DST_ADDR] )
556                                            && !FGJ_ADDR_ERR.equals( dstInfo[MailPattern.IDX_FGJ] )){
557                                    dstInfo[MailPattern.IDX_FGJ] = FGJ_SEND_OVER;
558    
559                                    // 4.3.7.5 (2009/07/08)
560                                    String name = dstInfo[MailPattern.IDX_DST_NAME];
561                                    if( name != null && name.length() > 0 ) {
562                                            tempMap.get( kbn ).add( dstInfo[MailPattern.IDX_DST_NAME] +  "<"+ dstInfo[MailPattern.IDX_DST_ADDR] + ">" );
563                                    }
564                                    else {
565                                            tempMap.get( kbn ).add( dstInfo[MailPattern.IDX_DST_ADDR] );
566                                    }
567                            }
568                            else {
569                                    if( FGJ_SEND_OVER.equals( dstInfo[MailPattern.IDX_FGJ] ) ) {
570                                            dstInfo[MailPattern.IDX_FGJ] = FGJ_ACNT_ERR;
571                                    }
572                            }
573                    }
574    
575                    mail.clearTo();         // å®›å?(TO)をクリア
576                    mail.clearCc();         // å®›å?(CC)をクリア
577                    mail.clearBcc();        // å®›å?(BCC)をクリア
578                    boolean haveValidAddr = false ;
579    //              if( toList.size() > 0 ) {    // toã®ã‚»ãƒ?ƒˆ
580                    if( ! toList.isEmpty() ) {      // toã®ã‚»ãƒ?ƒˆ
581                            haveValidAddr = true;
582                            String[] to = toList.toArray( new String[toList.size()] );
583                            mail.setTo( to );
584                    }
585    //              if( ccList.size() > 0 ) {    // ??½??ã‚»ãƒ?ƒˆ
586                    if( ! ccList.isEmpty() ) {      // ??½??ã‚»ãƒ?ƒˆ
587                            haveValidAddr = true;
588                            String[] cc = ccList.toArray( new String[ccList.size()] );
589                            mail.setCc( cc );
590                    }
591    //              if( bccList.size() > 0 ) {   // bccã®ã‚»ãƒ?ƒˆ
592                    if( ! bccList.isEmpty() ) {     // bccã®ã‚»ãƒ?ƒˆ
593                            haveValidAddr = true;
594                            String[] bcc = bccList.toArray( new String[bccList.size()] );
595                            mail.setBcc( bcc );
596                    }
597                    if( !haveValidAddr ){           // å®›å?全部無効ã®å ´åˆã?例外を投ã’ã¾ã™ã?
598                            String errMsg = "å®›å?ã®ãƒ¡ãƒ¼ãƒ«ã‚¢ãƒ‰ãƒ¬ã‚¹ãŒæœ‰åйã§ã¯ã‚りã¾ã›ã‚“ã€?
599                                                    + "TO , CC , BCC ã®ã?¥ã‚Œã«ã‚‚アドレスãŒè¨­å®šã•れã¦ã?¾ã›ã‚“ã€?; // 5.1.8.0 (2010/07/01) errMsg 修正
600                            throw new RuntimeException( errMsg );
601                    }
602            }
603    
604            /**
605             * è¦æ±?Oを採番ã—ã¾ã™ã?
606             * ã“ã?è¦æ±?Oã§å±¥æ­´ãƒ??ブル(GE32)ã¨å®›å?ãƒ??ブル(GE30)ã®é–¢é€£ä»˜ã‘ã‚’æŒãŸã›ã¾ã™ã?
607             *
608             * @og.rev 5.5.5.1 (2012/08/07) リソース系DBID 付ã‘忘れ対ç­?
609             *
610             * @return      è¦æ±?O
611             */
612            private String getYkno() {
613    //              String[][] tmp = DBUtil.dbExecute( selYkno, new String[0], appInfo );
614                    String[][] tmp = DBUtil.dbExecute( selYkno, new String[0], appInfo, DBID );             // 5.5.5.1 (2012/08/07)
615                    if( tmp == null || tmp.length == 0 ) {
616                            String errMsg = "è¦æ±?O採番エラー"
617                                                    + " SQL=" + selYkno ;           // 5.1.8.0 (2010/07/01) errMsg 修正
618                            throw new RuntimeException( errMsg );
619                    }
620                    return tmp[0][0];
621            }
622    
623            /**
624             * メールアドレスã®ãƒªã‚¹ãƒˆã‚ˆã‚Šãƒ¦ãƒ¼ã‚¶ãƒ¼IDã‚’é?引ãã—ã¾ã™ã?
625             *
626             * @param       addressList     メールアドレスã®ãƒªã‚¹ãƒ?
627             *
628             * @return      ユーザーID
629             */
630            private String getUserIds( final List<String> addressList ){
631                    StringBuilder idBuf = new StringBuilder();
632                    Map<String,String>  addressMap = new HashMap<String, String>();
633                    for( String userId : mailDstMap.keySet() ) {
634                            String[] dstInfo = mailDstMap.get( userId );
635                            addressMap.put( dstInfo[MailPattern.IDX_DST_ADDR], userId );
636                    }
637                    for(int i=0; i < addressList.size(); i++){
638                            idBuf.append( ',' ).append( addressMap.get( addressList.get( i ) ) );
639                    }
640                    String rtn = "";
641                    if ( idBuf.length() > 0 ) {
642                            rtn = idBuf.toString().substring( 1 );
643                    }
644                    return rtn;
645            }
646    }