使用java实现发送邮件功能

来源:互联网 发布:mac淘宝 编辑:程序博客网 时间:2024/06/04 18:24

java发送邮件

导入jar

先下载 mail.jar,并将mail.jar添加到classpath即可。如果你使用的是JAVA EE SDK,则可以在C:\glassfishv3\glassfish\modules\mail.jar找到所需的jar包,同样需要添加的classpath。

邮件实体类

创建一个继承MailSenderInfo.java 记录发送邮件所需的各种信息,如发送邮件服务器的地址、端口号、发件人邮箱、收件人邮箱等等。代码如下:

import java.util.Properties;public class MailSendInfo {     // 发送邮件的服务器的IP(或主机地址)     private String mailServerHost;     // 发送邮件的服务器的端口     private String mailServerPort = "25";     // 发件人邮箱地址     private String fromAddress;     // 收件人邮箱地址     private String toAddress;     // 登陆邮件发送服务器的用户名     private String userName;     // 登陆邮件发送服务器的密码     private String password;     // 是否需要身份验证     private boolean validate = false;     // 邮件主题     private String subject;     // 邮件的文本内容     private String content;     // 邮件附件的文件名     private String[] attachFileNames;     public Properties getProperties() {      Properties p = new Properties();      p.put("mail.smtp.host", this.mailServerHost);      p.put("mail.smtp.port", this.mailServerPort);      p.put("mail.smtp.auth", validate ? "true" : "false");      return p;     }     public String getMailServerHost() {      return mailServerHost;     }     public void setMailServerHost(String mailServerHost) {      this.mailServerHost = mailServerHost;     }     public String getMailServerPort() {      return mailServerPort;     }     public void setMailServerPort(String mailServerPort) {      this.mailServerPort = mailServerPort;     }     public boolean isValidate() {      return validate;     }     public void setValidate(boolean validate) {      this.validate = validate;     }     public String[] getAttachFileNames() {      return attachFileNames;     }     public void setAttachFileNames(String[] fileNames) {      this.attachFileNames = fileNames;     }     public String getFromAddress() {      return fromAddress;     }     public void setFromAddress(String fromAddress) {      this.fromAddress = fromAddress;     }     public String getPassword() {      return password;     }     public void setPassword(String password) {      this.password = password;     }     public String getToAddress() {      return toAddress;     }     public void setToAddress(String toAddress) {      this.toAddress = toAddress;     }     public String getUserName() {      return userName;     }     public void setUserName(String userName) {      this.userName = userName;     }     public String getSubject() {      return subject;     }     public void setSubject(String subject) {      this.subject = subject;     }     public String getContent() {      return content;     }     public void setContent(String textContent) {      this.content = textContent;     }}

邮箱登录类

MyAuthenticator.java,邮箱用户名和密码认证器。代码如下:

import javax.mail.Authenticator;import javax.mail.PasswordAuthentication;public class MyAuthenticator  extends Authenticator{    private String userName;//用户名    private String password;//密码    public MyAuthenticator() {    }    public MyAuthenticator(String userName,String password){        this.userName = userName;        this.password = password;    }    /** 用作登录校验的,以确保你对该邮箱有发送邮件的权利*/    @Override    protected PasswordAuthentication getPasswordAuthentication(){        return new PasswordAuthentication(userName, password);    }}

发送邮件类

SimpleMailSender.java,用来发送邮件类。代码如下:

import java.util.Date;import java.util.Properties;import javax.mail.Address;import javax.mail.BodyPart;import javax.mail.Message;import javax.mail.MessagingException;import javax.mail.Multipart;import javax.mail.Session;import javax.mail.Transport;import javax.mail.internet.InternetAddress;import javax.mail.internet.MimeBodyPart;import javax.mail.internet.MimeMessage;import javax.mail.internet.MimeMultipart;public class SimpleMailSender {     public boolean sendTextMail(MailSendInfo mailInfo) {      // 判断是否需要身份认证      MyAuthenticator authenticator = null;      Properties pro = mailInfo.getProperties();      if (mailInfo.isValidate()) {       // 如果需要身份认证,则创建一个密码验证器       authenticator = new MyAuthenticator(mailInfo.getUserName(), mailInfo.getPassword());      }      // 根据邮件会话属性和密码验证器构造一个发送邮件的session      Session sendMailSession = Session.getDefaultInstance(pro, authenticator);      try {       // 根据session创建一个邮件消息       Message mailMessage = new MimeMessage(sendMailSession);       // 创建邮件发送者地址       Address from = new InternetAddress(mailInfo.getFromAddress());       // 设置邮件消息的发送者       mailMessage.setFrom(from);       // 创建邮件的接收者地址,并设置到邮件消息中       Address to = new InternetAddress(mailInfo.getToAddress());       mailMessage.setRecipient(Message.RecipientType.TO, to);       // 设置邮件消息的主题       mailMessage.setSubject(mailInfo.getSubject());       // 设置邮件消息发送的时间       mailMessage.setSentDate(new Date());       // 设置邮件消息的主要内容       String mailContent = mailInfo.getContent();       mailMessage.setText(mailContent);       // 发送邮件       Transport.send(mailMessage);       return true;      } catch (MessagingException ex) {       ex.printStackTrace();      }      return false;     }     public static boolean sendHtmlMail(MailSendInfo mailInfo) {      // 判断是否需要身份认证      MyAuthenticator authenticator = null;      Properties pro = mailInfo.getProperties();      // 如果需要身份认证,则创建一个密码验证器      if (mailInfo.isValidate()) {       authenticator = new MyAuthenticator(mailInfo.getUserName(), mailInfo.getPassword());      }      // 根据邮件会话属性和密码验证器构造一个发送邮件的session      Session sendMailSession = Session.getDefaultInstance(pro, authenticator);      try {       // 根据session创建一个邮件消息       Message mailMessage = new MimeMessage(sendMailSession);       // 创建邮件发送者地址       Address from = new InternetAddress(mailInfo.getFromAddress());       // 设置邮件消息的发送者       mailMessage.setFrom(from);       // 创建邮件的接收者地址,并设置到邮件消息中       Address to = new InternetAddress(mailInfo.getToAddress());       // Message.RecipientType.TO属性表示接收者的类型为TO       mailMessage.setRecipient(Message.RecipientType.TO, to);       // 设置邮件消息的主题       mailMessage.setSubject(mailInfo.getSubject());       // 设置邮件消息发送的时间       mailMessage.setSentDate(new Date());       // MiniMultipart类是一个容器类,包含MimeBodyPart类型的对象       Multipart mainPart = new MimeMultipart();       // 创建一个包含HTML内容的MimeBodyPart       BodyPart html = new MimeBodyPart();       // 设置HTML内容       html.setContent(mailInfo.getContent(), "text/html; charset=utf-8");       mainPart.addBodyPart(html);       // 将MiniMultipart对象设置为邮件内容       mailMessage.setContent(mainPart);       // 发送邮件       Transport.send(mailMessage);       return true;      } catch (MessagingException ex) {       ex.printStackTrace();      }      return false;     }}

测试

接下来就是见证奇迹的时刻了,代码如下:

public class SendMailDemo {    // public static void main(String[] args) {    public void doSend(){      // 设置邮件服务器信息      MailSendInfo mailInfo = new MailSendInfo();      mailInfo.setMailServerHost("smtp.163.com");      mailInfo.setMailServerPort("25");      mailInfo.setValidate(true);      // 邮箱用户名      mailInfo.setUserName("*****@163.com");      // 邮箱密码      mailInfo.setPassword("************");      // 发件人邮箱      mailInfo.setFromAddress("*****@163.com");      // 收件人邮箱      mailInfo.setToAddress("***********@126.com");      // 邮件标题      mailInfo.setSubject("商务合作邮件提醒");      // 邮件内容      StringBuffer buffer = new StringBuffer();      buffer.append("蜡笔分期欢迎您提供的商务合作\n");      buffer.append("来自***的商务合作方案");      mailInfo.setContent(buffer.toString());      // 发送邮件      SimpleMailSender sms = new SimpleMailSender();      // 发送文体格式      //sms.sendTextMail(mailInfo);      // 发送html格式      boolean flg = SimpleMailSender.sendHtmlMail(mailInfo);      if(flg){          System.out.println("邮件发送成功");      }else{          System.out.println("邮件发送失败");      }     }}
0 0