SendMail: add quotes around boundary type specification.
[cfb.git] / test / net / jaekl / qd / util / SendMailTest.java
1 package net.jaekl.qd.util;
2
3 import static org.junit.Assert.*;
4
5 import java.nio.charset.Charset;
6
7 import org.junit.Test;
8
9 public class SendMailTest {
10
11         @Test
12         public void testRfc821Samples() throws MailException {
13                 final String TYPICAL_INIT = "220 BBN-UNIX.ARPA Simple Mail Transfer Service Ready"; 
14                 final String[][] TYPICAL = {
15                                 {
16                                         "HELO ",
17                                         "250 BBN-UNIX.ARPA"
18                                 },
19                                 {
20                                         "MAIL FROM:",
21                                         "250 OK"
22                                 },
23                                 {
24                                         "RCPT TO:",
25                                         "250 OK"
26                                 },
27                                 {
28                                         "DATA",
29                                         "354 Start mail input; end with <CRLF>.<CRLF>"
30                                 },
31                                 {
32                                         ".\r\n",
33                                         "250 OK"
34                                 },
35                                 {
36                                         "QUIT",
37                                         "221 BBN-UNIX.ARPA Service closing transmission channel"
38                                 }
39                         };
40                 final String TYPICAL_SENT = 
41                                   "MAIL FROM: tarzan@jane.net\r\n"
42                                 + "RCPT TO: jane@jane.net\r\n"
43                                 + "DATA\r\n"
44                                 + "From: tarzan@jane.net\r\n"
45                                 + "To: jane@jane.net\r\n"
46                                 + "Subject: Me Tarzan, you Jane\r\n"
47                                 + "MIME-Version: 1.0\r\n"
48                                 + "Content-Type: multipart/mixed; boundary=\"snip_snip\"\r\n"
49                                 + "\r\n"
50                                 + "--snip_snip\r\n"
51                                 + "Content-Type: text/plain\r\n"
52                                 + "\r\n"
53                                 + "Tarzan like Jane\n"
54                                 + "Tarzan come see Jane soon\n"
55                                 + "\n"
56                                 + "Tarzan\r\n"
57                                 + "\r\n"
58                                 + "--snip_snip--\r\n"
59                                 + "\r\n.\r\n"
60                                 + "QUIT\r\n";
61                 final String HTML = 
62                                   "<HTML>\n"
63                 + "<HEAD>\n"
64                                 + "<TITLE>Me Tarzan; you Jane\n</TITLE>"
65                                 + "</HEAD>\n"
66                                 + "<BODY>\n"
67                                 + "<P>Tarzan like Jane.<BR/>Tarzan come see Jane soon.</P>\n"
68                                 + "<P>Tarzan</P>\n"
69                                 + "</BODY>\n"
70                                 + "</HTML>";
71                 final String HTML_SENT = 
72                                   "MAIL FROM: tarzan@jane.net\r\n"
73                                 + "RCPT TO: jane@jane.net\r\n"
74                                 + "DATA\r\n"
75                                 + "From: tarzan@jane.net\r\n"
76                                 + "To: jane@jane.net\r\n"
77                                 + "Subject: Me Tarzan, you Jane\r\n"
78                                 + "MIME-Version: 1.0\r\n"
79                                 + "Content-Type: multipart/mixed; boundary=\"snip_snip\"\r\n"
80                                 + "\r\n"
81                                 + "--snip_snip\r\n"
82                                 + "Content-Type: text/html\r\n"
83                                 + "\r\n"
84                 + HTML
85                                 + "\r\n\r\n--snip_snip--\r\n"
86                                 + "\r\n.\r\n"
87                                 + "QUIT\r\n";           
88
89                 // Try sending a plain-text email
90                 {
91                         SmtpConversationMock conversat = new SmtpConversationMock(TYPICAL_INIT, TYPICAL);
92                         SendMailMock smm = new SendMailMock(conversat);
93                         
94                         smm.setFrom("tarzan@jane.net");
95                         smm.addTo("jane@jane.net");
96                         smm.setSubject("Me Tarzan, you Jane");
97                         
98                         MimePart part = new MimePart("text/plain", "Tarzan like Jane\nTarzan come see Jane soon\n\nTarzan");
99                         smm.addPart(part);
100                         
101                         smm.send();
102                         
103                         OutputStreamMock osm = conversat.getOutputStream();
104                         String result = osm.mock_getContent(Charset.forName(FileMock.UTF_8));
105                         
106                         int pos = result.indexOf("\r\n");
107                         assertTrue(pos > 0);
108                         String afterHELO = result.substring(pos + 2);
109                         
110                         assertTrue(result.startsWith("HELO "));
111                         assertEquals(TYPICAL_SENT, afterHELO);
112                 }
113                 
114                 // Try sending an HTML email
115                 {
116                         SmtpConversationMock conversat = new SmtpConversationMock(TYPICAL_INIT, TYPICAL);
117                         SendMailMock smm = new SendMailMock(conversat);
118                         
119                         smm.setFrom("tarzan@jane.net");
120                         smm.addTo("jane@jane.net");
121                         smm.setSubject("Me Tarzan, you Jane");
122                         
123                         MimePart part = new MimePart("text/html", HTML);
124                         smm.addPart(part);
125                         
126                         smm.send();
127                         
128                         OutputStreamMock osm = conversat.getOutputStream();
129                         String result = osm.mock_getContent(Charset.forName(FileMock.UTF_8));
130                         
131                         int pos = result.indexOf("\r\n");
132                         assertTrue(pos > 0);
133                         String afterHELO = result.substring(pos + 2);
134                         
135                         assertTrue(result.startsWith("HELO "));
136                         assertEquals(HTML_SENT, afterHELO);
137                 }
138         }
139 }