java发送email文件

1. 加入jar包

<dependency>
    <groupId>javax.mail</groupId>
    <artifactId>mail</artifactId>
    <version>1.5.0-b01</version>
</dependency>

2.编码如下:

方式1:

import java.util.Date;
import java.util.Properties;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;

public class EmailTest {
    
    public static String myEmailAccount = "mabiao008@126.com"; // 发件人邮箱地址
    public static String myEmailPassword = "XXXXXX"; // 发件人邮箱密码
    public static String myEmailSMTPHost = "smtp.126.com";
    public static String receiveMailAccount = "360227812@qq.com"; // 收件人邮箱地址
    public static void main(String[] args) throws Exception {
        // 1. 创建参数配置, 用于连接邮件服务器的参数配置
        Properties props = new Properties();                    // 参数配置
        props.setProperty("mail.transport.protocol", "smtp");   // 使用的协议(JavaMail规范要求)
        props.setProperty("mail.host", myEmailSMTPHost);        // 发件人的邮箱的 SMTP 服务器地址
        props.setProperty("mail.smtp.auth", "true");
        // 2. 根据配置创建会话对象, 用于和邮件服务器交互
        Session session = Session.getDefaultInstance(props);
        session.setDebug(true); // 设置为debug模式, 如果值为true则可以查看详细的发送 log
        // 3. 创建一封邮件
        MimeMessage message = createMimeMessage(session, myEmailAccount, receiveMailAccount);
        // 4. 根据 Session 获取邮件传输对象
        Transport transport = session.getTransport();
        // 5. 使用 邮箱账号 和 密码 连接邮件服务器--这里认证的邮箱必须与 message 中的发件人邮箱一致,否则报错
        transport.connect(myEmailAccount, myEmailPassword);
        // 6. 发送邮件, 发到所有的收件地址, message.getAllRecipients() 获取到的是在创建邮件对象时添加的所有收件人, 抄送人, 密送人
        transport.sendMessage(message, message.getAllRecipients());
        // 7. 关闭连接
        transport.close();
    }

    /**
     * 创建一封只包含文本的简单邮件
     *
     * @param session 和服务器交互的会话
     * @param sendMail 发件人邮箱
     * @param receiveMail 收件人邮箱
     * @return
     * @throws Exception
     */
    public static MimeMessage createMimeMessage(Session session, String sendMail, String receiveMail) throws Exception {
        // 1. 创建一封邮件
        MimeMessage message = new MimeMessage(session);
        // 2. From: 发件人
        message.setFrom(new InternetAddress(sendMail, "mabiao008", "UTF-8"));
        // 3. To: 收件人(可以增加多个收件人、抄送、密送)
        message.setRecipient(MimeMessage.RecipientType.TO, new InternetAddress(receiveMail, "测试", "UTF-8"));
        // 4. Subject: 邮件主题
        message.setSubject("测试邮件", "UTF-8");
        // 5. Content: 邮件正文(可以使用html标签)
        message.setContent("<font color=\"red\">欢迎光临我的博客: http://www.cnblogs.com/mabiao008/ </font>", "text/html;charset=UTF-8");
        // 6. 设置发件时间
        message.setSentDate(new Date());
        // 7. 保存设置
        message.saveChanges();
        return message;
    }
}

方式2:

需要3个java文件支持

(1)MailSenderInfo.java

import java.util.Properties;

/** 
 * 发送邮件需要使用的基本信息  
 * @author mabiao
 */
public class MailSenderInfo {
    // 发送邮件的服务器的IP  
    private String mailServerHost;      
    // 发送邮件的服务器的端口      
    private String mailServerPort = "25";      
    // 邮件发送者的地址      
    private String fromAddress;      
    // 邮件接收者的地址      
    private String[] toAddress;  
    // 邮件密送接收者的地址  
    private String[] toBlindCarbonCopyAddress;  
    // 邮件抄送接收者的地址  
    private String[] toCarbonCopyAddress;  
    // 登陆邮件发送服务器的用户名  
    private String userName;  
    // 登陆邮件发送服务器的密码      
    private String password;      
    // 是否需要身份验证      
    private boolean validate = false;      
    // 邮件主题      
    private String subject;      
    // 邮件的文本内容      
    private String content;      
    // 邮件附件的文件名      
    private String[] attachFileNames;  
      
    /** 
     * 获得邮件会话属性 
     */  
    public Properties getProperties() {  
        Properties pro = new Properties();  
        pro.put("mail.smtp.host", this.mailServerHost);  
        pro.put("mail.smtp.port", this.mailServerPort);  
        pro.put("mail.smtp.auth", validate ? "true" : "false");  
        return pro;  
    }  
      
    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 String getFromAddress() {  
        return fromAddress;  
    }  
    public void setFromAddress(String fromAddress) {  
        this.fromAddress = fromAddress;  
    }  
    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 getPassword() {  
        return password;  
    }  
    public void setPassword(String password) {  
        this.password = password;  
    }  
    public boolean isValidate() {  
        return validate;  
    }  
    public void setValidate(boolean validate) {  
        this.validate = validate;  
    }  
    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[] getAttachFileNames() {  
        return attachFileNames;  
    }  
    public void setAttachFileNames(String[] attachFileNames) {  
        this.attachFileNames = attachFileNames;  
    }  
  
    public String[] getToBlindCarbonCopyAddress() {  
        return toBlindCarbonCopyAddress;  
    }  
  
    public void setToBlindCarbonCopyAddress(String[] toBlindCarbonCopyAddress) {  
        this.toBlindCarbonCopyAddress = toBlindCarbonCopyAddress;  
    }  
  
    public String[] getToCarbonCopyAddress() {  
        return toCarbonCopyAddress;  
    }  
  
    public void setToCarbonCopyAddress(String[] toCarbonCopyAddress) {  
        this.toCarbonCopyAddress = toCarbonCopyAddress;  
    }  
}

(2).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);  
    }  
      
    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;  
    }  
}

(3).SimpleMailSender.java

import java.io.UnsupportedEncodingException;  
import java.util.Date;  
import java.util.Properties;  
import javax.activation.DataHandler;  
import javax.activation.DataSource;  
import javax.activation.FileDataSource;  
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.AddressException;  
import javax.mail.internet.InternetAddress;  
import javax.mail.internet.MimeBodyPart;  
import javax.mail.internet.MimeMessage;  
import javax.mail.internet.MimeMultipart;  
import javax.mail.internet.MimeUtility; 

public class SimpleMailSender {
    /** 
     * 以文本格式发送邮件 (支持群发,带附件) 
     * @param senderInfo 待发送的邮件的信息  
     * @return 
     */  
    public static boolean sendMail(MailSenderInfo senderInfo){  
        boolean flag = false;  
          
        // 判断是否需要身份验证  
        MyAuthenticator authenticator = null;  
        Properties props = senderInfo.getProperties();  
        if(senderInfo.isValidate()){  
            // 如果需要身份认证,则创建一个密码验证器     
            authenticator = new MyAuthenticator(senderInfo.getUserName(), senderInfo.getPassword());  
        }  
        // 根据邮件会话属性和密码验证器构造一个发送邮件的session  
        Session sendMailSession = Session.getDefaultInstance(props, authenticator);  
          
        try {  
            // 根据session创建一个邮件消息  
            Message sendMailMessage = new MimeMessage(sendMailSession);  
            // 创建邮件发送者地址  
            Address from = new InternetAddress(senderInfo.getFromAddress());  
            // 设置邮件消息的发送者  
            sendMailMessage.setFrom(from);  
              
            // 创建邮件接收者地址  
            String[] tos = senderInfo.getToAddress();  
            if(tos != null && tos.length != 0){  
                InternetAddress[] to = new InternetAddress[tos.length];  
                // 设置邮件消息的发送者  
                for (int i = 0; i < tos.length; i++) {  
                    to[i] = new InternetAddress(tos[i]);  
                }  
                sendMailMessage.setRecipients(Message.RecipientType.TO, to);  
            }  
              
            // 设置邮件抄送者地址  
            String[] toCCs = senderInfo.getToCarbonCopyAddress();  
            if(toCCs != null && toCCs.length != 0){  
                InternetAddress[] toCC = new InternetAddress[toCCs.length];  
                // 设置邮件消息的发送者  
                for (int i = 0; i < toCCs.length; i++) {  
                    toCC[i] = new InternetAddress(toCCs[i]);  
                }  
                sendMailMessage.addRecipients(Message.RecipientType.CC, toCC);  
            }  
              
            // 设置邮件密送者地址  
            String[] toBCCs = senderInfo.getToBlindCarbonCopyAddress();  
            if(toBCCs != null && toBCCs.length != 0){  
                InternetAddress[] toBCC = new InternetAddress[toBCCs.length];  
                for (int i = 0; i < toBCCs.length; i++) {  
                    toBCC[i] = new InternetAddress(toBCCs[i]);  
                }  
                sendMailMessage.addRecipients(Message.RecipientType.BCC, toBCC);  
            }  
              
            // 设置邮件主题  
            sendMailMessage.setSubject(MimeUtility.encodeText(senderInfo.getSubject(),"utf-8","B"));  
            // 设置邮件内容  
            //sendMailMessage.setText(senderInfo.getContent());  
            Multipart multipart = new MimeMultipart();  
            // 邮件文本内容  
            if(senderInfo.getContent() != null && !"".equals(senderInfo.getContent())){  
                BodyPart part = new MimeBodyPart();  
                part.setContent(senderInfo.getContent(), "text/plain;charset=utf-8");//设置邮件文本内容  
                multipart.addBodyPart(part);  
            }  
              
            // 附件  
            String attachFileNames[] = senderInfo.getAttachFileNames();  
            int leng = attachFileNames == null ? 0 : attachFileNames.length;  
            for (int i = 0; i < leng; i++) {  
                BodyPart part = new MimeBodyPart();  
                // 根据文件名获取数据源  
                DataSource dataSource = new FileDataSource(attachFileNames[i]);  
                DataHandler dataHandler = new DataHandler(dataSource);  
                // 得到附件本身并至入BodyPart  
                part.setDataHandler(dataHandler);  
                // 得到文件名同样至入BodyPart  
                part.setFileName(MimeUtility.encodeText(dataSource.getName()));  
                multipart.addBodyPart(part);  
            }  
              
            sendMailMessage.setContent(multipart);  
            // 设置邮件发送的时间  
            sendMailMessage.setSentDate(new Date());  
            // 发送邮件  
            //Transport.send(sendMailMessage);  
            Transport transport = sendMailSession.getTransport("smtp");  
            transport.connect(senderInfo.getUserName(), senderInfo.getPassword());  
            transport.send(sendMailMessage,sendMailMessage.getAllRecipients());  
            transport.close();  
              
            flag = true;  
        } catch (AddressException e) {  
            e.printStackTrace();  
        } catch (MessagingException e) {  
            e.printStackTrace();  
        } catch (UnsupportedEncodingException e) {  
            e.printStackTrace();  
        }  
          
        return flag;  
    }  
      
    public static boolean sendHtmlMail(MailSenderInfo senderInfo){  
        boolean flag = false;  
          
        // 判断是否需要身份验证  
        MyAuthenticator authenticator = null;  
        Properties props = senderInfo.getProperties();  
        if(senderInfo.isValidate()){  
            // 如果需要身份认证,则创建一个密码验证器     
            authenticator = new MyAuthenticator(senderInfo.getUserName(), senderInfo.getPassword());  
        }  
        // 根据邮件会话属性和密码验证器构造一个发送邮件的session  
        Session sendMailSession = Session.getDefaultInstance(props, authenticator);  
          
        try {  
            // 根据session创建一个邮件消息  
            Message sendMailMessage = new MimeMessage(sendMailSession);  
            // 创建邮件发送者地址  
            Address from = new InternetAddress(senderInfo.getFromAddress());  
            // 设置邮件消息的发送者  
            sendMailMessage.setFrom(from);  
              
            // 创建邮件接收者地址  
            String[] tos = senderInfo.getToAddress();  
            if(tos != null && tos.length != 0){  
                InternetAddress[] to = new InternetAddress[tos.length];  
                // 设置邮件消息的发送者  
                for (int i = 0; i < tos.length; i++) {  
                    to[i] = new InternetAddress(tos[i]);  
                }  
                sendMailMessage.setRecipients(Message.RecipientType.TO, to);  
            }  
              
            // 设置邮件抄送者地址  
            String[] toCCs = senderInfo.getToCarbonCopyAddress();  
            if(toCCs != null && toCCs.length != 0){  
                InternetAddress[] toCC = new InternetAddress[toCCs.length];  
                // 设置邮件消息的发送者  
                for (int i = 0; i < toCCs.length; i++) {  
                    toCC[i] = new InternetAddress(toCCs[i]);  
                }  
                sendMailMessage.addRecipients(Message.RecipientType.CC, toCC);  
            }  
              
            // 设置邮件密送者地址  
            String[] toBCCs = senderInfo.getToBlindCarbonCopyAddress();  
            if(toBCCs != null && toBCCs.length != 0){  
                InternetAddress[] toBCC = new InternetAddress[toBCCs.length];  
                for (int i = 0; i < toBCCs.length; i++) {  
                    toBCC[i] = new InternetAddress(toBCCs[i]);  
                }  
                sendMailMessage.addRecipients(Message.RecipientType.BCC, toBCC);  
            }  
              
            // 设置邮件主题  
            sendMailMessage.setSubject(MimeUtility.encodeText(senderInfo.getSubject(),"utf-8","B"));  
            // 设置邮件内容  
            //sendMailMessage.setText(senderInfo.getContent());  
            Multipart multipart = new MimeMultipart();  
            // 邮件文本内容  
            if(senderInfo.getContent() != null && !"".equals(senderInfo.getContent())){  
                BodyPart part = new MimeBodyPart();  
                part.setContent(senderInfo.getContent(), "text/html;charset=utf-8");//设置邮件文本内容  
                multipart.addBodyPart(part);  
            }  
              
            // 附件  
            String attachFileNames[] = senderInfo.getAttachFileNames();  
            int leng = attachFileNames == null ? 0 : attachFileNames.length;  
            for (int i = 0; i < leng; i++) {  
                BodyPart part = new MimeBodyPart();  
                // 根据文件名获取数据源  
                DataSource dataSource = new FileDataSource(attachFileNames[i]);  
                DataHandler dataHandler = new DataHandler(dataSource);  
                // 得到附件本身并至入BodyPart  
                part.setDataHandler(dataHandler);  
                // 得到文件名同样至入BodyPart  
                part.setFileName(MimeUtility.encodeText(dataSource.getName()));  
                multipart.addBodyPart(part);  
            }  
              
            sendMailMessage.setContent(multipart);  
            // 设置邮件发送的时间  
            sendMailMessage.setSentDate(new Date());  
            // 发送邮件  
            //Transport.send(sendMailMessage);  
            Transport transport = sendMailSession.getTransport("smtp");  
            transport.connect(senderInfo.getUserName(), senderInfo.getPassword());  
            transport.send(sendMailMessage,sendMailMessage.getAllRecipients());  
              
            // 关闭transport  
            transport.close();  
              
            flag = true;  
        } catch (AddressException e) {  
            e.printStackTrace();  
        } catch (MessagingException e) {  
            e.printStackTrace();  
        } catch (UnsupportedEncodingException e) {  
            e.printStackTrace();  
        }  
          
        return flag;  
    }  
}

(4)MailSendTest.java

import org.junit.Test;

/**
 * 发送邮件测试
 */
public class MailSendTest {
    @Test
    public void run() {
        MailSenderInfo mailInfo = new MailSenderInfo();  
        mailInfo.setMailServerHost("smtp.126.com");  
        mailInfo.setMailServerPort("25");  
        mailInfo.setValidate(true);  
        mailInfo.setUserName("mabiao008"); // 发送人的邮箱用户名
        mailInfo.setPassword("XXXX"); // 发送人的邮箱密码  
        mailInfo.setFromAddress("mabiao008@126.com");  
        String[] to = {"360227812@qq.com"}; // 接收者的邮箱地址
        mailInfo.setToAddress(to);  
//        String[] toCC = {"**********@qq.com"};  
//        mailInfo.setToCarbonCopyAddress(toCC);  
//        String[] toBCC = {"*******@sina.com"};  
//        mailInfo.setToBlindCarbonCopyAddress(toBCC);  
//        mailInfo.setAttachFileNames(new String[]{"D:/201611151651020897178_A.jpeg"});  
        mailInfo.setSubject("发送HTML邮件");  
        String body = "<table width=\"80%\" 1\" cellpadding=\"0\" cellspacing=\"0\" align:center;text-align:center\"><tr><td>你好</td><td>你好</td><td>你好</td></tr></table>";  
        mailInfo.setContent(body);  
        // 这个类主要来发送邮件  
        System.out.println(SimpleMailSender.sendHtmlMail(mailInfo));;//发送文体格式  
    }
}