1 package com.ozacc.mail.impl;
\r
3 import java.io.UnsupportedEncodingException;
\r
4 import java.util.Iterator;
\r
6 import javax.mail.internet.MimeUtility;
\r
8 import junit.framework.TestCase;
\r
10 import org.apache.log4j.BasicConfigurator;
\r
12 import com.dumbster.smtp.SimpleSmtpServer;
\r
13 import com.dumbster.smtp.SmtpMessage;
\r
14 import com.ozacc.mail.Mail;
\r
15 import com.ozacc.mail.MailException;
\r
18 * SendMailImplクラスのテストケース。
\r
20 * Dumbsterを使用してテストしているが、サポートされていない機能が多い。
\r
22 * @author Tomohiro Otsuka
\r
23 * @version $Id: SendMailImplTest.java,v 1.3 2004/09/14 00:06:13 otsuka Exp $
\r
25 public class SendMailImplTest extends TestCase {
\r
27 private SendMailImpl sendMail;
\r
29 private SimpleSmtpServer server;
\r
32 * @see TestCase#setUp()
\r
34 protected void setUp() throws Exception {
\r
37 BasicConfigurator.configure();
\r
40 server = SimpleSmtpServer.start(port);
\r
41 sendMail = new SendMailImpl();
\r
42 sendMail.setPort(port);
\r
46 * @see junit.framework.TestCase#tearDown()
\r
48 protected void tearDown() throws Exception {
\r
49 BasicConfigurator.resetConfiguration();
\r
52 private String convertJisValue(String str) throws UnsupportedEncodingException {
\r
53 return new String(str.getBytes(), "JIS");
\r
61 public void testSendMail() throws Exception {
\r
62 String from = "from@example.com";
\r
63 String fromName = "差出人";
\r
64 String to = "info@example.com";
\r
65 String subject = "件名";
\r
66 String text = "テスト成功";
\r
68 Mail mail = new Mail();
\r
69 mail.setFrom(from, fromName);
\r
71 mail.setSubject(subject);
\r
74 sendMail.send(mail);
\r
78 assertEquals("1", 1, server.getReceievedEmailSize());
\r
79 Iterator inbox = server.getReceivedEmail();
\r
80 SmtpMessage email = (SmtpMessage)inbox.next();
\r
82 assertEquals("2", mail.getTo()[0].toString(), email.getHeaderValue("To"));
\r
83 assertEquals("3", mail.getFrom().toString(), email.getHeaderValue("From"));
\r
85 assertEquals("4", mail.getSubject(), MimeUtility
\r
86 .decodeText(email.getHeaderValue("Subject")));
\r
87 assertEquals("5", mail.getText() + "\n", convertJisValue(email.getBody()));
\r
92 * 同一接続内の複数メッセージを送信するとDumbsterがエラーを吐くので、
\r
93 * とりあえず1つのMailインスタンスの配列でテスト。
\r
94 * 実際のSMTPサーバ(qmail)で正常に送信できることは確認済み。
\r
98 public void testSendMailMultiple() throws Exception {
\r
99 String from = "from@example.com";
\r
100 String fromName = "差出人";
\r
101 String to = "info@example.com";
\r
102 String subject = "件名";
\r
103 String text = "テスト成功";
\r
105 Mail mail1 = new Mail();
\r
106 mail1.setFrom(from, fromName);
\r
108 mail1.setSubject(subject);
\r
109 mail1.setText(text);
\r
111 Mail mail2 = new Mail();
\r
112 mail2.setFrom(from, fromName);
\r
114 mail2.setSubject(subject);
\r
115 mail2.setText(text);
\r
117 Mail mail3 = new Mail();
\r
118 mail3.setFrom(from, fromName);
\r
120 mail3.setSubject(subject);
\r
121 mail3.setText(text);
\r
123 // Dumbsterのバグが直ったら、mail1, mail2, mail3 を含めてテスト
\r
124 sendMail.send(new Mail[] { mail1 });
\r
128 // Dumbsterのバグが直ったら、3 に。
\r
129 assertEquals("1", 1, server.getReceievedEmailSize());
\r
131 Iterator inbox = server.getReceivedEmail();
\r
132 SmtpMessage email = (SmtpMessage)inbox.next();
\r
134 assertEquals("2", mail1.getTo()[0].toString(), email.getHeaderValue("To"));
\r
135 assertEquals("3", mail1.getFrom().toString(), email.getHeaderValue("From"));
\r
137 assertEquals("4", mail1.getSubject(), MimeUtility.decodeText(email
\r
138 .getHeaderValue("Subject")));
\r
139 assertEquals("5", mail1.getText() + "\n", convertJisValue(email.getBody()));
\r
142 public void testSendMailWithReturnPath() throws Exception {
\r
143 String from = "from@example.com";
\r
144 String fromName = "差出人";
\r
145 String to = "info@example.com";
\r
146 String subject = "件名";
\r
147 String text = "テスト成功";
\r
148 String returnPath = "return-path@example.com";
\r
150 Mail mail = new Mail();
\r
151 mail.setFrom(from, fromName);
\r
153 mail.setSubject(subject);
\r
154 mail.setText(text);
\r
155 mail.setReturnPath(returnPath);
\r
156 mail.setImportance(Mail.Importance.HIGH);
\r
158 sendMail.send(mail);
\r
162 assertEquals(1, server.getReceievedEmailSize());
\r
163 Iterator inbox = server.getReceivedEmail();
\r
164 SmtpMessage email = (SmtpMessage)inbox.next();
\r
168 Iterator itr = email.getHeaderNames();
\r
169 while (itr.hasNext()) {
\r
170 String name = (String)itr.next();
\r
171 System.out.println(name + "='" + email.getHeaderValue(name) + "'");
\r
175 // Dumbsterでは、Return-Pathヘッダを保持していない
\r
176 //assertEquals(mail.getReturnPath().toString(), email.getHeaderValue("Return-Path"));
\r
178 assertEquals(mail.getImportance(), email.getHeaderValue("Importance"));
\r
179 assertEquals("1", email.getHeaderValue("X-Priority"));
\r
183 * 宛先を一件も指定していないためsend()時に例外をスロー。
\r
184 * To、Cc、Bccを一件でも指定すれば、この例外は起こらない。
\r
186 * @throws Exception
\r
188 public void testSendMailNoRecpient() throws Exception {
\r
189 String from = "from@example.com";
\r
190 String fromName = "差出人";
\r
191 String subject = "件名";
\r
192 String text = "テスト成功";
\r
194 Mail mail = new Mail();
\r
195 mail.setFrom(from, fromName);
\r
196 mail.setSubject(subject);
\r
197 mail.setText(text);
\r
200 sendMail.send(mail);
\r
201 fail("This should never be called.");
\r
202 } catch (MailException expected) {
\r
203 assertEquals("MimeMessageの生成に失敗しました。", expected.getMessage());
\r