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.taglib;
017    
018    import org.opengion.hayabusa.common.HybsSystem;
019    import org.opengion.hayabusa.common.HybsSystemException;
020    import org.opengion.hayabusa.resource.LDAPSearch;
021    import org.opengion.fukurou.db.DBUtil;
022    import org.opengion.fukurou.mail.MailTX;
023    import org.opengion.fukurou.util.StringUtil;
024    import org.opengion.hayabusa.mail.AbstractMailManager;
025    import org.opengion.hayabusa.mail.MailPattern;
026    
027    import static org.opengion.fukurou.util.StringUtil.nval ;
028    
029    import java.util.List;
030    import java.io.ObjectOutputStream;
031    import java.io.ObjectInputStream;
032    import java.io.IOException;
033    
034    /**
035     * メールをé?信するための簡易タグですã?
036     *
037     * Body 部に、メãƒ?‚»ージを記述しますã?
038     *
039     * @og.formSample
040     * ●形式ï¼?lt;og:mailSender from="…" to="…" subject="?¥?¥?¥"/>
041     * ●body?šあã‚?EVAL_BODY_BUFFERED:BODYを評価しã?{@XXXX} を解析しまã�?
042     *
043     * ●Tag定義??
044     *   <og:mailSender
045     *       subject            【TAG】タイトルを指定しまã�?
046     *       from               【TAG】é?信å…??¦?²?¯?­)アドレスを指定しまã�?
047     *       to                 【TAG】é?信å…??´?¯)アドレスをCSV形式でæŒ?®šしまã�?
048     *       cc                 【TAG】é?信å…??£?£)アドレスをCSV形式でæŒ?®šしまã�?
049     *       bcc                【TAG】é?信å…??¢?£?£)アドレスをCSV形式でæŒ?®šしまã�?
050     *       replyTo            【TAG】返信å…?replyTo)アドレスをCSV形式でæŒ?®šしまã�?
051     *       host               【TAG】メールサーバã?を指定しまã�?(初期値:COMMON_MAIL_SERVER[=])
052     *       charset            【TAG】文字エンコーãƒ?‚£ングを指定しまã�?(初期値:MAIL_DEFAULT_CHARSET[=ISO-2022-JP])
053     *       fileURL            【TAG】添付ファイルのセーブディレクトリを指定しまã�?(初期値:FILE_URL[=filetemp/])
054     *       filename           【TAG】添付ファイル名をCSV形式でæŒ?®šしまã�?
055     *       useLDAP            【TAG】メールアドレスをLDAPを利用して取得するかどã�?�‹[true/false]を指定しまã�?初期値:false)
056     *       ldapKey            【TAG】アドレスを検索するキーを指定しまã�?初期値:LDAP_MAILSEND_KEY[=uid] C社員番号)
057     *       ldapVals           【TAG】LDAP検索時ã?属æ?名をæŒ?®šしまã�?初期値:LDAP_MAILSEND_VALS[=cn,mail])
058     *       debug              【TAG】デバッグæƒ??をå?力するかどã�?�‹[true/false]を指定しまã�?初期値:false)
059     *   >   ... Body ...
060     *   </og:mailSender>
061     *
062     * ●使用ä¾?
063     *     <og:mailSender from="C00000" to="C99999" subject="{@SUBJECT}" >
064     *          メールå†?®¹
065     *     </og:mailSender >
066     *
067     *        charset   = キャラクタセãƒ?ƒˆ  (例:Windows-31J , ISO-2022-JP)
068     *        from      = From       送信å…?
069     *        to        = To         送信å…?è¤?•°登録可能)
070     *        cc        = Cc         送信å…?è¤?•°登録可能)
071     *        bcc       = Bcc        送信å…?è¤?•°登録可能)
072     *        replyTo   = ReplyTo    返信先å?(è¤?•°登録可能)
073     *        useLDAP   = false/true メールアドレスをLDAPを利用して取得するかどã�?�‹
074     *        ldapKey   = "uid"      アドレスを検索するキー(初期値:シスãƒ?ƒ リソース C社員番号)
075     *        ldapVals  = "cn,mail"  LDAP検索時ã?属æ?名ã?ひとつならアドレス。2つなら名前とアドレス
076     *        host      = ?³?­?´?°サーバã?å�?
077     *        subject   = タイトル
078     *        fileURL   = 添付ファイルのセーブディレクトリ
079     *        filename  = 添付ファイルå�?ローカルにセーブされたファイルå�?(è¤?•°登録可能)
080     *        debug     = true/false;
081     *
082     * è¤?•°登録可能な個所は、カンマ区åˆ?‚Šで、è¤?•°登録できますã?
083     * アドレス(from,to,cc,bcc,replyTo)は、ã?"名称" <メールアドレス>』形式が
084     * æŒ?®šできますã?< と > で囲まれたç¯?›²がメールアドレスになりますã?
085     * 名称には、漢字が使用できますã?
086     *
087     * host は、シスãƒ?ƒ パラメータ の COMMON_MAIL_SERVER 属æ?がå?期å?で設定されますã?
088     * charset は、シスãƒ?ƒ パラメータ の MAIL_DEFAULT_CHARSET 属æ?がå?期å?で設定されますã?
089     *
090     * @og.group そã?他å?åŠ?
091     *
092     * @version  4.0
093     * @author   Kazuhiko Hasegawa
094     * @since    JDK5.0,
095     */
096    public class MailSenderTag extends CommonTagSupport {
097            //* こã?プログラãƒ??VERSIONæ–?­—å?を設定しますã?       {@value} */
098            private static final String VERSION = "5.6.9.3 (2013/10/25)" ;
099    
100            private static final long serialVersionUID = 569320131025L ;
101    
102            private transient MailTX     mail     = null;
103            private String     host     = HybsSystem.sys( "COMMON_MAIL_SERVER" );
104            private String     charset  = HybsSystem.sys( "MAIL_DEFAULT_CHARSET" ); // 3.5.6.6 (2004/08/23)
105            private String     from     = null;
106            private String[]   to       = null;
107            private String[]   cc       = null;
108            private String[]   bcc      = null;
109            private String[]   replyTo  = null;
110            private String     subject  = null;
111            private String[]   filename = null;
112            private String     fileURL      = HybsSystem.sys( "FILE_URL" );
113    
114            private boolean         useLDAP = false;                                // 3.7.1.0 (2005/04/15)
115            // uid C社員番号 、employeeNumber 社員番号
116    //      private String          ldapKey = "uid";                                // 3.7.1.0 (2005/04/26)
117    //      private String          ldapVals= "cn,mail";                    // 3.7.1.0 (2005/04/15)
118            private String          ldapKey = HybsSystem.sys( "LDAP_MAILSEND_KEY" );                // 5.6.7.0 (2013/07/27)
119            private String          ldapVals= HybsSystem.sys( "LDAP_MAILSEND_VALS" );               // 5.6.7.0 (2013/07/27)
120            
121            private boolean         useDB   = false;                                // 5.6.9.3 (2013/10/25) GE35からメールアドレスを取å¾?
122            private final String DBID = HybsSystem.sys( "RESOURCE_DBID" );
123    
124            /**
125             * Taglibの開始タグが見つかったときに処ç�?�™ã‚?doStartTag() ã‚?オーバã?ライドしますã?
126             *
127             * @return      後続å?ç�??æŒ?¤º( EVAL_BODY_BUFFERED )
128             */
129            @Override
130            public int doStartTag() {
131                    mail = new MailTX( host,charset );
132                    return( EVAL_BODY_BUFFERED );   // Body を評価するã€? extends BodyTagSupport æ™?
133            }
134    
135            /**
136             * Taglibのタグ本体を処ç�?�™ã‚?doAfterBody() ã‚?オーバã?ライドしますã?
137             *
138             * @og.rev 3.1.1.0 (2003/03/28) ボディのå†?®¹を取得するå?ç�?‚’、CommonTagSupport で行うã€?
139             *
140             * @return      後続å?ç�??æŒ?¤º(SKIP_BODY)
141             */
142            @Override
143            public int doAfterBody() {
144                    String message = getBodyString();
145    
146                    mail.setMessage( message );
147    
148                    return(SKIP_BODY);
149            }
150    
151            /**
152             * Taglibの終äº?‚¿グが見つかったときに処ç�?�™ã‚?doEndTag() ã‚?オーバã?ライドしますã?
153             *
154             * @og.rev 3.1.1.2 (2003/04/04) Tomcat4.1 対応ã?release2() ã‚?doEndTag()で呼ぶã€?
155             * @og.rev 3.7.1.0 (2005/04/15) LDAP検索 新規追åŠ?
156             * @og.rev 5.6.9.3 (2013/10/25) useDB対å¿?
157             *
158             * @return      後続å?ç�??æŒ?¤º
159             */
160            @Override
161            public int doEndTag() {
162                    debugPrint();           // 4.0.0 (2005/02/28)
163    
164                    // 3.7.1.0 (2005/04/15) LDAP検索 新規追åŠ?
165                    if( useLDAP ) {
166                            String[] vals = StringUtil.csv2Array( ldapVals );
167    
168                            LDAPSearch serch = new LDAPSearch();
169                            serch.setAttributes( vals );
170                            serch.init();
171    
172                            from    = setLDAPAddress( serch,from    );
173                            to              = setLDAPAddress( serch,to              );
174                            cc              = setLDAPAddress( serch,cc              );
175                            bcc             = setLDAPAddress( serch,bcc             );
176                            replyTo = setLDAPAddress( serch,replyTo );
177                    }
178                    else if( useDB ){ // 5.6.9.3 (2013/10/25) GE35からメールアドレスを取å¾?
179                            String[] from_array = {from};
180                            from    = getAddressArray( from_array )[0];
181                            to              = getAddressArray( to           );
182                            cc              = getAddressArray( cc           );
183                            bcc             = getAddressArray( bcc          );
184                            replyTo = getAddressArray( replyTo      );
185                    }
186    
187    //              mail.setHost( host );
188                    mail.setFrom( from );
189                    mail.setTo( to );
190                    mail.setCc( cc );
191                    mail.setBcc( bcc );
192                    mail.setReplyTo( replyTo );
193                    mail.setSubject( subject );
194    //              mail.setCharset( charset );
195                    mail.setDebug( isDebug() );
196    
197                    if( filename != null && filename.length > 0 ) {
198                            String[] temp = new String[filename.length];
199                            String directory = HybsSystem.url2dir( fileURL );
200                            for( int i=0; i<temp.length; i++ ) {
201                                    temp[i] = StringUtil.urlAppend( directory, filename[i] );
202                            }
203                            mail.setFilename( temp );
204                    }
205    
206                    mail.sendmail() ;
207    
208                    return(EVAL_PAGE);
209            }
210    
211            /**
212             * タグリブオブジェクトをリリースしますã?
213             * キャãƒ?‚·ュされて再利用されるã?で、フィールドã?初期設定を行いますã?
214             *
215             * @og.rev 2.0.0.4 (2002/09/27) カスタãƒ?‚¿グの release() メソãƒ?ƒ‰をã?追åŠ?
216             * @og.rev 3.1.1.2 (2003/04/04) Tomcat4.1 対応ã?release2() ã‚?doEndTag()で呼ぶã€?
217             * @og.rev 3.7.1.0 (2005/04/15) LDAP検索 useLDAP,ldapKey,ldapVals 属æ?追åŠ?
218             * @og.rev 5.6.7.0 (2013/07/27) ldapKey,ldapValsの取得をリソースに変更
219             * @og.rev 5.6.9.3 (2013/10/25) useDB追åŠ?
220             *
221             */
222            @Override
223            protected void release2() {
224                    super.release2();
225                    mail     = null;
226                    host     = HybsSystem.sys( "COMMON_MAIL_SERVER" );
227                    charset  = HybsSystem.sys( "MAIL_DEFAULT_CHARSET" );    // 3.5.6.6 (2004/08/23)
228                    from     = null;
229                    to       = null;
230                    cc       = null;
231                    bcc      = null;
232                    replyTo  = null;
233                    subject  = null;
234                    fileURL  = HybsSystem.sys( "FILE_URL" );
235                    filename = null;
236                    useLDAP  = false;                               // 3.7.1.0 (2005/04/15)
237    //              ldapKey  = "uid";                               // 3.7.1.0 (2005/04/26)
238    //              ldapVals = "cn,mail";                   // 3.7.1.0 (2005/04/15)
239                    ldapKey = HybsSystem.sys( "LDAP_MAILSEND_KEY" );                // 5.6.7.0 (2013/07/27)
240                    ldapVals= HybsSystem.sys( "LDAP_MAILSEND_VALS" );               // 5.6.7.0 (2013/07/27)
241                    useDB   = false;                                // 5.6.9.3 (2013/10/25) GE35からメールアドレスを取å¾?
242            }
243    
244            /**
245             * LDAP を利用したメールアドレスを設定し直しますã?
246             *
247             * LDAPより、ldapKeyをキーに、ldapVals を設定å?として、読み込みますã?
248             * 初期値は、ldapKeyは、uid(ユニã?クID) ldapValsは、cn,mail(名前、メールアドレス)となってã�?�¾すã?
249             * from,to,cc,bcc,replyTo の設定å?をã?target にセãƒ?ƒˆして、検索しますã?
250             * 通常、このメソãƒ?ƒ‰は、useLDAP=true の場合に呼び出すよã�?�«設定しますã?
251             * target ã�?null かã?ゼロæ–?­—å?ã�?メールアドレス(ここではã€?#064; æ–?­—を含ã‚?�‹どã�?�‹で判å®?の場合ã?
252             * そã?まま target を返しますã?
253             *
254             * @og.rev 3.7.1.0 (2005/04/15) LDAP検索 新規追åŠ?
255             *
256             * @param       serch   LDAPSearchオブジェクãƒ?
257             * @param       target  ldapKeyキーに対する設定å?
258             *
259             * @return      メールアドレス
260             * @see   #setLDAPAddress( LDAPSearch serch, String[] targets )
261             */
262            private String setLDAPAddress( final LDAPSearch serch, final String target ) {
263                    final String rtnAdrs ;
264    
265    //              if( target == null || target.length() == 0 || target.indexOf("@") > 0 ) { return target; }
266                    if( target != null && target.indexOf( '@' ) < 0 ) {
267                            List<String[]> list = serch.search( ldapKey + "=" + target );
268                            if( list.size() == 1 ) {
269                                    String[] vals = list.get(0);
270                                    if( ldapVals.indexOf(',') < 0 ) {    // 検索値が2つの場合でなã�?
271                                            rtnAdrs = vals[0] ;             // メールアドレスのみ
272                                    }
273                                    else {
274                                            rtnAdrs = vals[0] + "<" + vals[1] + ">" ; // "名前<aaaa@bbbb>" 形å¼?
275                                    }
276                            }
277                            else {
278                                    String errMsg = "LDAP検索の結果、メールアドレスが見つかりませんでしたã€?
279                                                            + "設定å?=[" + target + "] , 検索キー=[" + ldapKey + "] , 検索属æ?=["
280                                                            + ldapVals + "]" ;
281                                    throw new HybsSystemException( errMsg );
282                            }
283                    }
284                    else {
285                            rtnAdrs = target;
286                    }
287    
288                    return rtnAdrs ;
289            }
290    
291            /**
292             * LDAP を利用したè¤?•°のメールアドレスを取得しますã?
293             *
294             * LDAPより、ldapKeyをキーに、ldapVals を設定å?として、読み込みますã?
295             * 初期値は、ldapKeyは、uid(ユニã?クID) ldapValsは、cn,mail(名前、メールアドレス)となってã�?�¾すã?
296             * from,to,cc,bcc,replyTo の設定å?をã?target にセãƒ?ƒˆして、検索しますã?
297             * 通常、このメソãƒ?ƒ‰は、useLDAP=true の場合に呼び出すよã�?�«設定しますã?
298             * target がメールアドレスの場合ã?(ここではã€?#064; æ–?­—を含ã‚?�‹どã�?�‹で判å®?そã?まま返しますã?
299             *
300             * @og.rev 3.7.1.0 (2005/04/26) LDAP検索 新規追åŠ?
301             *
302             * @param       serch   LDAPSearchオブジェクãƒ?
303             * @param       targets ldapKeyキーに対する設定å?の配å?
304             *
305             * @return      è¤?•°のメールアドレス(配å?)
306             * @see   #setLDAPAddress( LDAPSearch serch, String target )
307             */
308            private String[] setLDAPAddress( final LDAPSearch serch, final String[] targets ) {
309                    if( targets == null || targets.length == 0 ) { return targets; }
310    
311                    String[] rtn = new String[targets.length];
312    
313                    for( int i=0; i<targets.length; i++ ) {
314                            rtn[i] = setLDAPAddress( serch,targets[i] );
315                    }
316                    return rtn ;
317            }
318    
319            /**
320             * 【TAG】é?信å…??¦?²?¯?­)アドレスを指定しますã?
321             *
322             * @og.tag 送信å…??¦?²?¯?­)アドレスを指定しますã?
323             *
324             * @param   fromAdrs 送信å…??¦?²?¯?­)アドレス
325             */
326            public void setFrom( final String fromAdrs ) {
327                    from = nval( getRequestParameter( fromAdrs ), from );
328            }
329    
330            /**
331             * 【TAG】é?信å…??´?¯)アドレスをCSV形式でæŒ?®šしますã?
332             *
333             * @og.tag
334             * è¤?•°アドレスをカンマ区åˆ?‚Šでセãƒ?ƒˆできますã?
335             *
336             * @og.rev 3.5.6.2 (2004/07/05) 先に配å?にåˆ?§£してからリクエスト変数の値を取å¾?
337             * @og.rev 3.5.6.4 (2004/07/16) 先にリクエスト変数の値を取得してから配å?にåˆ?§£
338             *
339             * @param   toAdrs 送信å…??´?¯)アドレス(CSV形å¼?
340             */
341            public void setTo( final String toAdrs ) {
342                    to = StringUtil.csv2ArrayOnly( getRequestParameter( toAdrs ) );
343            }
344    
345            /**
346             * 【TAG】é?信å…??£?£)アドレスをCSV形式でæŒ?®šしますã?
347             *
348             * @og.tag
349             * è¤?•°アドレスをカンマ区åˆ?‚Šでセãƒ?ƒˆできますã?
350             *
351             * @og.rev 3.5.6.2 (2004/07/05) 先に配å?にåˆ?§£してからリクエスト変数の値を取å¾?
352             * @og.rev 3.5.6.4 (2004/07/16) 先にリクエスト変数の値を取得してから配å?にåˆ?§£
353             *
354             * @param   ccAdrs 送信å…??£?£)アドレス(CSV形å¼?
355             */
356            public void setCc( final String ccAdrs ) {
357                    cc = StringUtil.csv2ArrayOnly( getRequestParameter( ccAdrs ) );
358            }
359    
360            /**
361             * 【TAG】é?信å…??¢?£?£)アドレスをCSV形式でæŒ?®šしますã?
362             *
363             * @og.tag
364             * è¤?•°アドレスをカンマ区åˆ?‚Šでセãƒ?ƒˆできますã?
365             *
366             * @og.rev 3.5.6.2 (2004/07/05) 先に配å?にåˆ?§£してからリクエスト変数の値を取å¾?
367             * @og.rev 3.5.6.4 (2004/07/16) 先にリクエスト変数の値を取得してから配å?にåˆ?§£
368             *
369             * @param   bccAdrs 送信å…??¢?£?£)アドレス(CSV形å¼?
370             */
371            public void setBcc( final String bccAdrs ) {
372                    bcc = StringUtil.csv2ArrayOnly( getRequestParameter( bccAdrs ) );
373            }
374    
375            /**
376             * 【TAG】返信å…?replyTo)アドレスをCSV形式でæŒ?®šしますã?
377             *
378             * @og.tag
379             * è¤?•°アドレスをカンマ区åˆ?‚Šでセãƒ?ƒˆできますã?
380             *
381             * @og.rev 3.5.6.6 (2004/08/23) 新規追åŠ?
382             *
383             * @param   replyToAdrs 返信å…?replyTo)アドレス(CSV形å¼?
384             */
385            public void setReplyTo( final String replyToAdrs ) {
386                    replyTo = StringUtil.csv2ArrayOnly( getRequestParameter( replyToAdrs ) );
387            }
388    
389            /**
390             * 【TAG】メールサーバã?を指定しまã�?
391             *              (初期値:COMMON_MAIL_SERVER[={@og.value org.opengion.hayabusa.common.SystemData#COMMON_MAIL_SERVER}])ã€?
392             *
393             * @og.tag メールサーバã?を指定しますã?
394             * (初期値:シスãƒ?ƒ 定数のCOMMON_MAIL_SERVER[={@og.value org.opengion.hayabusa.common.SystemData#COMMON_MAIL_SERVER}])ã€?
395             *
396             * @og.rev 3.5.6.6 (2004/08/23) 初期値をè?慮するように変更ã€?
397             *
398             * @param   hst メールサーバã?
399             * @see         org.opengion.hayabusa.common.SystemData#COMMON_MAIL_SERVER
400             */
401            public void setHost( final String hst ) {
402                    host = nval( getRequestParameter( hst ),host );
403            }
404    
405            /**
406             * 【TAG】タイトルを指定しますã?
407             *
408             * @og.tag タイトルを指定しますã?
409             *
410             * @param   subjct タイトル
411             */
412            public void setSubject( final String subjct ) {
413                    this.subject = getRequestParameter( subjct );
414            }
415    
416            /**
417             * 【TAG】添付ファイル名をCSV形式でæŒ?®šしますã?
418             *
419             * @og.tag
420             * è¤?•°ファイルをセãƒ?ƒˆできますã?
421             * 設定方法ã?、カンマで区åˆ?�£て並べè¤?•°æŒ?®šできますã?
422             *
423             * @og.rev 3.5.6.6 (2004/08/23) è¤?•°ファイルæŒ?®š方法をã€?‡�è¤?ƒªクエストからカンマ区åˆ?‚Šに変更
424             *
425             * @param   fname 添付ファイルå�?CSV形å¼?
426             */
427            public void setFilename( final String fname ) {
428                    filename = StringUtil.csv2ArrayOnly( getRequestParameter( fname ) );
429            }
430    
431            /**
432             * 【TAG】文字エンコーãƒ?‚£ングを指定しまã�?
433             *              (初期値:MAIL_DEFAULT_CHARSET[={@og.value org.opengion.hayabusa.common.SystemData#MAIL_DEFAULT_CHARSET}])ã€?
434             *
435             * @og.tag
436             * æ–?­—エンコーãƒ?‚£ングは、メール本æ–?�«対するエンコーãƒ?‚£ングæŒ?®šですã?
437             * これは、Windows-31J 、MS932、Shift_JIS のどれかが指定された場合ã?
438             * 『指定ã?æ–?­—コーãƒ?+ 8bit 送信』しますã?
439             * それ以外ã?æŒ?®šã?、ã?ISO-2022-JP に独自変換 + 7bit 送信』になりますã?
440             * (初期値:シスãƒ?ƒ 定数のMAIL_DEFAULT_CHARSET[={@og.value org.opengion.hayabusa.common.SystemData#MAIL_DEFAULT_CHARSET}])ã€?
441             *
442             * @param   chset æ–?­—エンコーãƒ?‚£ング
443             * @see         org.opengion.hayabusa.common.SystemData#MAIL_DEFAULT_CHARSET
444             */
445            public void setCharset( final String chset ) {
446                    charset = nval( getRequestParameter( chset ),charset );
447            }
448    
449            /**
450             * 【TAG】添付ファイルのセーブディレクトリを指定しまã�?
451             *              (初期値:FILE_URL[={@og.value org.opengion.hayabusa.common.SystemData#FILE_URL}])ã€?
452             *
453             * @og.tag
454             * こã?属æ?でæŒ?®šされるãƒ?‚£レクトリに、添付ファイルが存在すると仮定しますã?
455             * æŒ?®š方法ã?ã€??常の fileURL 属æ?と同様に、å?頭がã?'/' (UNIX) またã?ã€?¼’文字目がã?
456             * ":" (Windows)の場合ã?、指定ã?URLそã?ままのãƒ?‚£レクトリに、そã�?�§なã�??合ã?ã€?
457             * fileURL = "{&#064;USER.ID}" とæŒ?®šすると、FILE_URL 属æ?でæŒ?®šã?フォルãƒ??下にã€?
458             * さらに、各個人ID別のフォルãƒ?‚’作æ?して、そこを使用しますã?
459             * (初期値:シスãƒ?ƒ 定数のFILE_URL[={@og.value org.opengion.hayabusa.common.SystemData#FILE_URL}])ã€?
460             *
461             * @og.rev 4.0.0.0 (2005/01/31) StringUtil.urlAppend メソãƒ?ƒ‰の利用
462             * @og.rev 4.0.0.0 (2007/11/20) æŒ?®šされたãƒ?‚£レクトリ名ã?æœ?¾Œが"\"or"/"で終わってã�?�ªã�??合にã€?/"を付加するã€?
463             *
464             * @param       url 添付ファイルのセーブディレクトリ
465             * @see         org.opengion.hayabusa.common.SystemData#FILE_URL
466             */
467            public void setFileURL( final String url ) {
468                    String furl = nval( getRequestParameter( url ),null );
469                    if( furl != null ) {
470                            char ch = furl.charAt( furl.length()-1 );
471                            if( ch != '/' && ch != '\\' ) { furl = furl + "/"; }
472                            fileURL = StringUtil.urlAppend( fileURL,furl );
473                    }
474            }
475    
476            /**
477             * 【TAG】メールアドレスをLDAPを利用して取得するかどã�?�‹[true/false]を指定しまã�?初期値:false)ã€?
478             *
479             * @og.tag
480             * LDAP のメールアドレスを取得するå?合ã?、true をセãƒ?ƒˆしますã?false の場合ã?ã€?
481             * from,to,cc,bcc,replyTo の設定å?がそのまま使用されますã?
482             * 上記アドレスにã€?#064; を含ã‚??合ã?、LDAP を検索せず、メールアドレスとして
483             * そã?まま使用しますã?LDAP の検索結果が存在しなã�??合ã?、不正なアドレスとしてã€?
484             * エラーとしますã?
485             * 初期値は、false ですã?
486             *
487             * @og.rev 3.7.1.0 (2005/04/15) LDAP検索 新規追åŠ?
488             *
489             * @param   useLDAP メールアドレスをLDAPを利用して取得するかどã�?�‹ [true:取得すã‚?false:取得しない]
490             */
491            public void setUseLDAP( final String useLDAP ) {
492                    this.useLDAP = nval( getRequestParameter( useLDAP ),this.useLDAP );
493            }
494    
495            /**
496             * 【TAG】アドレスを検索するキーを指定しまã�?初期値:uid C社員番号)ã€?
497             *
498             * @og.tag
499             * LDAP のメールアドレスを取得するå?合ã?、検索するキーを指定しますã?
500             * from,to,cc,bcc,replyTo の設定å?をã?こã?キーにセãƒ?ƒˆして、検索しますã?
501             * uid C社員番号 、employeeNumber 社員番号 などがè?えられますã?
502             * 初期値は、uid(C社員番号)ですã?
503             * こã?キーでè¤?•°の検索結果が得られた場合ã?、エラーとしますã?
504             *
505             * @og.rev 3.7.1.0 (2005/04/15) LDAP検索 新規追åŠ?
506             *
507             * @param   ldapKey アドレスを検索するキー
508             */
509            public void setLdapKey( final String ldapKey ) {
510                    this.ldapKey = nval( getRequestParameter( ldapKey ),this.ldapKey );
511            }
512    
513            /**
514             * 【TAG】LDAP検索時ã?属æ?名をæŒ?®šしまã�?初期値:cn,mail)ã€?
515             *
516             * @og.tag
517             * LDAPを検索する場合ã?"æ‹?½“è?å�?&lt;メールアドレス&gt;形式ã?メールアドレスを作æ?する
518             * 場合ã?検索する属æ?値を指定しますã?
519             * ひとつならアドレス。2つなら名前とアドレスのé ?�§æŒ?®šされたと認識しますã?
520             *
521             * @og.rev 3.7.1.0 (2005/04/15) LDAP検索 新規追åŠ?
522             *
523             * @param   ldapVals LDAP検索時ã?属æ?å�?
524             */
525            public void setLdapVals( final String ldapVals ) {
526                    this.ldapVals = nval( getRequestParameter( ldapVals ),this.ldapVals );
527            }
528            
529            /**
530             * 【TAG】メールアドレスをGE35を利用して取得するかどã�?�‹[true/false]を指定しまã�?初期値:false)ã€?
531             *
532             * @og.tag
533             * GE35からメールアドレスを取得するå?合ã?、true をセãƒ?ƒˆしますã?false の場合ã?ã€?
534             * from,to,cc,bcc,replyTo の設定å?がそのまま使用されますã?
535             * 上記アドレスにã€?#064; を含ã‚??合ã?、DB を検索せず、メールアドレスとして
536             * そã?まま使用しますã?DB の検索結果が存在しなã�??合ã?、不正なアドレスとしてã€?
537             * エラーとしますã?
538             * useLDAPと同時に設定されてã�?‚‹場合ã?、LDAP設定が優先されますã?
539             * 初期値は、false ですã?
540             *
541             * @og.rev 5.6.9.3 (2013/10/25) 新規追åŠ?
542             *
543             * @param   flg メールアドレスをGE35を利用して取得するかどã�?�‹ [true:取得すã‚?false:取得しない]
544             */
545            public void setUseDB( final String flg ) {
546                    useDB = nval( getRequestParameter( flg ),useDB );
547            }
548    
549            /**
550             * シリアライズ用のカスタãƒ?‚·リアライズ書き込みメソãƒ?ƒ‰
551             *
552             * @og.rev 4.0.0.0 (2006/09/31) 新規追åŠ?
553             * @serialData ä¸?ƒ¨のオブジェクトã?、シリアライズされませんã€?
554             *
555             * @param       strm    ObjectOutputStreamオブジェクãƒ?
556             * @throws IOException  入出力エラーが発生したå?å�?
557             */
558            private void writeObject( final ObjectOutputStream strm ) throws IOException {
559                    strm.defaultWriteObject();
560            }
561    
562            /**
563             * シリアライズ用のカスタãƒ?‚·リアライズ読み込みメソãƒ?ƒ‰
564             *
565             * ここでは、transient 宣è¨?�•れたå†?ƒ¨変数のå†??初期化がå¿?¦�なフィールドã?み設定しますã?
566             *
567             * @og.rev 4.0.0.0 (2006/09/31) 新規追åŠ?
568             * @serialData ä¸?ƒ¨のオブジェクトã?、シリアライズされませんã€?
569             *
570             * @param       strm    ObjectInputStreamオブジェクãƒ?
571             * @see #release2()
572             * @throws IOException  シリアライズに関する入出力エラーが発生したå?å�?
573             * @throws ClassNotFoundException       クラスを見つけることができなかったå?å�?
574             */
575            private void readObject( final ObjectInputStream strm ) throws IOException , ClassNotFoundException {
576                    strm.defaultReadObject();
577            }
578            
579            /**
580             * 引数のアドレス配å?を社員マスタ??E35)で変換して返しますã?
581             * グループIDは利用しませんã€?
582             * 
583             * @og.rev 5.6.9.3 (2013/10/25) 新規追åŠ?
584             * 
585             * @param       src     引数配å?
586             *
587             * @return      変換後アドレス配å?
588             */
589            public String[] getAddressArray( final String[] src ){
590                    if( src == null || src.length == 0 ) { return src; }
591                    
592                    String[] rtn= src.clone();
593                    
594                    for( int i=0; i < src.length; i++ ){
595                            String addr = src[i];                                                   // 宛å?ID
596                            String[] userAddr = getUserAddr( addr );
597                            if ( userAddr != null && userAddr.length > 0 ){
598                                    if( userAddr[MailPattern.GE35_NAME] != null ){  // 宛å?å�?
599                                            addr = userAddr[MailPattern.GE35_NAME] + "<" + userAddr[MailPattern.GE35_MAIL] + ">";
600                                    }
601                                    else{
602                                            addr = userAddr[MailPattern.GE35_MAIL];
603                                    }
604                                    
605                                    rtn[i] = addr;
606    
607                            }
608                    }
609    
610                    return rtn;
611            }
612            
613            
614            /**
615             * 社員マスタより名前、メールアドレスを取得しますã?
616             * 戻りå? rtn[0]:ユーザー名ã? rtn[1]:ユーザーメールアドレス
617             *
618             * @og.rev 5.6.9.3 (2013/10/25) mailSenderでã‚?E35を扱ã�??
619             *
620             * @param   userId  ユーザーID
621             *
622             * @return      配å?æ–?­—å?(rtn[0]:ユーザー名ã? rtn[1]:ユーザーメールアドレス)
623             */
624            private String[] getUserAddr( final String userId ){
625                    String[] rtn = null;
626    
627                    if ( userId.contains( "@" ) ) {
628                            rtn = new String[2];
629                            rtn[0] = "";
630                            rtn[1] = userId;
631                    }
632                    else {
633                            String[] ge35SelArgs = { userId };
634                            String[][] ge35Datas = DBUtil.dbExecute( MailPattern.selGE35,ge35SelArgs,getApplicationInfo(), DBID );
635                            if ( ge35Datas.length > 0) {
636                                    rtn = ge35Datas[0];
637                            }
638                            else {
639                                    String errMsg = "ユーザーæƒ??取得できません。ユーザーID?? + userId ;
640                                    throw new HybsSystemException( errMsg );
641                            }
642                    }
643                    return rtn;
644            }
645    
646            /**
647             * こã?オブジェクトã?æ–?­—å?表現を返しますã?
648             * 基本çš?�«ãƒ?ƒ�ãƒ?‚°目çš?�«使用しますã?
649             * 
650             * @og.rev 5.6.9.3 (2013/10/25) useDBの対å¿?
651             *
652             * @return こã?クラスのæ–?­—å?表現
653             */
654            @Override
655            public String toString() {
656                    return org.opengion.fukurou.util.ToString.title( this.getClass().getName() )
657                                    .println( "VERSION"             ,VERSION        )
658                                    .println( "host"                ,host           )
659                                    .println( "charset"             ,charset        )
660                                    .println( "from"                ,from           )
661                                    .println( "to"                  ,to                     )
662                                    .println( "cc"                  ,cc                     )
663                                    .println( "bcc"                 ,bcc            )
664                                    .println( "replyTo"             ,replyTo        )
665                                    .println( "subject"             ,subject        )
666                                    .println( "filename"    ,filename       )
667                                    .println( "fileURL"     ,fileURL        )
668                                    .println( "useLDAP"             ,useLDAP        )
669                                    .println( "ldapKey"             ,ldapKey        )
670                                    .println( "ldapVals"    ,ldapVals       )
671                                    .println( "useDB"               ,useDB          ) // 5.6.9.3 (2013/10/25)
672                                    .println( "Other..."    ,getAttributes().getAttribute() )
673                                    .fixForm().toString() ;
674            }
675    }