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 }

运行效果 :

http://www.cnblogs.com/hongten/gallery/image/113734.html

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏hotqin888的专栏

engineercms利用pdf.js制作连续看图功能

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/hotqin888/article/det...

20410
来自专栏DOTNET

ASP.NET MVC编程——单元测试

1自动化测试基本概念 自动化测试分为:单元测试,集成测试,验收测试。 单元测试 检验被测单元的功能,被测单元一般为低级别的组件,如一个类或类方法。 单元测试要满...

56950
来自专栏拂晓风起

java web 自定义错误页面 完整jsp错误页面代码(同时写错误日志) error.jsp

13750
来自专栏好好学java的技术栈

java实现手机短信验证全过程

手机短信验证现在在各种系统可以说都是用的非常普遍的,这个可能是方便和安全性的考虑,所以才广泛的使用,这篇文章就以一个短信接口的实例,来讲解一下怎么使用短信接口。

73150
来自专栏FreeBuf

scapy在wlan中的应用

Scapy 又是scapy,这是python的一个网络编程方面的库,它在wlan中也有很强大的应用。一般我们买块网卡,然后aircrack-ng套件爆破一下邻居...

381100
来自专栏JackieZheng

探秘Tomcat——启动篇

tomcat作为一款web服务器本身很复杂,代码量也很大,但是模块化很强,最核心的模块还是连接器Connector和容器Container。具体请看下图: ? ...

51070
来自专栏青青天空树

趣味题:恺撒Caesar密码(c++实现)

描述:Julius Caesar 生活在充满危险和阴谋的年代。为了生存,他首次发明了密码,用于军队的消息传递。假设你是Caesar 军团中的一名军官,需要把Ca...

9120
来自专栏Java学习之路

JavaTCP和UDP套接字编程

原文地址:http://www.cnblogs.com/MindMrWang/p/8919890.html 在我们刚开始入门Java后端的时候可能你会觉得有点...

12420
来自专栏杨建荣的学习笔记

最简单的web服务器实现(一)(r4笔记第68天)

tomcat作为web服务器,想必大家做过web开发的都离不开tomcat了,值得庆幸的是tomcat也是开放源代码的,最近准备好好琢磨琢磨tomcat的源码,...

38650
来自专栏好好学java的技术栈

java实现手机短信验证全过程

63430

扫码关注云+社区

领取腾讯云代金券