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

javamail 发送邮件

2015-09-16 15:24 597 查看

1. 所需jar包

mail.jar

2. 邮件支持

支持
普通文本
html文本
抄送多人
密送多人
发送多个附件


3. javamail实体封装

package com.roach.mail;

import java.io.Serializable;

public class JavaMail implements Serializable{

    private static final long serialVersionUID = 5753846197635578474L;

    /** 邮件用户, 即发件人的邮箱 */
    private String username;

    /** 发件人邮箱密码 */
    private String password;

    /** 所使用的邮箱服务 */
    private String host;

    /** 邮件接收用户 */
    private String toMail;

    /** 抄送邮箱用户 (carbon copy) */
    private String[] ccMails;

    /** 密送邮箱用户 blind carbon copy) */
    private String[] bccMails;

    /** 邮件主题 */
    private String subject;

    /** 邮件内容 */
    private String content;

    /** 附件地址 */
    private String[] attachments;

    public JavaMail() {
        this.username = "123456@qq.com";
        this.password = "123456";
        this.host = "smtp.qq.com";
    }

    public JavaMail(String username, String password, String host){
        this.username = username;
        this.password = password;
        this.host = host;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getHost() {
        return host;
    }

    public void setHost(String host) {
        this.host = host;
    }

    public String getToMail() {
        return toMail;
    }

    public void setToMail(String toMail) {
        this.toMail = toMail;
    }

    public String[] getCcMails() {
        return ccMails;
    }

    public void setCcMails(String[] ccMails) {
        this.ccMails = ccMails;
    }

    public String[] getBccMails() {
        return bccMails;
    }

    public void setBccMails(String[] bccMails) {
        this.bccMails = bccMails;
    }

    public String getSubject() {
        return subject;
    }

    public void setSubject(String subject) {
        this.subject = subject;
    }

    public String getContent() {
        return content;
    }

    public void setContent(String content) {
        this.content = content;
    }

    public String[] getAttachments() {
        return attachments;
    }

    public void setAttachments(String[] attachments) {
        this.attachments = attachments;
    }
}


4. JavaMailUtils工具类

package com.roach.mail;

import java.util.Properties;

import javax.activation.DataHandler;
import javax.activation.DataSource;
import javax.activation.FileDataSource;
import javax.mail.BodyPart;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Multipart;
import javax.mail.PasswordAuthentication;
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 JavaMailUtils {

    /**
     * 发送文本邮件
     * @param javaMail
     * @return
     */
    public static boolean sendTextMail(JavaMail javaMail){
        return sendMail(javaMail, false);
    }

    /**
     * 发送HTML邮件
     * @param javaMail
     * @return
     */
    public static boolean sendHtmlMail(JavaMail javaMail){
        return sendMail(javaMail, true);
    }

    private static boolean sendMail(final JavaMail javaMail, boolean isHtml){

        boolean flag = true;

        Properties props = new Properties();
        props.put("mail.smtp.auth", "true");
        props.put("mail.smtp.starttls.enable", "true");
        props.put("mail.smtp.host", javaMail.getHost());
        props.put("mail.smtp.port", "587");

        Session session = Session.getInstance(props,
          new javax.mail.Authenticator() {
            protected PasswordAuthentication getPasswordAuthentication() {
                return new PasswordAuthentication(javaMail.getUsername(), javaMail.getPassword());
            }
          });

        try {

            Message message = new MimeMessage(session);
            message.setFrom(new InternetAddress(javaMail.getUsername()));

            // 接收邮件邮箱: 只可发送单个用户
            message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(javaMail.getToMail()));

            // 抄送邮箱: 可抄送多个用户 
            if (javaMail.getCcMails() != null && javaMail.getCcMails().length > 0) {
                StringBuffer cc = new StringBuffer(javaMail.getCcMails()[0]);
                for (int i = 1; i < javaMail.getCcMails().length; i++) {
                    cc.append(",").append(javaMail.getCcMails()[i]);
                }
                message.setRecipients(Message.RecipientType.CC, InternetAddress.parse(cc.toString()));
            }
            // 密送邮箱:可密送多个用户 
            if (javaMail.getBccMails() != null && javaMail.getBccMails().length > 0) {
                StringBuffer bcc = new StringBuffer(javaMail.getBccMails()[0]);
                for (int i = 1; i < javaMail.getBccMails().length; i++) {
                    bcc.append(",").append(javaMail.getBccMails()[i]);
                }
                message.setRecipients(Message.RecipientType.BCC, InternetAddress.parse(bcc.toString()));
            }

            // 设置邮箱主题 
            message.setSubject(javaMail.getSubject());

            Multipart multipart = new MimeMultipart();

            /* 第一部分: 设置邮件body正文 */
            BodyPart bodyPart = new MimeBodyPart();
            if(isHtml){
                bodyPart.setContent(javaMail.getContent(), "text/html;charset=UTF-8");
            }else{
                bodyPart.setText(javaMail.getContent());;
            }
            multipart.addBodyPart(bodyPart);

            /* 第二部分: 设置邮件附件 */
            if(javaMail.getAttachments() != null && javaMail.getAttachments().length > 0){
                for (int i = 0; i < javaMail.getAttachments().length; i++) {
                    bodyPart = new MimeBodyPart();
                    String filename = javaMail.getAttachments()[i];
                    DataSource source = new FileDataSource(filename);
                    bodyPart.setDataHandler(new DataHandler(source));
                    bodyPart.setFileName(source.getName());
                    multipart.addBodyPart(bodyPart);
                }
            }

            message.setContent(multipart);
            Transport.send(message);

        } catch (MessagingException e) {
            flag = false;
            e.printStackTrace();
        }
        return flag;
    }

    private static String html(){
        return "<!DOCTYPE html>" +
            "<html lang='en'>" +
            "<head>" +
                "<meta charset='UTF-8'>" +
                "<title>test</title>" +
            "</head>" +
            "<body>" +
                "<div style='color: red; text-align: center'>" +
                    "<h1>Hello World</h1>" +
                "</div>" +
            "</body>" +
            "</html>";
    }

    public static void main(String[] args) {
        JavaMail javamail = new JavaMail();
        javamail.setSubject("test");
        javamail.setContent(html());
        javamail.setToMail("456789@qq.com");
        javamail.setAttachments(new String[]{"D:\\123.docx","D:\\BugReport.txt"});
        System.out.println(sendMail(javamail, true));
    }
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: