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.hayabusa.mail.MailPattern; 022import org.opengion.fukurou.db.DBUtil; 023import org.opengion.fukurou.mail.MailTX; 024import org.opengion.fukurou.util.StringUtil; 025import org.opengion.fukurou.util.ToString; // 6.1.1.0 (2015/01/17) 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; 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 * smtpPort 【TAG】SMTPポートをCSV形式で指定します(初期値:SMTP_PORT) // 5.8.1.1 (2014/11/14) 052 * authType 【TAG】認証方式 初期値:MAIL_SEND_AUTH // 5.8.1.1 (2014/11/14) 053 * authPort 【TAG】認証ポート 初期値:MAIL_SEND_AUTH_PORT // 5.8.1.1 (2014/11/14) 054 * authUser 【TAG】認証ユーザー 初期値:MAIL_SEND_AUTH_USER // 5.8.1.1 (2014/11/14) 055 * authPass 【TAG】認証パスワード 初期値:MAIL_SEND_AUTH_PASSWORD // 5.8.1.1 (2014/11/14) 056 * useSSL 【TAG】SSL接続[false/true] 初期値:MAIL_SEND_USE_SSL // 6.3.8.0 (2015/09/11) 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 * useDB 【TAG】メールアドレスをDB(GE35)を利用して取得するかどうか[true/false]を指定します(初期値:false) 064 * useHistory 【TAG】GE32,34に送信履歴を保存するかどうか[true/false]を指定します(初期値:USE_MAILSENDER_HISTORY) 065 * debug 【TAG】デバッグ情報を出力するかどうか[true/false]を指定します(初期値:false) 066 * > ... Body ... 067 * </og:mailSender> 068 * 069 * ●使用例 070 * <og:mailSender from="C00000" to="C99999" subject="{@SUBJECT}" > 071 * メール内容 072 * </og:mailSender > 073 * 074 * charset = キャラクタセット (例:Windows-31J , ISO-2022-JP) 075 * from = From 送信元 076 * to = To 送信先(複数登録可能) 077 * cc = Cc 送信先(複数登録可能) 078 * bcc = Bcc 送信先(複数登録可能) 079 * replyTo = ReplyTo 返信先先(複数登録可能) 080 * useLDAP = false/true メールアドレスをLDAPを利用して取得するかどうか 081 * ldapKey = "uid" アドレスを検索するキー(初期値:システムリソース C社員番号) 082 * ldapVals = "cn,mail" LDAP検索時の属性名。ひとつならアドレス。2つなら名前とアドレス 083 * host = SMTPサーバー名 084 * smtpPort = SMTPポート 初期値:SMTP_PORT // 5.8.1.1 (2014/11/14) 085 * authType = 認証方式 初期値:MAIL_SEND_AUTH // 5.8.1.1 (2014/11/14) 086 * authPort = 認証ポート 初期値:MAIL_SEND_AUTH_PORT // 5.8.1.1 (2014/11/14) 087 * authUser = 認証ユーザー 初期値:MAIL_SEND_AUTH_USER // 5.8.1.1 (2014/11/14) 088 * authPass = 認証パスワード 初期値:MAIL_SEND_AUTH_PASSWORD // 5.8.1.1 (2014/11/14) 089 * useSSL = SSL接続[false/true] 初期値:MAIL_SEND_USE_SSL // 6.3.8.0 (2015/09/11) 090 * subject = タイトル 091 * fileURL = 添付ファイルのセーブディレクトリ 092 * filename = 添付ファイル名(ローカルにセーブされたファイル名)(複数登録可能) 093 * debug = true/false; 094 * 095 * 複数登録可能な個所は、CSV形式で、複数登録できます。 096 * アドレス(from,to,cc,bcc,replyTo)は、『"名称" <メールアドレス>』形式が 097 * 指定できます。< と > で囲まれた範囲がメールアドレスになります。 098 * 名称には、漢字が使用できます。 099 * 100 * host は、システムパラメータ の COMMON_MAIL_SERVER 属性が初期値で設定されます。 101 * charset は、システムパラメータ の MAIL_DEFAULT_CHARSET 属性が初期値で設定されます。 102 * 103 * @og.group その他出力 104 * 105 * @version 4.0 106 * @author Kazuhiko Hasegawa 107 * @since JDK5.0, 108 */ 109public class MailSenderTag extends CommonTagSupport { 110 /** このプログラムのVERSION文字列を設定します。 {@value} */ 111 private static final String VERSION = "6.4.2.1 (2016/02/05)" ; 112 private static final long serialVersionUID = 642120160205L ; 113 114 private transient MailTX mail ; 115 private String host = HybsSystem.sys( "COMMON_MAIL_SERVER" ); 116 private String charset = HybsSystem.sys( "MAIL_DEFAULT_CHARSET" ); // 3.5.6.6 (2004/08/23) 117 private String from ; 118 private String[] to ; 119 private String[] cc ; 120 private String[] bcc ; 121 private String[] replyTo ; 122 private String subject ; 123 private String[] filename; 124 private String fileURL = HybsSystem.sys( "FILE_URL" ); 125 126 private String smtpPort= HybsSystem.sys( "SMTP_PORT" ); // 5.8.1.1 (2014/11/14) 127 private String authType= HybsSystem.sys( "MAIL_SEND_AUTH" ); // 5.8.1.1 (2014/11/14) 128 private String authPort= HybsSystem.sys( "MAIL_SEND_AUTH_PORT" ); // 5.8.1.1 (2014/11/14) 129 private String authUser= HybsSystem.sys( "MAIL_SEND_AUTH_USER" ); // 5.8.1.1 (2014/11/14) 130 private String authPass= HybsSystem.sys( "MAIL_SEND_AUTH_PASSWORD" ); // 5.8.1.1 (2014/11/14) 131 private boolean useSSL = HybsSystem.sysBool( "MAIL_SEND_USE_SSL" ); // 6.3.8.0 (2015/09/11) 132 private boolean useTLS = HybsSystem.sysBool( "MAIL_SEND_USE_STARTTLS" ); // 5.9.29.2 (2018/02/16) STARTTLS対応(キーワードをVer5 にあわせます) 133 134 private boolean useLDAP ; // 3.7.1.0 (2005/04/15) 135 // uid C社員番号 、employeeNumber 社員番号 136 private String ldapKey = HybsSystem.sys( "LDAP_MAILSEND_KEY" ); // 5.6.7.0 (2013/07/27) 137 private String ldapVals= HybsSystem.sys( "LDAP_MAILSEND_VALS" ); // 5.6.7.0 (2013/07/27) 138 139 private boolean useDB ; // 5.6.9.3 (2013/10/25) GE35からメールアドレスを取得 140 private final String DBID = HybsSystem.sys( "RESOURCE_DBID" ); 141 142 // 5.9.2.3 (2015/11/27) ログを残す設定 143 private boolean useHistory = HybsSystem.sysBool( "USE_MAILSENDER_HISTORY" ); 144 private String message; 145 146 /** 147 * デフォルトコンストラクター 148 * 149 * @og.rev 6.4.2.0 (2016/01/29) PMD refactoring. Each class should declare at least one constructor. 150 */ 151 public MailSenderTag() { super(); } // これも、自動的に呼ばれるが、空のメソッドを作成すると警告されるので、明示的にしておきます。 152 153 /** 154 * Taglibの開始タグが見つかったときに処理する doStartTag() を オーバーライドします。 155 * 156 * @og.rev 6.3.8.0 (2015/09/11) SSL接続するかどうかを指定するパラメータを追加します。 157 * @og.rev 5.9.29.2 (2018/02/16) STARTTLS対応(キーワードをVer5 にあわせます) 158 * 159 * @return 後続処理の指示( EVAL_BODY_BUFFERED ) 160 */ 161 @Override 162 public int doStartTag() { 163// mail = new MailTX( host,charset,smtpPort,authType,authPort,authUser,authPass,useSSL ); // 6.3.8.0 (2015/09/11) 164 mail = new MailTX( host,charset,smtpPort,authType,authPort,authUser,authPass,useTLS,useSSL ); // 5.9.29.2 (2014/11/14) 165 return EVAL_BODY_BUFFERED ; // Body を評価する。( extends BodyTagSupport 時) 166 } 167 168 /** 169 * Taglibのタグ本体を処理する doAfterBody() を オーバーライドします。 170 * 171 * @og.rev 3.1.1.0 (2003/03/28) ボディの内容を取得する処理を、CommonTagSupport で行う。 172 * @og.rev 5.9.2.3 (2015/11/27) messageをインスタンス変数に変更。 173 * 174 * @return 後続処理の指示(SKIP_BODY) 175 */ 176 @Override 177 public int doAfterBody() { 178 message = getBodyString(); // 5.9.2.3 179 180 mail.setMessage( message ); 181 182 return SKIP_BODY ; 183 } 184 185 /** 186 * Taglibの終了タグが見つかったときに処理する doEndTag() を オーバーライドします。 187 * 188 * @og.rev 3.1.1.2 (2003/04/04) Tomcat4.1 対応。release2() を doEndTag()で呼ぶ。 189 * @og.rev 3.7.1.0 (2005/04/15) LDAP検索 新規追加 190 * @og.rev 5.6.9.3 (2013/10/25) 送信後に履歴を残す(history追加)。mailSender2同様、ここがエラーでもメール送信は完了しているので注意。 191 * @og.rev 5.9.3.0 (2015/12/04) useHistory対応 192 * 193 * @return 後続処理の指示 194 */ 195 @Override 196 public int doEndTag() { 197 debugPrint(); // 4.0.0 (2005/02/28) 198 199 // 3.7.1.0 (2005/04/15) LDAP検索 新規追加 200 if( useLDAP ) { 201 final String[] vals = StringUtil.csv2Array( ldapVals ); 202 203 final LDAPSearch serch = new LDAPSearch(); 204 serch.setAttributes( vals ); 205 serch.init(); 206 207 from = setLDAPAddress( serch,from ); 208 to = setLDAPAddress( serch,to ); 209 cc = setLDAPAddress( serch,cc ); 210 bcc = setLDAPAddress( serch,bcc ); 211 replyTo = setLDAPAddress( serch,replyTo ); 212 } 213 else if( useDB ){ // 5.6.9.3 (2013/10/25) GE35からメールアドレスを取得 214 final String[] from_array = {from}; 215 from = getAddressArray( from_array )[0]; 216 to = getAddressArray( to ); 217 cc = getAddressArray( cc ); 218 bcc = getAddressArray( bcc ); 219 replyTo = getAddressArray( replyTo ); 220 } 221 222 mail.setFrom( from ); 223 mail.setTo( to ); 224 mail.setCc( cc ); 225 mail.setBcc( bcc ); 226 mail.setReplyTo( replyTo ); 227 mail.setSubject( subject ); 228 mail.setDebug( isDebug() ); 229 230 String[] temp = null; 231 if( filename != null && filename.length > 0 ) { 232 temp = new String[filename.length]; 233 final 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 // 5.9.2.3 (2015/11/27) 送信後に履歴を残す(history追加)。mailSender2同様、ここがエラーでもメール送信は完了しているので注意。 243 if( useHistory ){ 244 final MailModuleUtil mmu = new MailModuleUtil(); 245 mmu.setInitParams( sys("SYSTEM_ID"), from, to, cc, bcc, message, subject, getUserInfo("ID"), getGUIInfoAttri("KEY") ,temp ); // 5.9.3.0 246 mmu.commitMailDB(); 247 } 248 249 return EVAL_PAGE ; 250 } 251 252 /** 253 * タグリブオブジェクトをリリースします。 254 * キャッシュされて再利用されるので、フィールドの初期設定を行います。 255 * 256 * @og.rev 2.0.0.4 (2002/09/27) カスタムタグの release() メソッドを、追加 257 * @og.rev 3.1.1.2 (2003/04/04) Tomcat4.1 対応。release2() を doEndTag()で呼ぶ。 258 * @og.rev 3.7.1.0 (2005/04/15) LDAP検索 useLDAP,ldapKey,ldapVals 属性追加 259 * @og.rev 5.6.7.0 (2013/07/27) ldapKey,ldapValsの取得をリソースに変更 260 * @og.rev 5.6.9.3 (2013/10/25) useDB追加 261 * @og.rev 5.8.1.1 (2014/11/14) メール送信時認証追加。smtpPort,authPort,authType,authUser,authPass 262 * @og.rev 6.3.8.0 (2015/09/11) SSL接続するかどうかを指定するパラメータを追加します。 263 * @og.rev 5.6.9.3 (2013/10/25) 送信後に履歴を残す(history追加)。 264 * @og.rev 5.9.29.2 (2018/02/16) STARTTLS対応(キーワードをVer5 にあわせます) 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 = HybsSystem.sys( "LDAP_MAILSEND_KEY" ); // 5.6.7.0 (2013/07/27) 282 ldapVals = HybsSystem.sys( "LDAP_MAILSEND_VALS" ); // 5.6.7.0 (2013/07/27) 283 useDB = false; // 5.6.9.3 (2013/10/25) GE35からメールアドレスを取得 284 smtpPort = HybsSystem.sys( "SMTP_PORT" ); // 5.8.1.1 (2014/11/14) 285 authType = HybsSystem.sys( "MAIL_SEND_AUTH" ); // 5.8.1.1 (2014/11/14) 286 authPort = HybsSystem.sys( "MAIL_SEND_AUTH_PORT" ); // 5.8.1.1 (2014/11/14) 287 authUser = HybsSystem.sys( "MAIL_SEND_AUTH_USER" ); // 5.8.1.1 (2014/11/14) 288 authPass = HybsSystem.sys( "MAIL_SEND_AUTH_PASSWORD" ); // 5.8.1.1 (2014/11/14) 289 useHistory = HybsSystem.sysBool( "USE_MAILSENDER_HISTORY" ); // 5.9.2.3 (2015/11/27) 290 useTLS = HybsSystem.sysBool( "MAIL_SEND_USE_STARTTLS" ); // 5.9.29.2 (2018/02/16) 291 useSSL = HybsSystem.sysBool( "MAIL_SEND_USE_SSL" ); // 6.3.8.0 (2015/09/11) 292 message = null; // 5.9.2.3 (2015/11/27) 293 } 294 295 /** 296 * LDAP を利用したメールアドレスを設定し直します。 297 * 298 * LDAPより、ldapKeyをキーに、ldapVals を設定値として、読み込みます。 299 * 初期値は、ldapKeyは、uid(ユニークID) ldapValsは、cn,mail(名前、メールアドレス)となっています。 300 * from,to,cc,bcc,replyTo の設定値を、target にセットして、検索します。 301 * 通常、このメソッドは、useLDAP=true の場合に呼び出すように設定します。 302 * target が null か、ゼロ文字列か メールアドレス(ここでは、@ 文字を含むかどうかで判定)の場合、 303 * そのまま target を返します。 304 * 305 * @og.rev 3.7.1.0 (2005/04/15) LDAP検索 新規追加 306 * 307 * @param serch LDAPSearchオブジェクト 308 * @param target ldapKeyキーに対する設定値 309 * 310 * @return メールアドレス 311 * @see #setLDAPAddress( LDAPSearch serch, String[] targets ) 312 */ 313 private String setLDAPAddress( final LDAPSearch serch, final String target ) { 314 final String rtnAdrs ; 315 316 if( target != null && target.indexOf( '@' ) < 0 ) { 317 final List<String[]> list = serch.search( ldapKey + "=" + target ); 318 if( list.size() == 1 ) { 319 final String[] vals = list.get(0); 320 if( ldapVals.indexOf(',') < 0 ) { // 検索値が2つの場合でない 321 rtnAdrs = vals[0] ; // メールアドレスのみ 322 } 323 else { 324 rtnAdrs = vals[0] + "<" + vals[1] + ">" ; // "名前<aaaa@bbbb>" 形式 325 } 326 } 327 else { 328 final String errMsg = "LDAP検索の結果、メールアドレスが見つかりませんでした。" 329 + "設定値=[" + target + "] , 検索キー=[" + ldapKey + "] , 検索属性=[" 330 + ldapVals + "]" ; 331 throw new HybsSystemException( errMsg ); 332 } 333 } 334 else { 335 rtnAdrs = target; 336 } 337 338 return rtnAdrs ; 339 } 340 341 /** 342 * LDAP を利用した複数のメールアドレスを取得します。 343 * 344 * LDAPより、ldapKeyをキーに、ldapVals を設定値として、読み込みます。 345 * 初期値は、ldapKeyは、uid(ユニークID) ldapValsは、cn,mail(名前、メールアドレス)となっています。 346 * from,to,cc,bcc,replyTo の設定値を、target にセットして、検索します。 347 * 通常、このメソッドは、useLDAP=true の場合に呼び出すように設定します。 348 * target がメールアドレスの場合、(ここでは、@ 文字を含むかどうかで判定)そのまま返します。 349 * 350 * @og.rev 3.7.1.0 (2005/04/26) LDAP検索 新規追加 351 * 352 * @param serch LDAPSearchオブジェクト 353 * @param targets ldapKeyキーに対する設定値の配列 354 * 355 * @return 複数のメールアドレス配列 356 * @og.rtnNotNull 357 * @see #setLDAPAddress( LDAPSearch serch, String target ) 358 */ 359 private String[] setLDAPAddress( final LDAPSearch serch, final String[] targets ) { 360 // 6.1.1.0 (2015/01/17) 可変長引数でもnullは来る。 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 * 複数アドレスをCSV形式でセットできます。 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 * 複数アドレスをCSV形式でセットできます。 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 * 複数アドレスをCSV形式でセットできます。 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 * 複数アドレスをCSV形式でセットできます。 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 SystemData#COMMON_MAIL_SERVER}])。 444 * 445 * @og.tag メールサーバーを指定します。 446 * (初期値:システム定数のCOMMON_MAIL_SERVER[={@og.value 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) 複数ファイル指定方法を、重複リクエストからCSV形式に変更 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 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 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 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 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 * @og.rev 6.4.2.1 (2016/02/05) URLの最後に、"/" を追加する処理を廃止。 516 * 517 * @param url 添付ファイルのセーブディレクトリ 518 * @see org.opengion.hayabusa.common.SystemData#FILE_URL 519 */ 520 public void setFileURL( final String url ) { 521 final String furl = nval( getRequestParameter( url ),null ); 522 if( furl != null ) { 523 fileURL = StringUtil.urlAppend( fileURL,furl ); 524 } 525 } 526 527 /** 528 * 【TAG】メールアドレスをLDAPを利用して取得するかどうか[true/false]を指定します(初期値:false)。 529 * 530 * @og.tag 531 * LDAP のメールアドレスを取得する場合は、true をセットします。false の場合は、 532 * from,to,cc,bcc,replyTo の設定値がそのまま使用されます。 533 * 上記アドレスに、@ を含む場合は、LDAP を検索せず、メールアドレスとして 534 * そのまま使用します。LDAP の検索結果が存在しない場合は、不正なアドレスとして、 535 * エラーとします。 536 * 初期値は、false です。 537 * 538 * @og.rev 3.7.1.0 (2005/04/15) LDAP検索 新規追加 539 * 540 * @param useLDAP メールアドレスのLDAP利用 [true:利用する/false:利用しない] 541 */ 542 public void setUseLDAP( final String useLDAP ) { 543 this.useLDAP = nval( getRequestParameter( useLDAP ),this.useLDAP ); 544 } 545 546 /** 547 * 【TAG】アドレスを検索するキーを指定します(初期値:uid C社員番号)。 548 * 549 * @og.tag 550 * LDAP のメールアドレスを取得する場合の、検索するキーを指定します。 551 * from,to,cc,bcc,replyTo の設定値を、このキーにセットして、検索します。 552 * uid C社員番号 、employeeNumber 社員番号 などが考えられます。 553 * 初期値は、uid(C社員番号)です。 554 * このキーで複数の検索結果が得られた場合は、エラーとします。 555 * 556 * @og.rev 3.7.1.0 (2005/04/15) LDAP検索 新規追加 557 * 558 * @param ldapKey アドレスを検索するキー 559 */ 560 public void setLdapKey( final String ldapKey ) { 561 this.ldapKey = nval( getRequestParameter( ldapKey ),this.ldapKey ); 562 } 563 564 /** 565 * 【TAG】LDAP検索時の属性名を指定します(初期値:cn,mail)。 566 * 567 * @og.tag 568 * LDAPを検索する場合、"担当者名"<メールアドレス>形式のメールアドレスを作成する 569 * 場合、検索する属性値を指定します。 570 * ひとつならアドレス。2つなら名前とアドレスの順で指定されたと認識します。 571 * 572 * @og.rev 3.7.1.0 (2005/04/15) LDAP検索 新規追加 573 * 574 * @param ldapVals LDAP検索時の属性名 575 */ 576 public void setLdapVals( final String ldapVals ) { 577 this.ldapVals = nval( getRequestParameter( ldapVals ),this.ldapVals ); 578 } 579 580 /** 581 * 【TAG】メールアドレスをGE35を利用して取得するかどうか[true/false]を指定します(初期値:false)。 582 * 583 * @og.tag 584 * GE35からメールアドレスを取得する場合は、true をセットします。false の場合は、 585 * from,to,cc,bcc,replyTo の設定値がそのまま使用されます。 586 * 上記アドレスに、@ を含む場合は、DB を検索せず、メールアドレスとして 587 * そのまま使用します。DB の検索結果が存在しない場合は、不正なアドレスとして、 588 * エラーとします。 589 * useLDAPと同時に設定されている場合は、LDAP設定が優先されます。 590 * 初期値は、false です。 591 * 592 * @og.rev 5.6.9.3 (2013/10/25) 新規追加 593 * 594 * @param flag メールアドレスのGE35利用 [true:利用する/false:利用しない] 595 */ 596 public void setUseDB( final String flag ) { 597 useDB = nval( getRequestParameter( flag ),useDB ); 598 } 599 600 /** 601 * 【TAG】メール送信ポート番号をセットします 602 * (初期値:システム定数のSMTP_PORT[={@og.value SystemData#SMTP_PORT}])。 603 * 604 * @og.tag 605 * 初期値は、システム定数のSMTP_PORT を使用します。 606 * 607 * (初期値:システム定数のSMTP_PORT[={@og.value 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 * (初期値:システム定数のMAIL_SEND_AUTH[={@og.value SystemData#MAIL_SEND_AUTH}])。 620 * 621 * @og.tag 622 * 認証を行う場合は「POP_BEFORE_SMTP」または、「SMTP_AUTH」が指定できます。 623 * 認証時には認証ユーザと認証パスワードを設定する必要があります。 624 * 初期値は、システム定数のMAIL_SEND_AUTH を使用します。 625 * 626 * (初期値:システム定数のMAIL_SEND_AUTH[={@og.value SystemData#MAIL_SEND_AUTH}])。 627 * 628 * @og.rev 5.8.1.1 (2014/11/14) メール送信時認証「POP_BEFORE_SMTP」追加 629 * @og.rev 6.2.4.1 (2015/05/22) SMTP_AUTH 対応。「SMTP_AUTH」追加(コメントのみ修正) 630 * 631 * @param type 認証方式 632 */ 633 public void setAuthType( final String type ) { 634 authType = nval( getRequestParameter(type), authType ); 635 } 636 637 /** 638 * 【TAG】メール送信時認証ポートをセットします 639 * (初期値:システム定数のMAIL_SEND_AUTH_PORT[={@og.value SystemData#MAIL_SEND_AUTH_PORT}])。 640 * 641 * @og.tag 642 * 「POP_BEFORE_SMTP」認証を行う場合に、POPサーバーに接続するポート番号を指定します。 643 * 指定しない場合は、POP3デフォルトポートを使用します。 644 * 初期値は、システム定数のMAIL_SEND_AUTH_PORT を使用します。 645 * 646 * (初期値:システム定数のMAIL_SEND_AUTH_PORT[={@og.value SystemData#MAIL_SEND_AUTH_PORT}])。 647 * 648 * @og.rev 5.8.1.1 (2014/11/14) メール送信時認証「POP_BEFORE_SMTP」追加 649 * 650 * @param port 認証ポート 651 */ 652 public void setAuthPort( final String port ) { 653 authPort = nval( getRequestParameter(port), authPort ); 654 } 655 656 /** 657 * 【TAG】メール送信認証ユーザをセットします 658 * (初期値:システム定数のMAIL_SEND_AUTH_USER[={@og.value SystemData#MAIL_SEND_AUTH_USER}])。 659 * 660 * @og.tag 661 * 初期値は、システム定数のMAIL_SEND_AUTH_USER を使用します。 662 * 663 * (初期値:システム定数のMAIL_SEND_AUTH_USER[={@og.value SystemData#MAIL_SEND_AUTH_USER}])。 664 * 665 * @og.rev 5.8.1.1 (2014/11/14) メール送信時認証「POP_BEFORE_SMTP」追加 666 * 667 * @param user 認証ユーザ 668 */ 669 public void setAuthUser( final String user ) { 670 authUser = nval( getRequestParameter(user), authUser ); 671 } 672 673 /** 674 * 【TAG】メール送信認証パスワードをセットします 675 * (初期値:システム定数のMAIL_SEND_AUTH_PASSWORD[={@og.value SystemData#MAIL_SEND_AUTH_PASSWORD}])。 676 * 677 * @og.tag 678 * 初期値は、システム定数のMAIL_SEND_AUTH_PASSWORD を使用します。 679 * 680 * (初期値:システム定数のMAIL_SEND_AUTH_PASSWORD[={@og.value SystemData#MAIL_SEND_AUTH_PASSWORD}])。 681 * 682 * @og.rev 5.8.1.1 (2014/11/14) メール送信時認証「POP_BEFORE_SMTP」追加 683 * 684 * @param pass 認証パスワード 685 */ 686 public void setAuthPass( final String pass ) { 687 authPass = nval( getRequestParameter(pass), authPass ); 688 } 689 690 /** 691 * 【TAG】メール送信時のSTARTTLS利用の設定。 692 * 693 * @og.tag 694 * 初期値は、システム定数のMAIL_SEND_USE_STARTTLSを使用します。 695 * 696 * (初期値:システム定数のMAIL_SEND_AUTH_USER[={@og.value org.opengion.hayabusa.common.SystemData#MAIL_SEND_USE_STARTTLS}])。 697 * 698 * @og.rev 5.9.29.2 (2018/02/16) STARTTLS対応(キーワードをVer5 にあわせます) 699 * 700 * @param flag TLS利用有無 701 */ 702 public void setUseTLS( final String flag ) { 703 useTLS =nval( getRequestParameter( flag ),useTLS); 704 } 705 706 /** 707 * 【TAG】SSL接続するかどうかをセットします 708 * (初期値:システム定数のMAIL_SEND_USE_SSL[={@og.value SystemData#MAIL_SEND_USE_SSL}])。 709 * 710 * @og.tag 711 * SSL接続する場合は、true を設定します。 712 * (初期値:システム定数のMAIL_SEND_USE_SSL[={@og.value SystemData#MAIL_SEND_USE_SSL}])。 713 * 714 * @og.rev 6.3.8.0 (2015/09/11) SSL接続するかどうか 715 * 716 * @param isSSL SSL接続するかどうか [true:する/false:しない] 717 */ 718 public void setUseSSL( final String isSSL ) { 719 useSSL = nval( getRequestParameter(isSSL), useSSL ); 720 } 721 722 /** 723 * 【TAG】履歴に残すかどうかをセットします 724 * (初期値:システム定数のUSE_MAILSENDER_HISTORY[={@og.value SystemData#USE_MAILSENDER_HISTORY}])。 725 * 726 * @og.tag 727 * 初期値は、システム定数のUSE_MAILSENDER_HISTORY を使用します。 728 * trueを設定した場合、システムID、送信元アドレス、送信先アドレス、タイトル、本文について 729 * GE32,34に履歴として保存されます。 730 * 731 * (初期値:システム定数のUSE_MAILSENDER_HISTORY[={@og.value SystemData#USE_MAILSENDER_HISTORY}])。 732 * 733 * @og.rev 5.9.2.3 (2015/11/27) 追加 734 * 735 * @param flag 履歴に残すかどうか [true:残す/false:残さない] 736 */ 737 public void setUseHistory( final String flag ) { 738 useHistory = nval( getRequestParameter( flag ), useHistory ); 739 } 740 741 /** 742 * 引数のアドレス配列を社員マスタ(GE35)で変換して返します。 743 * グループIDは利用しません。 744 * 745 * @og.rev 5.6.9.3 (2013/10/25) 新規追加 746 * 747 * @param src 引数配列(可変長引数) 748 * 749 * @return 変換後アドレス配列 750 * @og.rtnNotNull 751 */ 752 public String[] getAddressArray( final String... src ){ 753 if( src == null || src.length == 0 ) { return src; } // 6.1.1.0 (2015/01/17) 可変長引数でもnullは来る。 754 755 String[] rtn= src.clone(); 756 757 for( int i=0; i<src.length; i++ ){ 758 String addr = src[i]; // 宛先ID 759 final String[] userAddr = getUserAddr( addr ); 760 if( userAddr != null && userAddr.length > 0 ){ 761 // 6.4.1.1 (2016/01/16) PMD refactoring. Avoid if (x != y) ..; else ..; 762 addr = userAddr[MailPattern.GE35_NAME] == null 763 ? userAddr[MailPattern.GE35_MAIL] 764 : userAddr[MailPattern.GE35_NAME] + "<" + userAddr[MailPattern.GE35_MAIL] + ">"; 765 766 rtn[i] = addr; 767 } 768 } 769 770 return rtn; 771 } 772 773 /** 774 * 社員マスタより名前、メールアドレスを取得します。 775 * 戻り値 rtn[0]:ユーザー名、 rtn[1]:ユーザーメールアドレス 776 * 777 * @og.rev 5.6.9.3 (2013/10/25) mailSenderでもGE35を扱う。 778 * @og.rev 6.4.1.1 (2016/01/16) selGE35 → SEL_GE35 refactoring 779 * 780 * @param userId ユーザーID 781 * 782 * @return 配列文字列(rtn[0]:ユーザー名、 rtn[1]:ユーザーメールアドレス) 783 */ 784 private String[] getUserAddr( final String userId ){ 785 String[] rtn = null; 786 787 if( userId.contains( "@" ) ) { 788 rtn = new String[2]; 789 rtn[0] = ""; 790 rtn[1] = userId; 791 } 792 else { 793 final String[] ge35SelArgs = { userId }; 794 final String[][] ge35Datas = DBUtil.dbExecute( MailPattern.SEL_GE35,ge35SelArgs,getApplicationInfo(), DBID ); // 6.4.1.1 (2016/01/16) selGE35 → SEL_GE35 refactoring 795 if( ge35Datas.length > 0) { 796 rtn = ge35Datas[0]; 797 } 798 else { 799 final String errMsg = "ユーザー情報取得できません。ユーザーID:" + userId ; 800 throw new HybsSystemException( errMsg ); 801 } 802 } 803 return rtn; 804 } 805 806 /** 807 * このオブジェクトの文字列表現を返します。 808 * 基本的にデバッグ目的に使用します。 809 * 810 * @og.rev 5.6.9.3 (2013/10/25) useDBの対応 811 * 812 * @return このクラスの文字列表現 813 * @og.rtnNotNull 814 */ 815 @Override 816 public String toString() { 817 return ToString.title( this.getClass().getName() ) 818 .println( "VERSION" ,VERSION ) 819 .println( "host" ,host ) 820 .println( "charset" ,charset ) 821 .println( "from" ,from ) 822 .println( "to" ,to ) 823 .println( "cc" ,cc ) 824 .println( "bcc" ,bcc ) 825 .println( "replyTo" ,replyTo ) 826 .println( "subject" ,subject ) 827 .println( "filename" ,filename ) 828 .println( "fileURL" ,fileURL ) 829 .println( "useLDAP" ,useLDAP ) 830 .println( "ldapKey" ,ldapKey ) 831 .println( "ldapVals" ,ldapVals ) 832 .println( "useDB" ,useDB ) // 5.6.9.3 (2013/10/25) 833 .println( "useHistory" ,useHistory ) // 5.9.2.3 (2015/11/27) 834 .println( "Other..." ,getAttributes().getAttribute() ) 835 .fixForm().toString() ; 836 } 837}