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 */ 016 package org.opengion.fukurou.mail; 017 018 import org.opengion.fukurou.util.StringUtil ; 019 import org.opengion.fukurou.util.HybsEntry ; 020 import org.opengion.fukurou.util.Argument ; 021 import org.opengion.fukurou.util.FileString ; 022 023 import java.util.Map; 024 import java.util.LinkedHashMap; 025 026 import java.util.logging.Logger; 027 import java.util.logging.Level; 028 029 /** 030 * MailTransfer ã¯ã€?¼³??´?°ãƒ—ãƒãƒˆã‚³ãƒ«ã«ã‚ˆã‚‹ãƒ¡ãƒ¼ãƒ«é€ä¿¡ãƒ—ãƒã‚°ãƒ©ãƒ?§ã™ã? 031 * 032 * 引数ã«ã¯ã€host,from,to,cc,bcc,replyTo,subject,message,charset,file,debug,help ãŒæŒ‡å®šã§ãã¾ã™ã? 033 * 引数ã®ãƒ—ãƒãƒ‘テイã®ã‚ー部ã¯ã€å¤§æ–?—ã?å°æ–‡å—ãŒåŽ³æ ¼ã«é©ç”¨ã•れã¾ã™ã?ã§ã€æ£ç¢ºã«è¨˜è¿°é¡˜ã„ã¾ã™ã? 034 * 035 * java org.opengion.fukurou.fukurou.mail.MailTransfer 036 * -host=メールサーãƒã?(å¿??) 037 * -from=é€ä¿¡å…?‚¢ãƒ‰ãƒ¬ã‚¹(å¿??) 038 * -to=é€ä¿¡å…ˆã‚¢ãƒ‰ãƒ¬ã‚¹ã‚’カンマ区åˆ?‚Šã§ä¸¦ã¹ã‚?å¿??) 039 * -cc=関係è?アドレスをカンマ区åˆ?‚Šã§ä¸¦ã¹ã‚? 040 * -bcc=éš?—é€ä¿¡å…ˆã‚¢ãƒ‰ãƒ¬ã‚¹ã‚’カンマ区åˆ?‚Šã§ä¸¦ã¹ã‚? 041 * -replyTo=返信先アドレスをカンマ区åˆ?‚Šã§ä¸¦ã¹ã‚? 042 * -subject=タイトル 043 * -message=本æ–?‚’æ ¼ç´ã—ã¦ã?‚‹ãƒ•ァイルã®ã‚¢ãƒ‰ãƒ¬ã‚¹ 044 * -charset=メールé€ä¿¡æ™‚ã?ã‚ャラクタセãƒ?ƒˆ [ISO-2022-JP / Windows-31J] 045 * -fileXX=添付ファイルã®ãƒ•ァイルパス( XX ã¯è¤?•°ç™»éŒ²æ™‚ã?æ·»ãˆå?) 046 * -debug=メイラーã®ãƒ?ƒãƒ?‚°ãƒ¢ãƒ¼ãƒ‰ã‚’æŒ?®šã—ã¾ã™ã?[false / true] 047 * -help=使用方法を出力ã—ã¦ã€çµ‚äº?—ã¾ã™ã? 048 * -{@XXXX}=YYYY メãƒ?‚»ãƒ¼ã‚¸æœ¬æ–?? {@XXXX} æ–?—å?ã‚’ã?YYYY æ–?—å?ã«å¤‰æ›ã—ã¾ã™ã? 049 * {@ARG.XXX} 予ç´?–‡å—å¤‰æ› ä¸Šè¨˜å¼•æ•°ã‚’å‰²ã‚Šå½“ã¦ã¾ã™ã? 050 * {@DATE.XXX} 予ç´?–‡å—å¤‰æ› SimpleDateFormat å½¢å¼ã?æ–?—を変æ›ã—ã¾ã™ã?(日付ã?時刻ç? 051 * {@ENV.XXX} 予ç´?–‡å—å¤‰æ› ã‚·ã‚¹ãƒ?ƒ プãƒãƒ‘ãƒ†ã‚£ãƒ¼ã®æ–?—を変æ›ã—ã¾ã™ã?(java -Dkey=value オプション) 052 * 053 * E-Mail ã§æ—¥æœ¬èªžã‚’é€ä¿¡ã™ã‚‹å ´åˆã?ISO-2022-JP(JISコーãƒ?化ã—ã¦ã€?bit ã§ 054 * エンコードã—ã¦é€ä¿¡ã™ã‚‹å¿?¦ãŒã‚りã¾ã™ãŒã€Windowsç³»ã®ç‰¹æ®Šæ–‡å—ã‚„ã€unicode㨠055 * æ–?—ã?マッピングãŒç•°ãªã‚‹æ–‡å—ãªã©ãŒã?æ–?—化ã‘ã—ã¾ã™ã? 056 * 対応方法ã¨ã—ã¦ã¯ã€? 057 * ?‘.Windows-31J + 8bit é€ä¿¡ 058 * ?’.ISO-2022-JP ã«ç‹¬è‡ªå¤‰æ› + 7bit é€ä¿¡ 059 * ã®æ–¹æ³•ãŒã‚りã¾ã™ã? 060 * 今回ã€ã“ã®?’ã¤ã®æ–¹æ³•ã«ã¤ã?¦ã€charset ã§æŒ?®šã§ãã¾ã™ã? 061 * åˆæœŸå€¤ã¯ã€ISO-2022-JP ã§ã™ã? 062 * 063 * @version 4.0 064 * @author Kazuhiko Hasegawa 065 * @since JDK5.0, 066 */ 067 public class MailTransfer { 068 private static Logger logger = Logger.getLogger( "org.opengion.fukurou.fukurou.mail.MailTransfer" ); // 4.3.3.5 (2008/11/08) 069 070 /** メールé€ä¿¡æ™‚ã?ãƒ?ƒ•ォルトã‚ャラクタセãƒ?ƒˆ {@value} */ 071 public static final String CHARSET = "ISO-2022-JP" ; 072 073 /** メイラーã®åˆæœŸãƒ?ƒãƒ?‚°ãƒ¢ãƒ¼ãƒ?{@value} */ 074 public static final boolean DEBUG_MODE = false ; 075 076 private static final Map<String,String> mustProparty ; // å¿??パラメータ 077 private static final Map<String,String> usableProparty ; // æ•´åˆæ?ãƒã‚§ãƒ?‚¯ãƒ‘ラメータ 078 079 static { 080 mustProparty = new LinkedHashMap<String,String>(); 081 mustProparty.put( "host", "メールサーãƒã?(å¿??)" ); 082 mustProparty.put( "from", "é€ä¿¡å…?‚¢ãƒ‰ãƒ¬ã‚¹(å¿??)" ); 083 mustProparty.put( "to", "é€ä¿¡å…ˆã‚¢ãƒ‰ãƒ¬ã‚¹ã‚’カンマ区åˆ?‚Šã§ä¸¦ã¹ã‚?å¿??)" ); 084 085 usableProparty = new LinkedHashMap<String,String>(); 086 usableProparty.put( "cc", "関係è?アドレスをカンマ区åˆ?‚Šã§ä¸¦ã¹ã‚? ); 087 usableProparty.put( "bcc", "éš?—é€ä¿¡å…ˆã‚¢ãƒ‰ãƒ¬ã‚¹ã‚’カンマ区åˆ?‚Šã§ä¸¦ã¹ã‚? ); 088 usableProparty.put( "replyTo", "返信先アドレスをカンマ区åˆ?‚Šã§ä¸¦ã¹ã‚? ); 089 usableProparty.put( "subject", "タイトル" ); 090 usableProparty.put( "message", "本æ–?‚’æ ¼ç´ã—ã¦ã?‚‹ãƒ•ァイルã®ã‚¢ãƒ‰ãƒ¬ã‚¹" ); 091 usableProparty.put( "charset", "メールé€ä¿¡æ™‚ã?ã‚ャラクタセãƒ?ƒˆ [ISO-2022-JP / Windows-31J]" ); 092 usableProparty.put( "file", "添付ファイルã®ãƒ•ァイルパス( XX ã¯è¤?•°ç™»éŒ²æ™‚ã?æ·»ãˆå?)" ); 093 usableProparty.put( "{@", "{@XXXX}=YYYY メãƒ?‚»ãƒ¼ã‚¸æœ¬æ–?? {@XXXX} æ–?—å?ã‚’ã?YYYY æ–?—å?ã«å¤‰æ›ã—ã¾ã™ã?" ); 094 usableProparty.put( "{@ARG.", "{@ARG.XXX} 予ç´?–‡å—å¤‰æ› ä¸Šè¨˜å¼•æ•°ã‚’å‰²ã‚Šå½“ã¦ã¾ã™ã?" ); 095 usableProparty.put( "{@DATE.", "{@DATE.XXX} 予ç´?–‡å—å¤‰æ› SimpleDateFormat å½¢å¼ã?æ–?—を変æ›ã—ã¾ã™ã?(日付ã?時刻ç?" ); 096 usableProparty.put( "{@ENV.", "{@ENV.XXX} 予ç´?–‡å—å¤‰æ› ã‚·ã‚¹ãƒ?ƒ プãƒãƒ‘ãƒ†ã‚£ãƒ¼ã®æ–?—を変æ›ã—ã¾ã™ã?(java -Dkey=value オプション)" ); 097 usableProparty.put( "debug", "メイラーã®ãƒ?ƒãƒ?‚°ãƒ¢ãƒ¼ãƒ‰ã‚’æŒ?®šã—ã¾ã™ã?[false / true]" ); 098 usableProparty.put( "help", "使用方法を出力ã—ã¦ã€çµ‚äº?—ã¾ã™ã?" ); 099 } 100 101 /** 102 * トランスファーを開始ã—ã¾ã™ã? 103 * 104 * @og.rev 4.3.3.5 (2008/11/08) Argument オブジェクトã¸ã®å¼•æ•°ã‚?util â†?mail ã«è¨‚æ£ã—ã¾ã™ã? 105 * 106 * @param args 引数é…å? 107 */ 108 public void start( final String[] args ) { 109 110 // パラメータã®è§£æžã?å–å¾? 111 logger.fine( "パラメータã®è§£æžã?å–å¾? ); 112 Argument argment = new Argument( "org.opengion.fukurou.mail.MailTransfer" ); // 4.3.3.5 (2008/11/08) 113 argment.setMustProparty( mustProparty ); 114 argment.setUsableProparty( usableProparty ); 115 116 argment.setArgument( args ); 117 118 // help パラメータã?true ã«æŒ?®šã•れãŸå ´åˆã?処ç?? 119 if( argment.getProparty( "help",false ) ) { 120 System.out.println( argment.toString() ); 121 return; 122 } 123 124 String host = argment.getProparty( "host" ); 125 String chset = argment.getProparty( "charset", CHARSET ); 126 127 MailTX mail = new MailTX( host,chset ); 128 logger.fine( "org.opengion.fukurou.mail.MailTX ã®è¨å®? ); 129 130 mail.setFrom( argment.getProparty( "from" ) ); 131 mail.setTo( StringUtil.csv2Array( argment.getProparty( "to" ) ) ); 132 mail.setCc( StringUtil.csv2Array( argment.getProparty( "cc" ) ) ); 133 mail.setBcc( StringUtil.csv2Array( argment.getProparty( "bcc" ) ) ); 134 mail.setReplyTo( StringUtil.csv2Array( argment.getProparty( "replyTo" ) ) ); 135 mail.setSubject( argment.getProparty( "subject" ) ); 136 mail.setDebug( argment.getProparty( "debug", DEBUG_MODE ) ); 137 138 // message ã¯ã€æœ¬æ–?‚’æ ¼ç´ã—ã¦ã?‚‹ãƒ•ァイルåãŒæŒ?®šã•れã¦ã?¾ã™ã? 139 String msgFile = argment.getProparty( "message" ) ; 140 logger.fine( "本æ–?‚’æ ¼ç´ã—ã¦ã?‚‹ãƒ•ァイルã®å–å¾—ã?message=" + msgFile ); 141 if( msgFile != null ) { 142 FileString fs = new FileString(); 143 fs.setFilename( msgFile ); 144 String message = fs.getValue(); 145 146 // {@XXX} 変æ›ã¯ã€Argument ã‚¯ãƒ©ã‚¹ã®æ©Ÿè?を使ã?? 147 message = argment.changeParam( message ); 148 mail.setMessage( message ); 149 } 150 151 // 添付ファイルã¯ã€fileXX å½¢å¼ã§ã€è¤?•°æŒ?®šã•れã¦ã?¾ã™ã? 152 logger.fine( "添付ファイルをå–り込ã¿ã¾ã™ã?" ); 153 HybsEntry[] entry = argment.getEntrys( "file" ); 154 String[] files = new String[entry.length]; 155 for( int i=0; i<files.length; i++ ) { 156 files[i] = entry[i].getValue() ; 157 } 158 mail.setFilename( files ); 159 160 // é€ä¿¡ 161 logger.fine( "é€ä¿¡å‡¦ç?‚’行ã„ã¾ã™ã?" ); 162 mail.sendmail(); 163 } 164 165 /** 166 * main メソãƒ?ƒ‰ã§ã™ã? 167 * 168 * @param args 引数é…å? 169 */ 170 public static void main ( final String[] args ) { 171 MailTransfer transfer = new MailTransfer(); 172 try { 173 logger.info( "メールé€ä¿¡å‡¦ç?‚’é–‹å§‹ã—ã¾ã? ---------------------------------------------" ); 174 transfer.start( args ); 175 logger.info( "æ£å¸¸ã«çµ‚äº?—ã¾ã—ãŸã€? ); 176 } 177 catch( Throwable th ) { 178 String errMsg = "メールé€ä¿¡ä¸ã«ä¾‹å¤–ãŒç™ºç”Ÿã—ã¾ã—ãŸã€?"; 179 logger.log( Level.SEVERE,errMsg, th ); 180 throw new RuntimeException( errMsg,th ); // 4.0.0 (2005/01/31) 181 } 182 } 183 }