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