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 }