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; 024// import org.opengion.hayabusa.mail.AbstractMailManager; 025import org.opengion.hayabusa.mail.MailPattern; 026 027import static org.opengion.fukurou.util.StringUtil.nval ; 028 029import java.util.List; 030import java.io.ObjectOutputStream; 031import java.io.ObjectInputStream; 032import java.io.IOException; 033 034/** 035 * メールを送信するための簡易タグです。 036 * 037 * Body 部に、メッセージを記述します。 038 * 039 * @og.formSample 040 * ●形式:<og:mailSender from="…" to="…" subject="・・・"/> 041 * ●body:あり(EVAL_BODY_BUFFERED:BODYを評価し、{@XXXX} を解析します) 042 * 043 * ●Tag定義: 044 * <og:mailSender 045 * subject 【TAG】タイトルを指定します 046 * from 【TAG】送信元(FROM)アドレスを指定します 047 * to 【TAG】送信先(TO)アドレスをCSV形式で指定します 048 * cc 【TAG】送信先(CC)アドレスをCSV形式で指定します 049 * bcc 【TAG】送信先(BCC)アドレスを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 */ 106public 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 か、ゼロ文字列か メールアドレス(ここでは、@ 文字を含むかどうかで判定)の場合、 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 がメールアドレスの場合、(ここでは、@ 文字を含むかどうかで判定)そのまま返します。 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】送信元(FROM)アドレスを指定します。 344 * 345 * @og.tag 送信元(FROM)アドレスを指定します。 346 * 347 * @param fromAdrs 送信元(FROM)アドレス 348 */ 349 public void setFrom( final String fromAdrs ) { 350 from = nval( getRequestParameter( fromAdrs ), from ); 351 } 352 353 /** 354 * 【TAG】送信先(TO)アドレスを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 送信先(TO)アドレス(CSV形式) 363 */ 364 public void setTo( final String toAdrs ) { 365 to = StringUtil.csv2ArrayOnly( getRequestParameter( toAdrs ) ); 366 } 367 368 /** 369 * 【TAG】送信先(CC)アドレスを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 送信先(CC)アドレス(CSV形式) 378 */ 379 public void setCc( final String ccAdrs ) { 380 cc = StringUtil.csv2ArrayOnly( getRequestParameter( ccAdrs ) ); 381 } 382 383 /** 384 * 【TAG】送信先(BCC)アドレスを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 送信先(BCC)アドレス(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) または、2文字目が、 479 * ":" (Windows)の場合は、指定のURLそのままのディレクトリに、そうでない場合は、 480 * fileURL = "{@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 * 上記アドレスに、@ を含む場合は、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を検索する場合、"担当者名"<メールアドレス>形式のメールアドレスを作成する 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 * 上記アドレスに、@ を含む場合は、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 * 引数のアドレス配列を社員マスタ(GE35)で変換して返します。 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でもGE35を扱う。 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}