您的位置:首页 > 编程语言 > Java开发

无需使用任何jar包就可以使用Java发送邮件(复制)

2015-07-20 10:46 387 查看
1. 新建 MailMessage.java

复制内容到剪贴板

代码:

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 邮件 javamail