首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

JavaMail 發送郵件完整工具類:支援 HTML、附件、抄送

     編輯:Java 相關知識

依賴

  • mail.jar
  • activation.jar (JDK 6+ 已內建)

核心類 Mail.java

package cn.cgw.util.mail;

import javax.activation.*;
import javax.mail.*;
import javax.mail.internet.*;
import java.util.Properties;

public class Mail {
    private MimeMessage mimeMsg;
    private Session session;
    private Properties props;
    private boolean needAuth = false;
    private String username, password;
    private Multipart mp;

    public Mail(String smtp) { setSmtpHost(smtp); createMimeMessage(); }

    public void setSmtpHost(String host) {
        if (props == null) props = System.getProperties();
        props.put("mail.smtp.host", host);
    }

    public boolean createMimeMessage() {
        try {
            session = Session.getDefaultInstance(props, null);
            mimeMsg = new MimeMessage(session);
            mp = new MimeMultipart();
            return true;
        } catch (Exception e) { return false; }
    }

    public void setNeedAuth(boolean need) {
        if (props == null) props = System.getProperties();
        props.put("mail.smtp.auth", need ? "true" : "false");
    }

    public void setNamePass(String user, String pwd) { username = user; password = pwd; }

    public boolean setSubject(String sub) {
        try { mimeMsg.setSubject(sub); return true; } catch (Exception e) { return false; }
    }

    public boolean setBody(String body) {
        try {
            BodyPart bp = new MimeBodyPart();
            bp.setContent(body, "text/html;charset=GBK");
            mp.addBodyPart(bp);
            return true;
        } catch (Exception e) { return false; }
    }

    public boolean addFileAffix(String filename) {
        try {
            BodyPart bp = new MimeBodyPart();
            FileDataSource fds = new FileDataSource(filename);
            bp.setDataHandler(new DataHandler(fds));
            bp.setFileName(fds.getName());
            mp.addBodyPart(bp);
            return true;
        } catch (Exception e) { return false; }
    }

    public boolean setFrom(String from) {
        try { mimeMsg.setFrom(new InternetAddress(from)); return true; } catch (Exception e) { return false; }
    }

    public boolean setTo(String to) {
        try { mimeMsg.setRecipients(Message.RecipientType.TO, InternetAddress.parse(to)); return true; } catch (Exception e) { return false; }
    }

    public boolean setCc(String cc) {
        try { mimeMsg.setRecipients(Message.RecipientType.CC, InternetAddress.parse(cc)); return true; } catch (Exception e) { return false; }
    }

    public boolean sendout() {
        try {
            mimeMsg.setContent(mp);
            mimeMsg.saveChanges();
            Transport transport = session.getTransport("smtp");
            transport.connect(username, password);
            transport.sendMessage(mimeMsg, mimeMsg.getAllRecipients());
            transport.close();
            return true;
        } catch (Exception e) { return false; }
    }

    // 靜態便捷方法
    public static boolean send(String smtp, String from, String to, String subject, String body, String user, String pwd) {
        Mail mail = new Mail(smtp);
        mail.setNeedAuth(true);
        mail.setNamePass(user, pwd);
        return mail.setFrom(from) && mail.setTo(to) && mail.setSubject(subject) && mail.setBody(body) && mail.sendout();
    }

    public static boolean sendAndCc(String smtp, String from, String to, String cc, String subject, String body, String user, String pwd, String attach) {
        Mail mail = new Mail(smtp);
        mail.setNeedAuth(true);
        mail.setNamePass(user, pwd);
        boolean ok = mail.setFrom(from) && mail.setTo(to) && mail.setCc(cc) && mail.setSubject(subject) && mail.setBody(body);
        if (attach != null) ok &= mail.addFileAffix(attach);
        return ok && mail.sendout();
    }
}

使用範例

public static void main(String[] args) {
    String smtp = "smtp.example.com";
    String from = "me@example.com";
    String to = "you@example.com";
    String cc = "cc@example.com";
    String subject = "Test";
    String body = "

Hello

"; String user = "user"; String pwd = "pass"; String attach = "F:/notes/struts2與mvc.txt"; Mail.sendAndCc(smtp, from, to, cc, subject, body, user, pwd, attach); }

結語

封裝良好、功能完整的 JavaMail 工具類,可直接整合至專案發送 HTML 郵件、附件與抄送。

出處:bianceng.cn

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved