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 * Usage: 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 }