1 package jp.co.areaweb.tools.mail;
\r
4 import java.io.FileInputStream;
\r
5 import java.io.FileNotFoundException;
\r
6 import java.io.UnsupportedEncodingException;
\r
7 import java.util.Properties;
\r
8 import java.util.Vector;
\r
10 import javax.mail.Message;
\r
11 import javax.mail.MessagingException;
\r
12 import javax.mail.Session;
\r
13 import javax.mail.Transport;
\r
14 import javax.mail.Store;
\r
15 import javax.mail.internet.InternetAddress;
\r
16 import javax.mail.internet.MimeBodyPart;
\r
17 import javax.mail.internet.MimeMessage;
\r
18 import javax.mail.internet.MimeMultipart;
\r
19 import javax.mail.internet.MimeUtility;
\r
21 import jp.co.areaweb.tools.mail.SiteData;
\r
24 * Eメールを送信するためのクラス<br>
\r
26 * @see <a href="http://java.sun.com/products/javamail/javadocs/index.html">JavaMail API</a>
\r
29 * @version 2010/02/05 SMTPサーバーのポート番号指定を追加
\r
31 public class SendMail
\r
33 public static void main(java.lang.String[] args) {
\r
35 SendMail mail = new SendMail("yuumail.properties");
\r
36 mail.setSubject("[proxSafe] SendMail テスト");
\r
37 mail.setContent("本文\n");
\r
38 mail.setAttachment(new File("mail-1.4.jar"));
\r
41 catch (Exception e) {
\r
42 e.printStackTrace();
\r
46 protected Vector<String> toVector = new Vector<>(); // プロパティ 送信先(to) の値
\r
47 protected Vector<String> ccVector = new Vector<>(); // プロパティ 送信先(Cc) の値
\r
48 protected Vector<String> bccVector = new Vector<>(); // プロパティ 送信先(Bcc) の値
\r
49 protected String from = null; // プロパティ 発信元(from) の値
\r
50 protected String subject; // プロパティ 題名(subject) の値
\r
51 protected String content; // プロパティ 本文(content) の値
\r
52 protected String mailHost; // プロパティ SMTP(mail.smtp.host) の値
\r
53 protected String mailHostPort; // プロパティ SMTP_PORT(mail.smtp.port) の値
\r
55 protected Vector<File> attachments = new Vector<>(); // 添付ファイル
\r
56 protected Vector<String> attachNames = new Vector<>(); // 添付ファイル名
\r
58 protected boolean POP_before_SMTP = false;
\r
59 protected boolean USER_AUTH = false;
\r
60 protected String popServer = "";
\r
61 protected String userId = "";
\r
62 protected String password ="";
\r
63 protected Session session = null;
\r
66 * 新しい YuuMail インスタンスを作成する
\r
67 * @param propertyFile メール設定ファイルのパス名称
\r
69 public SendMail(String propertyFile) {
\r
70 this(new SiteData(propertyFile));
\r
75 * @param siteData メール設定値を包含したオブジェクト
\r
77 public SendMail(SiteData siteData) {
\r
80 if (!siteData.MAIL_SMTP.equals("")) {
\r
81 this.setMailHost(siteData.MAIL_SMTP);
\r
83 if (!siteData.MAIL_SMTP_PORT.equals("")) {
\r
84 this.setMailPort(siteData.MAIL_SMTP_PORT);
\r
86 if (!siteData.MAIL_TO.equals("")) {
\r
87 this.toVector.addElement(siteData.MAIL_TO);
\r
89 if (!siteData.MAIL_CC.equals("")) {
\r
90 this.ccVector.addElement(siteData.MAIL_CC);
\r
92 if (!siteData.MAIL_BCC.equals("")) {
\r
93 this.bccVector.addElement(siteData.MAIL_BCC);
\r
95 if (!siteData.MAIL_FROM.equals("")) {
\r
96 this.from = siteData.MAIL_FROM;
\r
99 this.POP_before_SMTP = siteData.POP_before_SMTP;
\r
100 this.USER_AUTH = siteData.USER_AUTH;
\r
101 this.popServer = siteData.MAIL_POP;
\r
102 this.userId = siteData.USER_ID;
\r
103 this.password = siteData.PASSWORD;
\r
106 // メール(MimeMessageオブジェクト)を生成する
\r
107 Properties props = System.getProperties();
\r
108 props.put("mail.smtp.host", getMailHost());
\r
109 props.put("mail.smtp.port", getMailPort());
\r
110 if (this.USER_AUTH) {
\r
111 props.put("mail.smtp.auth", "true");
\r
113 this.session = Session.getDefaultInstance(props, null);
\r
117 * プロパティ mailHost の取得メソッド。
\r
118 * @return プロパティ mailHost の値。
\r
120 public String getMailHost() {
\r
121 return this.mailHost;
\r
126 * @param mailHost SMTPサーバー名またはSMTPサーバーのIPアドレス
\r
128 public void setMailHost(String mailHost) {
\r
129 this.mailHost = mailHost;
\r
133 * プロパティ SMTPポート番号 の取得メソッド。
\r
134 * @return SMTPポート番号を表す文字列(デシマル)
\r
136 public String getMailPort() {
\r
137 return this.mailHostPort;
\r
142 * @param portStr SMTPポート番号を表す文字列(デシマル)
\r
144 public void setMailPort(String portStr) {
\r
145 this.mailHostPort = portStr;
\r
150 * @param to 送信先(To)
\r
152 public void setTo(String to) {
\r
153 if (!to.equals("")) {
\r
154 toVector.addElement(to);
\r
160 * @param cc 送信先(cc)
\r
162 public void setCc(String cc) {
\r
163 if (!cc.equals("")) {
\r
164 ccVector.addElement(cc);
\r
169 * 送信先(Bco)を設定.複数選択可
\r
170 * @param bcc 送信先(Bcc)
\r
172 public void setBcc(String bcc) {
\r
173 if (!bcc.equals("")) {
\r
174 bccVector.addElement(bcc);
\r
179 * プロパティ from の取得メソッド。
\r
180 * @return プロパティ from の値。
\r
182 public String getFrom() {
\r
187 * プロパティ 送信元(from) の設定メソッド。
\r
188 * @param from 送信元メールアドレス
\r
190 public void setFrom(String from) {
\r
195 * プロパティ subject の取得メソッド。
\r
196 * @return プロパティ subject の値。
\r
198 public String getSubject() {
\r
203 * プロパティ 題名(subject) の設定メソッド。
\r
205 * @param subject メールタイトル(題名)
\r
207 public void setSubject(String subject) {
\r
208 this.subject = subject;
\r
212 * 本文(content)の取得メソッド。
\r
215 public String getContent() {
\r
216 return this.content;
\r
220 * 本文(content)の設定メソッド。
\r
222 * @param content 本文(content)
\r
224 public void setContent(String content) {
\r
225 this.content = content;
\r
230 * 添付するファイル(attachment)を設定.添付ファイルは複数設定可。
\r
231 * @param attachment 添付するファイル(attachment)
\r
232 * @throws FileNotFoundException 添付するファイルが見つからなかった。
\r
234 @SuppressWarnings("resource")
\r
235 public void setAttachment(File attachment) throws FileNotFoundException {
\r
236 new FileInputStream(attachment); // ファイルが実存することをチェックする。
\r
237 attachments.addElement(attachment);
\r
238 attachNames.addElement(attachment.getName());
\r
243 * 添付するファイル(attachment)を設定.添付ファイルは複数設定可。
\r
244 * @param attachment 添付するファイル(attachment)
\r
245 * @param name 添付するファイルの表示名
\r
246 * @throws FileNotFoundException 添付するファイルが見つからなかった。
\r
248 @SuppressWarnings("resource")
\r
249 public void setAttachment(File attachment, String name) throws FileNotFoundException {
\r
250 new FileInputStream(attachment); // ファイルが実存することをチェックする。
\r
251 attachments.addElement(attachment);
\r
252 attachNames.addElement(name);
\r
257 * @throws MessagingException エラー:メールの送信に失敗しました。
\r
258 * @throws UnsupportedEncodingException エラー:メールの文字エンコードに失敗しました。
\r
260 public void send() throws MessagingException, UnsupportedEncodingException {
\r
261 //-------------------------
\r
262 // POP before SMTP 対応
\r
264 Store store = null;
\r
265 if (this.POP_before_SMTP == true) {
\r
266 System.out.println("store.connect("+ popServer +", '"+ userId +"', '"+ password +"')");
\r
267 store = this.session.getStore("pop3");
\r
268 store.connect(popServer, userId, password);
\r
271 System.out.println("no POP_before_SMTP!");
\r
274 MimeMessage message = createMessage();
\r
276 if (this.USER_AUTH) {
\r
277 System.out.println("transport.connect(null, '"+ userId +"', '"+ password+"')");
\r
278 Transport transport = this.session.getTransport("smtp");
\r
279 transport.connect(null, userId, password);
\r
280 transport.sendMessage(message, message.getAllRecipients());
\r
283 System.out.println("no SMTP_AUTH!");
\r
284 Transport.send(message);
\r
287 if (this.POP_before_SMTP == true) {
\r
293 * 新規にメールインスタンスを生成する。
\r
294 * @return メールインスタンス
\r
295 * @throws MessagingException メール送信に失敗しました。
\r
296 * @throws UnsupportedEncodingException 文字エンコーディングに失敗した。
\r
298 protected MimeMessage createMessage() throws MessagingException, UnsupportedEncodingException {
\r
299 MimeMessage msg = new MimeMessage(this.session);
\r
302 InternetAddress[] toList = new InternetAddress[toVector.size()];
\r
303 for (int i=0; i < toVector.size(); i++) {
\r
304 toList[i] = new InternetAddress(toVector.elementAt(i));
\r
306 msg.setRecipients(Message.RecipientType.TO, toList);
\r
309 InternetAddress[] ccList = new InternetAddress[ccVector.size()];
\r
310 for (int i=0; i < ccVector.size(); i++) {
\r
311 ccList[i] = new InternetAddress(ccVector.elementAt(i));
\r
313 msg.setRecipients(Message.RecipientType.CC, ccList);
\r
316 InternetAddress[] bccList = new InternetAddress[bccVector.size()];
\r
317 for (int i=0; i < bccVector.size(); i++) {
\r
318 bccList[i] = new InternetAddress(bccVector.elementAt(i));
\r
320 msg.setRecipients(Message.RecipientType.BCC, bccList);
\r
323 msg.setFrom(new InternetAddress(getFrom()));
\r
326 msg.setSubject(MimeUtility.encodeText(getSubject(), "iso-2022-jp", "B"));
\r
329 MimeMultipart naiyou = new MimeMultipart();
\r
330 msg.setContent(naiyou);
\r
332 MimeBodyPart honbun = new MimeBodyPart();
\r
333 honbun.setContent(getContent(), "text/plain; charset=\"iso-2022-jp\"");
\r
334 naiyou.addBodyPart(honbun);
\r
337 for (int i=0; i < attachments.size(); i++) {
\r
338 File attachFile = attachments.elementAt(i);
\r
339 MimeBodyPart tenpu = new MimeBodyPart();
\r
340 javax.activation.FileDataSource dfs = new javax.activation.FileDataSource(attachFile);
\r
341 javax.activation.DataHandler dh = new javax.activation.DataHandler(dfs);
\r
342 tenpu.setDataHandler(dh);
\r
343 tenpu.setFileName(attachNames.elementAt(i));
\r
344 naiyou.addBodyPart(tenpu);
\r