无需使用任何jar包就可以使用Java发送邮件(复制)
2015-07-20 10:46
387 查看
1. 新建 MailMessage.java
复制内容到剪贴板
代码:
2. 新建 SMTPClient.java
复制内容到剪贴板
代码:
3. 直接运行 Java Application 即可发送邮件。
复制内容到剪贴板
代码:
package mail; public class MailMessage { private String from; private String to; private String datafrom; private String datato; private String subject; private String content; private String date; private String user; private String password; public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public String getUser() { return user; } public void setUser(String user) { this.user = user; } public String getContent() { return content; } public void setContent(String content) { this.content = content; } public String getDatafrom() { return datafrom; } public void setDatafrom(String datafrom) { this.datafrom = datafrom; } public String getDatato() { return datato; } public void setDatato(String datato) { this.datato = datato; } public String getDate() { return date; } public void setDate(String date) { this.date = date; } public String getFrom() { return from; } public void setFrom(String from) { this.from = from; } public String getSubject() { return subject; } public void setSubject(String subject) { this.subject = subject; } public String getTo() { return to; } public void setTo(String to) { this.to = to; } }
2. 新建 SMTPClient.java
复制内容到剪贴板
代码:
package mail; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.net.Socket; import java.net.SocketException; import java.net.UnknownHostException; import java.util.StringTokenizer; import sun.misc.BASE64Encoder; public class SMTPClient { private boolean debug = true; BASE64Encoder encode = new BASE64Encoder();// 用于加密后发送用户名和密码 public static void main(String[] args) throws UnknownHostException, IOException { // TODO Auto-generated method stub MailMessage message=new MailMessage(); message.setFrom("admin@163.com");//发件人 message.setTo("test@qq.com");//收件人 String server="smtp.163.com";//邮件服务器 message.setSubject("test");//邮件主题 message.setContent("testtesttesttesttesttest");//邮件内容 message.setDatafrom("admin@163.com");//发件人,在邮件的发件人栏目中显示 message.setDatato("test@qq.com");//收件人,在邮件的收件人栏目中显示 message.setUser("admin");//登陆邮箱的用户名 message.setPassword("edcv11!!");//登陆邮箱的密码 SMTPClient smtp=new SMTPClient(server,465); boolean flag; flag=smtp.sendMail(message,server); if(flag){ System.out.println("邮件发送成功!"); } else{ System.out.println("邮件发送失败!"); } } private Socket socket; public SMTPClient(String server, int port) throws UnknownHostException, IOException { try { socket = new Socket(server, 465); } catch (SocketException e) { System.out.println(e.getMessage()); } catch (Exception e) { e.printStackTrace(); } finally { System.out.println("已经建立连接!"); } } // 注册到邮件服务器 public void helo(String server, BufferedReader in, BufferedWriter out) throws IOException { int result; result = getResult(in); // 连接上邮件服务后,服务器给出220应答 if (result != 220) { throw new IOException("连接服务器失败"); } result = sendServer("HELO " + server, in, out); // HELO命令成功后返回250 if (result != 250) { throw new IOException("注册邮件服务器失败!"); } } private int sendServer(String str, BufferedReader in, BufferedWriter out) throws IOException { out.write(str); out.newLine(); out.flush(); if (debug) { System.out.println("已发送命令:" + str); } return getResult(in); } public int getResult(BufferedReader in) { String line = ""; try { line = in.readLine(); if (debug) { System.out.println("服务器返回状态:" + line); } } catch (Exception e) { e.printStackTrace(); } // 从服务器返回消息中读出状态码,将其转换成整数返回 StringTokenizer st = new StringTokenizer(line, " "); return Integer.parseInt(st.nextToken()); } public void authLogin(MailMessage message, BufferedReader in, BufferedWriter out) throws IOException { int result; result = sendServer("AUTH LOGIN", in, out); if (result != 334) { throw new IOException("用户验证失败!"); } result = sendServer(encode.encode(message.getUser().getBytes()), in, out); if (result != 334) { throw new IOException("用户名错误!"); } result = sendServer(encode.encode(message.getPassword().getBytes()), in, out); if (result != 235) { throw new IOException("验证失败!"); } } // 开始发送消息,邮件源地址 public void mailfrom(String source, BufferedReader in, BufferedWriter out) throws IOException { int result; result = sendServer("MAIL FROM:<" + source + ">", in, out); if (result != 250) { throw new IOException("指定源地址错误"); } } // 设置邮件收件人 public void rcpt(String touchman, BufferedReader in, BufferedWriter out) throws IOException { int result; result = sendServer("RCPT TO:<" + touchman + ">", in, out); if (result != 250) { throw new IOException("指定目的地址错误!"); } } // 邮件体 public void data(String from, String to, String subject, String content, BufferedReader in, BufferedWriter out) throws IOException { int result; result = sendServer("DATA", in, out); // 输入DATA回车后,若收到354应答后,继续输入邮件内容 if (result != 354) { throw new IOException("不能发送数据"); } out.write("From: " + from); out.newLine(); out.write("To: " + to); out.newLine(); out.write("Subject: " + subject); out.newLine(); out.newLine(); out.write(content); out.newLine(); // 句号加回车结束邮件内容输入 result = sendServer(".", in, out); System.out.println(result); if (result != 250) { throw new IOException("发送数据错误"); } } // 退出 public void quit(BufferedReader in, BufferedWriter out) throws IOException { int result; result = sendServer("QUIT", in, out); if (result != 221) { throw new IOException("未能正确退出"); } } // 发送邮件主程序 public boolean sendMail(MailMessage message, String server) { try { BufferedReader in = new BufferedReader(new InputStreamReader(socket .getInputStream())); BufferedWriter out = new BufferedWriter(new OutputStreamWriter( socket.getOutputStream())); helo(server, in, out);// HELO命令 authLogin(message, in, out);// AUTH LOGIN命令 mailfrom(message.getFrom(), in, out);// MAIL FROM rcpt(message.getTo(), in, out);// RCPT data(message.getDatafrom(), message.getDatato(), message .getSubject(), message.getContent(), in, out);// DATA quit(in, out);// QUIT } catch (Exception e) { e.printStackTrace(); return false; } return true; } }
3. 直接运行 Java Application 即可发送邮件。
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 垃圾邮件过滤器 python简单实现
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序
- 二叉查找树