java开发_STMP邮箱客户端_发送邮件
这里有一些常见的主流邮箱的收取和发送pop3,stmp服务配置总汇
http://zhiwenweb.cn/jszx/czxt/201009/20179.html
这里只讨论邮件的发送。
1.qq邮箱的stmp服务配置
如果你没有开启stmp服务的话,你使用stmp的时候,管理员会发这样一封邮件到你的邮箱:
********************************************************************
尊敬的QQ邮箱用户:
我们发现您尝试设置SMTP服务,但设置未成功。 您可以检查以下的细节来解决:
您是否在邮箱中开启了这项服务,如果尚未开启,请您在【邮箱设置】的【帐号】中开启相关服务。
您是否设置了邮箱独立密码,如果您设置了独立密码,在客户端设置时,密码输入项需填写邮箱独立密码。
其他可能对您有用的帮助信息:
POP3/SMTP服务设置帮助
QQ邮箱管理员
********************************************************************
MailMessage.java
1 package com.b510.mail; 2 3 /** 4 * 邮件信息 5 * 6 * @author Hongten 7 * 8 */ 9 public class MailMessage { 10 /** 11 * 发件人 12 */ 13 private String from; 14 /** 15 * 收件人 16 */ 17 private String to; 18 /** 19 * 发件人,在邮件的发件人栏目中显示 20 */ 21 private String datafrom; 22 /** 23 * 收件人,在邮件的收件人栏目中显示 24 */ 25 private String datato; 26 /** 27 * 邮件主题 28 */ 29 private String subject; 30 /** 31 * 邮件内容 32 */ 33 private String content; 34 /** 35 * 发送日期 36 */ 37 private String date; 38 /** 39 * 登陆邮箱的用户名 40 */ 41 private String user; 42 /** 43 * 登陆邮箱的密码 44 */ 45 private String password; 46 47 /** 48 * 获取发件人 49 * 50 * @return 发件人 51 */ 52 public String getFrom() { 53 return from; 54 } 55 56 /** 57 * 设置发件人 58 * 59 * @param from 60 * 发件人 61 */ 62 public void setFrom(String from) { 63 this.from = from; 64 } 65 66 /** 67 * 获取收件人 68 * 69 * @return 收件人 70 */ 71 public String getTo() { 72 return to; 73 } 74 75 /** 76 * 设置收件人 77 * 78 * @param to 79 * 收件人 80 */ 81 public void setTo(String to) { 82 this.to = to; 83 } 84 85 /** 86 * 获取发件人,在邮件的发件人栏目中显示 87 * 88 * @return 发件人,在邮件的发件人栏目中显示 89 */ 90 public String getDatafrom() { 91 return datafrom; 92 } 93 94 /** 95 * 设置发件人,在邮件的发件人栏目中显示 96 * 97 * @param datafrom 98 * 发件人,在邮件的发件人栏目中显示 99 */ 100 public void setDatafrom(String datafrom) { 101 this.datafrom = datafrom; 102 } 103 104 /** 105 * 获取收件人,在邮件的收件人栏目中显示 106 * 107 * @return 收件人,在邮件的收件人栏目中显示 108 */ 109 public String getDatato() { 110 return datato; 111 } 112 113 /** 114 * 设置收件人,在邮件的收件人栏目中显示 115 * 116 * @param datato 117 * 收件人,在邮件的收件人栏目中显示 118 */ 119 public void setDatato(String datato) { 120 this.datato = datato; 121 } 122 123 /** 124 * 获取邮件主题 125 * 126 * @return 邮件主题 127 */ 128 public String getSubject() { 129 return subject; 130 } 131 132 /** 133 * 设置邮件主题 134 * 135 * @param subject 136 * 邮件主题 137 */ 138 public void setSubject(String subject) { 139 this.subject = subject; 140 } 141 142 /** 143 * 获取邮件内容 144 * 145 * @return 邮件内容 146 */ 147 public String getContent() { 148 return content; 149 } 150 151 /** 152 * 设置邮件内容 153 * 154 * @param content 155 * 邮件内容 156 */ 157 public void setContent(String content) { 158 this.content = content; 159 } 160 161 /** 162 * 获取发送日期 163 * 164 * @return 发送日期 165 */ 166 public String getDate() { 167 return date; 168 } 169 170 /** 171 * 设置发送日期 172 * 173 * @param date 174 * 发送日期 175 */ 176 public void setDate(String date) { 177 this.date = date; 178 } 179 180 /** 181 * 获取登陆邮箱的用户名 182 * 183 * @return 登陆邮箱的用户名 184 */ 185 public String getUser() { 186 return user; 187 } 188 189 /** 190 * 设置登陆邮箱的用户名 191 * 192 * @param user 193 * 登陆邮箱的用户名 194 */ 195 public void setUser(String user) { 196 this.user = user; 197 } 198 199 /** 200 * 获取登陆邮箱的密码 201 * 202 * @return 登陆邮箱的密码 203 */ 204 public String getPassword() { 205 return password; 206 } 207 208 /** 209 * 设置登陆邮箱的密码 210 * 211 * @param password 212 * 登陆邮箱的密码 213 */ 214 public void setPassword(String password) { 215 this.password = password; 216 } 217 218 }
开启服务后,这时候我们就可以有stmp服务了。
1 /*
2 * To change this template, choose Tools | Templates
3 * and open the template in the editor.
4 */
5 package com.b510.mail;
6
7 import java.io.BufferedReader;
8 import java.io.BufferedWriter;
9 import java.io.IOException;
10 import java.io.InputStreamReader;
11 import java.io.OutputStreamWriter;
12 import java.net.Socket;
13 import java.net.SocketException;
14 import java.net.UnknownHostException;
15 import java.util.StringTokenizer;
16
17 import sun.misc.BASE64Encoder;
18
19 /**
20 * STMP邮箱客户端,用于邮件发送和接收的管理
21 * @author hongten
22 */
23 public class SMTPClient {
24
25 static String from_mail="134******@qq.com";
26 static String to_mail="hongtenzone@foxmail.com";
27 static String server_mail="smtp.qq.com";
28 static String subject_mail="test";
29 static String content_mail="hello,this is a test mail,i'm hongten.\n你好,这是一封测试邮件,我是hongten";
30 static String datafrom_mail=from_mail;
31 static String datato_mail=to_mail;
32 static String user_mail="134******";
33 static String password_mail="********";
34
35
36
37 private boolean debug = true;
38 BASE64Encoder encode = new BASE64Encoder();//用于加密后发送用户名和密码
39
40 public static void main(String[] args) throws UnknownHostException, IOException {
41 MailMessage message = new MailMessage();
42 message.setFrom(from_mail);//发件人
43 message.setTo(to_mail);//收件人
44 String server = server_mail;//邮件服务器
45 message.setSubject(subject_mail);//邮件主题
46 message.setContent(content_mail);//邮件内容
47 message.setDatafrom(datafrom_mail);//发件人,在邮件的发件人栏目中显示
48 message.setDatato(datato_mail);//收件人,在邮件的收件人栏目中显示
49 message.setUser(user_mail);//登陆邮箱的用户名
50 message.setPassword(password_mail);//登陆邮箱的密码
51
52 SMTPClient smtp = new SMTPClient(server, 25);
53
54 boolean flag;
55 flag = smtp.sendMail(message, server);
56
57 if (flag) {
58 System.out.println("邮件发送成功!");
59 } else {
60 System.out.println("邮件发送失败!");
61 }
62 }
63 private Socket socket;
64
65 public SMTPClient(String server, int port) throws UnknownHostException, IOException {
66 try {
67 socket = new Socket(server, 25);
68 } catch (SocketException e) {
69 System.out.println(e.getMessage());
70 } catch (Exception e) {
71 e.printStackTrace();
72 } finally {
73 System.out.println("已经建立连接!");
74 }
75 }
76
77 //注册到邮件服务器
78 public void helo(String server, BufferedReader in, BufferedWriter out) throws IOException {
79 int result;
80 result = getResult(in);
81
82 //连接上邮件服务后,服务器给出220应答
83 if (result != 220) {
84 throw new IOException("连接服务器失败");
85 }
86
87 result = sendServer("HELO " + server, in, out);
88
89 //HELO命令成功后返回250
90 if (result != 250) {
91 throw new IOException("注册邮件服务器失败!");
92 }
93 }
94
95 private int sendServer(String str, BufferedReader in, BufferedWriter out) throws IOException {
96 out.write(str);
97 out.newLine();
98 out.flush();
99
100 if (debug) {
101 System.out.println("已发送命令:" + str);
102 }
103
104 return getResult(in);
105 }
106
107 public int getResult(BufferedReader in) {
108 String line = "";
109
110 try {
111 line = in.readLine();
112 if (debug) {
113 System.out.println("服务器返回状态:" + line);
114 }
115 } catch (Exception e) {
116 e.printStackTrace();
117 }
118
119 //从服务器返回消息中读出状态码,将其转换成整数返回
120 StringTokenizer st = new StringTokenizer(line, " ");
121
122 return Integer.parseInt(st.nextToken());
123 }
124
125 public void authLogin(MailMessage message, BufferedReader in, BufferedWriter out) throws IOException {
126 int result;
127 result = sendServer("AUTH LOGIN", in, out);
128
129 if (result != 334) {
130 throw new IOException("用户验证失败!");
131 }
132 result = sendServer(encode.encode(message.getUser().getBytes()), in, out);
133
134 if (result != 334) {
135 throw new IOException("用户名错误!");
136 }
137 result = sendServer(encode.encode(message.getPassword().getBytes()), in, out);
138
139 if (result != 235) {
140 throw new IOException("验证失败!");
141 }
142 }
143
144 //开始发送消息,邮件源地址
145 public void mailfrom(String source, BufferedReader in, BufferedWriter out) throws IOException {
146 int result;
147 result = sendServer("MAIL FROM:<" + source + ">", in, out);
148
149 if (result != 250) {
150 throw new IOException("指定源地址错误");
151 }
152 }
153
154 // 设置邮件收件人
155 public void rcpt(String touchman, BufferedReader in, BufferedWriter out) throws IOException {
156 int result;
157 result = sendServer("RCPT TO:<" + touchman + ">", in, out);
158
159 if (result != 250) {
160 throw new IOException("指定目的地址错误!");
161 }
162 }
163
164 //邮件体
165 public void data(String from, String to, String subject, String content, BufferedReader in, BufferedWriter out) throws IOException {
166 int result;
167 result = sendServer("DATA", in, out);
168
169 //输入date回车后,若收到354应答后,继续输入邮件内容
170 if (result != 354) {
171 throw new IOException("不能发送数据");
172 }
173
174 out.write("From: " + from);
175 out.newLine();
176 out.write("To: " + to);
177 out.newLine();
178 out.write("Subject: " + subject);
179 out.newLine();
180 out.newLine();
181 out.write(content);
182 out.newLine();
183
184 //句点加回车结束邮件内容输入
185 result = sendServer(".", in, out);
186 System.out.println(result);
187
188 if (result != 250) {
189 throw new IOException("发送数据错误");
190 }
191 }
192
193 //退出
194 public void quit(BufferedReader in, BufferedWriter out) throws IOException {
195 int result;
196 result = sendServer("QUIT", in, out);
197
198 if (result != 221) {
199 throw new IOException("未能正确退出");
200 }
201 }
202
203 //发送邮件主程序
204 public boolean sendMail(MailMessage message, String server) {
205 try {
206 BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
207 BufferedWriter out = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
208 helo(server, in, out);//helo
209 authLogin(message, in, out);//auth login
210 mailfrom(message.getFrom(), in, out);//mail from
211 rcpt(message.getTo(), in, out);//rcpt to
212 data(message.getDatafrom(), message.getDatato(), message.getSubject(), message.getContent(), in, out);//DATA
213 quit(in, out);//quit
214 } catch (Exception e) {
215 e.printStackTrace();
216 return false;
217 }
218 return true;
219 }
220 }
运行效果:
http://www.cnblogs.com/hongten/gallery/image/113731.html
2.sina邮箱的stmp服务配置
1 package com.b510.mail;
2
3 import java.io.BufferedReader;
4 import java.io.BufferedWriter;
5 import java.io.IOException;
6 import java.io.InputStreamReader;
7 import java.io.OutputStreamWriter;
8 import java.net.Socket;
9 import java.net.SocketException;
10 import java.net.UnknownHostException;
11 import java.util.StringTokenizer;
12
13 import sun.misc.BASE64Encoder;
14
15 /**
16 * STMP邮箱客户端,用于邮件发送和接收的管理
17 * @author hongten
18 */
19 public class SMTPClient {
20
21 static String from_mail="hongtenzone@sina.com";
22 static String to_mail="hongtenzone@foxmail.com";
23 static String server_mail="smtp.sina.com";
24 static String subject_mail="test";
25 static String content_mail="hello,this is a test mail,i'm hongten.\n你好,这是一封测试邮件,我是hongten";
26 static String datafrom_mail=from_mail;
27 static String datato_mail=to_mail;
28 static String user_mail="hongtenzone";
29 static String password_mail="**********";
30
31
32
33 private boolean debug = true;
34 BASE64Encoder encode = new BASE64Encoder();//用于加密后发送用户名和密码
35
36 public static void main(String[] args) throws UnknownHostException, IOException {
37 MailMessage message = new MailMessage();
38 message.setFrom(from_mail);//发件人
39 message.setTo(to_mail);//收件人
40 String server = server_mail;//邮件服务器
41 message.setSubject(subject_mail);//邮件主题
42 message.setContent(content_mail);//邮件内容
43 message.setDatafrom(datafrom_mail);//发件人,在邮件的发件人栏目中显示
44 message.setDatato(datato_mail);//收件人,在邮件的收件人栏目中显示
45 message.setUser(user_mail);//登陆邮箱的用户名
46 message.setPassword(password_mail);//登陆邮箱的密码
47
48 SMTPClient smtp = new SMTPClient(server, 25);
49
50 boolean flag;
51 flag = smtp.sendMail(message, server);
52
53 if (flag) {
54 System.out.println("邮件发送成功!");
55 } else {
56 System.out.println("邮件发送失败!");
57 }
58 }
59 private Socket socket;
60
61 public SMTPClient(String server, int port) throws UnknownHostException, IOException {
62 try {
63 socket = new Socket(server, 25);
64 } catch (SocketException e) {
65 System.out.println(e.getMessage());
66 } catch (Exception e) {
67 e.printStackTrace();
68 } finally {
69 System.out.println("已经建立连接!");
70 }
71 }
72
73 //注册到邮件服务器
74 public void helo(String server, BufferedReader in, BufferedWriter out) throws IOException {
75 int result;
76 result = getResult(in);
77
78 //连接上邮件服务后,服务器给出220应答
79 if (result != 220) {
80 throw new IOException("连接服务器失败");
81 }
82
83 result = sendServer("HELO " + server, in, out);
84
85 //HELO命令成功后返回250
86 if (result != 250) {
87 throw new IOException("注册邮件服务器失败!");
88 }
89 }
90
91 private int sendServer(String str, BufferedReader in, BufferedWriter out) throws IOException {
92 out.write(str);
93 out.newLine();
94 out.flush();
95
96 if (debug) {
97 System.out.println("已发送命令:" + str);
98 }
99
100 return getResult(in);
101 }
102
103 public int getResult(BufferedReader in) {
104 String line = "";
105
106 try {
107 line = in.readLine();
108 if (debug) {
109 System.out.println("服务器返回状态:" + line);
110 }
111 } catch (Exception e) {
112 e.printStackTrace();
113 }
114
115 //从服务器返回消息中读出状态码,将其转换成整数返回
116 StringTokenizer st = new StringTokenizer(line, " ");
117
118 return Integer.parseInt(st.nextToken());
119 }
120
121 public void authLogin(MailMessage message, BufferedReader in, BufferedWriter out) throws IOException {
122 int result;
123 result = sendServer("AUTH LOGIN", in, out);
124
125 if (result != 334) {
126 throw new IOException("用户验证失败!");
127 }
128 result = sendServer(encode.encode(message.getUser().getBytes()), in, out);
129
130 if (result != 334) {
131 throw new IOException("用户名错误!");
132 }
133 result = sendServer(encode.encode(message.getPassword().getBytes()), in, out);
134
135 if (result != 235) {
136 throw new IOException("验证失败!");
137 }
138 }
139
140 //开始发送消息,邮件源地址
141 public void mailfrom(String source, BufferedReader in, BufferedWriter out) throws IOException {
142 int result;
143 result = sendServer("MAIL FROM:<" + source + ">", in, out);
144
145 if (result != 250) {
146 throw new IOException("指定源地址错误");
147 }
148 }
149
150 // 设置邮件收件人
151 public void rcpt(String touchman, BufferedReader in, BufferedWriter out) throws IOException {
152 int result;
153 result = sendServer("RCPT TO:<" + touchman + ">", in, out);
154
155 if (result != 250) {
156 throw new IOException("指定目的地址错误!");
157 }
158 }
159
160 //邮件体
161 public void data(String from, String to, String subject, String content, BufferedReader in, BufferedWriter out) throws IOException {
162 int result;
163 result = sendServer("DATA", in, out);
164
165 //输入date回车后,若收到354应答后,继续输入邮件内容
166 if (result != 354) {
167 throw new IOException("不能发送数据");
168 }
169
170 out.write("From: " + from);
171 out.newLine();
172 out.write("To: " + to);
173 out.newLine();
174 out.write("Subject: " + subject);
175 out.newLine();
176 out.newLine();
177 out.write(content);
178 out.newLine();
179
180 //句点加回车结束邮件内容输入
181 result = sendServer(".", in, out);
182 System.out.println(result);
183
184 if (result != 250) {
185 throw new IOException("发送数据错误");
186 }
187 }
188
189 //退出
190 public void quit(BufferedReader in, BufferedWriter out) throws IOException {
191 int result;
192 result = sendServer("QUIT", in, out);
193
194 if (result != 221) {
195 throw new IOException("未能正确退出");
196 }
197 }
198
199 //发送邮件主程序
200 public boolean sendMail(MailMessage message, String server) {
201 try {
202 BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
203 BufferedWriter out = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
204 helo(server, in, out);//helo
205 authLogin(message, in, out);//auth login
206 mailfrom(message.getFrom(), in, out);//mail from
207 rcpt(message.getTo(), in, out);//rcpt to
208 data(message.getDatafrom(), message.getDatato(), message.getSubject(), message.getContent(), in, out);//DATA
209 quit(in, out);//quit
210 } catch (Exception e) {
211 e.printStackTrace();
212 return false;
213 }
214 return true;
215 }
216 }
运行效果:
http://www.cnblogs.com/hongten/gallery/image/113732.html
3.163邮箱的stmp服务配置
1 package com.b510.mail;
2
3 import java.io.BufferedReader;
4 import java.io.BufferedWriter;
5 import java.io.IOException;
6 import java.io.InputStreamReader;
7 import java.io.OutputStreamWriter;
8 import java.net.Socket;
9 import java.net.SocketException;
10 import java.net.UnknownHostException;
11 import java.util.StringTokenizer;
12
13 import sun.misc.BASE64Encoder;
14
15 /**
16 * STMP邮箱客户端,用于邮件发送和接收的管理
17 * @author hongten
18 */
19 public class SMTPClient {
20
21 static String from_mail="hongtenzoneb@163.com";
22 static String to_mail="hongtenzone@foxmail.com";
23 static String server_mail="smtp.163.com";
24 static String subject_mail="test";
25 static String content_mail="hello,this is a test mail,i'm hongten.\n你好,这是一封测试邮件,我是hongten";
26 static String datafrom_mail=from_mail;
27 static String datato_mail=to_mail;
28 static String user_mail="hongtenzoneb";
29 static String password_mail="**********";
30
31
32
33
34 private boolean debug = true;
35 BASE64Encoder encode = new BASE64Encoder();//用于加密后发送用户名和密码
36
37 public static void main(String[] args) throws UnknownHostException, IOException {
38 MailMessage message = new MailMessage();
39 message.setFrom(from_mail);//发件人
40 message.setTo(to_mail);//收件人
41 String server = server_mail;//邮件服务器
42 message.setSubject(subject_mail);//邮件主题
43 message.setContent(content_mail);//邮件内容
44 message.setDatafrom(datafrom_mail);//发件人,在邮件的发件人栏目中显示
45 message.setDatato(datato_mail);//收件人,在邮件的收件人栏目中显示
46 message.setUser(user_mail);//登陆邮箱的用户名
47 message.setPassword(password_mail);//登陆邮箱的密码
48
49 SMTPClient smtp = new SMTPClient(server, 25);
50
51 boolean flag;
52 flag = smtp.sendMail(message, server);
53
54 if (flag) {
55 System.out.println("邮件发送成功!");
56 } else {
57 System.out.println("邮件发送失败!");
58 }
59 }
60 private Socket socket;
61
62 public SMTPClient(String server, int port) throws UnknownHostException, IOException {
63 try {
64 socket = new Socket(server, 25);
65 } catch (SocketException e) {
66 System.out.println(e.getMessage());
67 } catch (Exception e) {
68 e.printStackTrace();
69 } finally {
70 System.out.println("已经建立连接!");
71 }
72 }
73
74 //注册到邮件服务器
75 public void helo(String server, BufferedReader in, BufferedWriter out) throws IOException {
76 int result;
77 result = getResult(in);
78
79 //连接上邮件服务后,服务器给出220应答
80 if (result != 220) {
81 throw new IOException("连接服务器失败");
82 }
83
84 result = sendServer("HELO " + server, in, out);
85
86 //HELO命令成功后返回250
87 if (result != 250) {
88 throw new IOException("注册邮件服务器失败!");
89 }
90 }
91
92 private int sendServer(String str, BufferedReader in, BufferedWriter out) throws IOException {
93 out.write(str);
94 out.newLine();
95 out.flush();
96
97 if (debug) {
98 System.out.println("已发送命令:" + str);
99 }
100
101 return getResult(in);
102 }
103
104 public int getResult(BufferedReader in) {
105 String line = "";
106
107 try {
108 line = in.readLine();
109 if (debug) {
110 System.out.println("服务器返回状态:" + line);
111 }
112 } catch (Exception e) {
113 e.printStackTrace();
114 }
115
116 //从服务器返回消息中读出状态码,将其转换成整数返回
117 StringTokenizer st = new StringTokenizer(line, " ");
118
119 return Integer.parseInt(st.nextToken());
120 }
121
122 public void authLogin(MailMessage message, BufferedReader in, BufferedWriter out) throws IOException {
123 int result;
124 result = sendServer("AUTH LOGIN", in, out);
125
126 if (result != 334) {
127 throw new IOException("用户验证失败!");
128 }
129 result = sendServer(encode.encode(message.getUser().getBytes()), in, out);
130
131 if (result != 334) {
132 throw new IOException("用户名错误!");
133 }
134 result = sendServer(encode.encode(message.getPassword().getBytes()), in, out);
135
136 if (result != 235) {
137 throw new IOException("验证失败!");
138 }
139 }
140
141 //开始发送消息,邮件源地址
142 public void mailfrom(String source, BufferedReader in, BufferedWriter out) throws IOException {
143 int result;
144 result = sendServer("MAIL FROM:<" + source + ">", in, out);
145
146 if (result != 250) {
147 throw new IOException("指定源地址错误");
148 }
149 }
150
151 // 设置邮件收件人
152 public void rcpt(String touchman, BufferedReader in, BufferedWriter out) throws IOException {
153 int result;
154 result = sendServer("RCPT TO:<" + touchman + ">", in, out);
155
156 if (result != 250) {
157 throw new IOException("指定目的地址错误!");
158 }
159 }
160
161 //邮件体
162 public void data(String from, String to, String subject, String content, BufferedReader in, BufferedWriter out) throws IOException {
163 int result;
164 result = sendServer("DATA", in, out);
165
166 //输入date回车后,若收到354应答后,继续输入邮件内容
167 if (result != 354) {
168 throw new IOException("不能发送数据");
169 }
170
171 out.write("From: " + from);
172 out.newLine();
173 out.write("To: " + to);
174 out.newLine();
175 out.write("Subject: " + subject);
176 out.newLine();
177 out.newLine();
178 out.write(content);
179 out.newLine();
180
181 //句点加回车结束邮件内容输入
182 result = sendServer(".", in, out);
183 System.out.println(result);
184
185 if (result != 250) {
186 throw new IOException("发送数据错误");
187 }
188 }
189
190 //退出
191 public void quit(BufferedReader in, BufferedWriter out) throws IOException {
192 int result;
193 result = sendServer("QUIT", in, out);
194
195 if (result != 221) {
196 throw new IOException("未能正确退出");
197 }
198 }
199
200 //发送邮件主程序
201 public boolean sendMail(MailMessage message, String server) {
202 try {
203 BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
204 BufferedWriter out = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
205 helo(server, in, out);//helo
206 authLogin(message, in, out);//auth login
207 mailfrom(message.getFrom(), in, out);//mail from
208 rcpt(message.getTo(), in, out);//rcpt to
209 data(message.getDatafrom(), message.getDatato(), message.getSubject(), message.getContent(), in, out);//DATA
210 quit(in, out);//quit
211 } catch (Exception e) {
212 e.printStackTrace();
213 return false;
214 }
215 return true;
216 }
217 }
运行效果:
http://www.cnblogs.com/hongten/gallery/image/113733.html
4.126邮箱的stmp服务配置
1 package com.b510.mail;
2
3 import java.io.BufferedReader;
4 import java.io.BufferedWriter;
5 import java.io.IOException;
6 import java.io.InputStreamReader;
7 import java.io.OutputStreamWriter;
8 import java.net.Socket;
9 import java.net.SocketException;
10 import java.net.UnknownHostException;
11 import java.util.StringTokenizer;
12
13 import sun.misc.BASE64Encoder;
14
15 /**
16 * STMP邮箱客户端,用于邮件发送和接收的管理
17 * @author hongten
18 */
19 public class SMTPClient {
20
21 static String from_mail="hongtenzoneb510@126.com";
22 static String to_mail="hongtenzone@foxmail.com";
23 static String server_mail="smtp.126.com";
24 static String subject_mail="test";
25 static String content_mail="hello,this is a test mail,i'm hongten.\n你好,这是一封测试邮件,我是hongten";
26 static String datafrom_mail=from_mail;
27 static String datato_mail=to_mail;
28 static String user_mail="hongtenzoneb510";
29 static String password_mail="************";
30
31
32
33
34 private boolean debug = true;
35 BASE64Encoder encode = new BASE64Encoder();//用于加密后发送用户名和密码
36
37 public static void main(String[] args) throws UnknownHostException, IOException {
38 MailMessage message = new MailMessage();
39 message.setFrom(from_mail);//发件人
40 message.setTo(to_mail);//收件人
41 String server = server_mail;//邮件服务器
42 message.setSubject(subject_mail);//邮件主题
43 message.setContent(content_mail);//邮件内容
44 message.setDatafrom(datafrom_mail);//发件人,在邮件的发件人栏目中显示
45 message.setDatato(datato_mail);//收件人,在邮件的收件人栏目中显示
46 message.setUser(user_mail);//登陆邮箱的用户名
47 message.setPassword(password_mail);//登陆邮箱的密码
48
49 SMTPClient smtp = new SMTPClient(server, 25);
50
51 boolean flag;
52 flag = smtp.sendMail(message, server);
53
54 if (flag) {
55 System.out.println("邮件发送成功!");
56 } else {
57 System.out.println("邮件发送失败!");
58 }
59 }
60 private Socket socket;
61
62 public SMTPClient(String server, int port) throws UnknownHostException, IOException {
63 try {
64 socket = new Socket(server, 25);
65 } catch (SocketException e) {
66 System.out.println(e.getMessage());
67 } catch (Exception e) {
68 e.printStackTrace();
69 } finally {
70 System.out.println("已经建立连接!");
71 }
72 }
73
74 //注册到邮件服务器
75 public void helo(String server, BufferedReader in, BufferedWriter out) throws IOException {
76 int result;
77 result = getResult(in);
78
79 //连接上邮件服务后,服务器给出220应答
80 if (result != 220) {
81 throw new IOException("连接服务器失败");
82 }
83
84 result = sendServer("HELO " + server, in, out);
85
86 //HELO命令成功后返回250
87 if (result != 250) {
88 throw new IOException("注册邮件服务器失败!");
89 }
90 }
91
92 private int sendServer(String str, BufferedReader in, BufferedWriter out) throws IOException {
93 out.write(str);
94 out.newLine();
95 out.flush();
96
97 if (debug) {
98 System.out.println("已发送命令:" + str);
99 }
100
101 return getResult(in);
102 }
103
104 public int getResult(BufferedReader in) {
105 String line = "";
106
107 try {
108 line = in.readLine();
109 if (debug) {
110 System.out.println("服务器返回状态:" + line);
111 }
112 } catch (Exception e) {
113 e.printStackTrace();
114 }
115
116 //从服务器返回消息中读出状态码,将其转换成整数返回
117 StringTokenizer st = new StringTokenizer(line, " ");
118
119 return Integer.parseInt(st.nextToken());
120 }
121
122 public void authLogin(MailMessage message, BufferedReader in, BufferedWriter out) throws IOException {
123 int result;
124 result = sendServer("AUTH LOGIN", in, out);
125
126 if (result != 334) {
127 throw new IOException("用户验证失败!");
128 }
129 result = sendServer(encode.encode(message.getUser().getBytes()), in, out);
130
131 if (result != 334) {
132 throw new IOException("用户名错误!");
133 }
134 result = sendServer(encode.encode(message.getPassword().getBytes()), in, out);
135
136 if (result != 235) {
137 throw new IOException("验证失败!");
138 }
139 }
140
141 //开始发送消息,邮件源地址
142 public void mailfrom(String source, BufferedReader in, BufferedWriter out) throws IOException {
143 int result;
144 result = sendServer("MAIL FROM:<" + source + ">", in, out);
145
146 if (result != 250) {
147 throw new IOException("指定源地址错误");
148 }
149 }
150
151 // 设置邮件收件人
152 public void rcpt(String touchman, BufferedReader in, BufferedWriter out) throws IOException {
153 int result;
154 result = sendServer("RCPT TO:<" + touchman + ">", in, out);
155
156 if (result != 250) {
157 throw new IOException("指定目的地址错误!");
158 }
159 }
160
161 //邮件体
162 public void data(String from, String to, String subject, String content, BufferedReader in, BufferedWriter out) throws IOException {
163 int result;
164 result = sendServer("DATA", in, out);
165
166 //输入date回车后,若收到354应答后,继续输入邮件内容
167 if (result != 354) {
168 throw new IOException("不能发送数据");
169 }
170
171 out.write("From: " + from);
172 out.newLine();
173 out.write("To: " + to);
174 out.newLine();
175 out.write("Subject: " + subject);
176 out.newLine();
177 out.newLine();
178 out.write(content);
179 out.newLine();
180
181 //句点加回车结束邮件内容输入
182 result = sendServer(".", in, out);
183 System.out.println(result);
184
185 if (result != 250) {
186 throw new IOException("发送数据错误");
187 }
188 }
189
190 //退出
191 public void quit(BufferedReader in, BufferedWriter out) throws IOException {
192 int result;
193 result = sendServer("QUIT", in, out);
194
195 if (result != 221) {
196 throw new IOException("未能正确退出");
197 }
198 }
199
200 //发送邮件主程序
201 public boolean sendMail(MailMessage message, String server) {
202 try {
203 BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
204 BufferedWriter out = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
205 helo(server, in, out);//helo
206 authLogin(message, in, out);//auth login
207 mailfrom(message.getFrom(), in, out);//mail from
208 rcpt(message.getTo(), in, out);//rcpt to
209 data(message.getDatafrom(), message.getDatato(), message.getSubject(), message.getContent(), in, out);//DATA
210 quit(in, out);//quit
211 } catch (Exception e) {
212 e.printStackTrace();
213 return false;
214 }
215 return true;
216 }
217 }
运行效果 :