使用java實現發送郵件功能

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("郵件發送失敗");
      }
     }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章