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