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