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