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