目录[-]





环境介绍

  • Java 版本:1.8.0_191
  • JavaMail 版本:1.6.2

一、配置邮箱

为了设置发件邮箱能有发送邮件权限,请先设置邮箱开启 POP3/SMPT/IMAP 等选项。

这里用的是 163 邮箱

javamail Outlook msg文件 java调用outlook发邮件_实体类

二、Maven 引入包

<dependency>
    <groupId>com.sun.mail</groupId>
    <artifactId>javax.mail</artifactId>
    <version>1.6.2</version>
</dependency>

三、邮件实体类

邮件内容实体类,定义一些发送邮件的属性。

注意,为了简化实体类写法,这里使用了 lombok 工具。实体类

import lombok.Data;

@Data
public class SimpleMail {
    private String[] to;
    private String[] cc;
    private String[] bcc;
    private String from;
    private String host;
    private String subject;
    private String body;
    private String[] attachment;
    private String username;
    private String password;
    private Boolean isHtml;
}

四、发送邮件工具类

发送邮件工具类,用词工具调用 JavaMail 发送邮件。

import javax.activation.DataHandler;
import javax.activation.DataSource;
import javax.activation.FileDataSource;
import javax.mail.*;
import javax.mail.internet.*;
import java.io.UnsupportedEncodingException;
import java.util.*;

public class MailUtils {
    
    /**
     * 发送邮件
     * @param simpleMail
     */
    public static void sendMail(SimpleMail simpleMail) {
        /** 获取系统属性 **/
        Properties properties = System.getProperties();
        /** 设置邮件服务器 **/
        properties.setProperty("mail.smtp.host", simpleMail.getHost());
        /** 设置服务器验证为true **/
        properties.put("mail.smtp.auth", "true");
        /** 获取默认session对象 **/
        Session session = Session.getDefaultInstance(properties, new Authenticator() {
            // 设置提供的发件邮箱与给的邮箱授权码
            public PasswordAuthentication getPasswordAuthentication() {
                return new PasswordAuthentication(simpleMail.getUsername(), simpleMail.getPassword());
            }
        });
        try {
            /** 创建默认的 MimeMessage 对象 **/
            MimeMessage message = new MimeMessage(session);
            /** 设置发件人 **/
            message.setFrom(new InternetAddress(simpleMail.getFrom()));
            /** 设置收件人、抄送、密送 **/
            List<InternetAddress> toList = new ArrayList<>();
            List<InternetAddress> ccList = new ArrayList<>();
            List<InternetAddress> bccList = new ArrayList<>();
            if (simpleMail.getTo() != null) {
                for (String str : simpleMail.getTo()) {
                    toList.add(new InternetAddress(str));
                }
                message.addRecipients(Message.RecipientType.TO, toList.toArray(new InternetAddress[]{}));
            }
            if (simpleMail.getCc() != null) {
                for (String str : simpleMail.getCc()) {
                    toList.add(new InternetAddress(str));
                }
                message.addRecipients(Message.RecipientType.CC, ccList.toArray(new InternetAddress[]{}));
            }
            if (simpleMail.getBcc() != null) {
                for (String str : simpleMail.getBcc()) {
                    toList.add(new InternetAddress(str));
                }
                message.addRecipients(Message.RecipientType.BCC, bccList.toArray(new InternetAddress[]{}));
            }
            // 设置标题Subject
            message.setSubject(simpleMail.getSubject());
            //message.setText(simpleMail.getBody());
            /** 创建消息部分 **/
            // 创建消息体对象
            BodyPart messageBodyPart = new MimeBodyPart();
            // 创建多重消息对象
            Multipart multipart = new MimeMultipart();
            /** 设置消息 **/
            //messageBodyPart.setText(simpleMail.getBody());
            if (simpleMail.getIsHtml()) {
                messageBodyPart.setContent(simpleMail.getBody(), "text/html;charset=utf-8");
            } else {
                messageBodyPart.setContent(simpleMail.getBody(), "text/plain;charset=utf-8");
            }
            // 添加到 multipart
            multipart.addBodyPart(messageBodyPart);
            /** 设置附件 **/
            if (simpleMail.getAttachment()!=null){
                for (String str:simpleMail.getAttachment()){
                    messageBodyPart = new MimeBodyPart();
                    DataSource source = new FileDataSource(str);
                    messageBodyPart.setDataHandler(new DataHandler(source));
                    // 设置文件名
                    System.out.println(str);
                    messageBodyPart.setFileName(MimeUtility.encodeText(str.substring(str.lastIndexOf("/")+1)));
                    // 添加到 multipart
                    multipart.addBodyPart(messageBodyPart);
                }
            }
            /** 设置消息内容与附件 **/
            message.setContent(multipart);
            /** 发送消息 **/
            Transport.send(message);
            System.out.println("发送成功!");
        } catch (MessagingException | UnsupportedEncodingException mex) {
            mex.printStackTrace();
        }
    }

}

五、测试的 Main 方法

先编写自定义的实体对象,将邮件内容、收件人、发件人等等定义好,在用此实体对象当参数调用邮件发送工具类发送邮件。

public static void main(String[] args) {
        /** 1、设置发送邮件内容对象 **/
        SimpleMail simpleMail = new SimpleMail();
        // 指定发送邮件的主机
        simpleMail.setHost("smtp.163.com");
        // 收件人电子邮箱
        simpleMail.setTo(new String[]{"32******7@qq.com", "mydlq.club@gmail.com"});
        // 收件人抄送
        simpleMail.setCc(new String[]{"123456789@qq.com"});
        // 收件人密送
        simpleMail.setTo(new String[]{"111111111@qq.com"});
        // 发件人电子邮箱
        simpleMail.setFrom("m*******lq@163.com");
        // 邮件主题
        simpleMail.setSubject("测试邮件");
        // 邮件内容
        //simpleMail.setBody("这是一封测试邮件");
        simpleMail.setBody("<html>" +
                              "<p>主题:测试</p>" +
                              "<p>结果:签到人数:xxx</p>" +
                           "</html>");
        // 是否为 HTML 格式邮件
        simpleMail.setIsHtml(true);
        // 邮件附件
        simpleMail.setAttachment(new String[]{"d://非签到表.xlsx", "d://签到表.xlsx"});
        // 设置发件邮箱的用户名、验证码
        simpleMail.setUsername("m******lq@163.com");
        simpleMail.setPassword("a*******0");

        /** 2、调用方法发送邮件 **/
        // 发送邮件测试
        sendMail(simpleMail);
    }

六、查看收到的邮件效果

上面代码执行成功后邮箱就会收到一条邮件信息,如下:

javamail Outlook msg文件 java调用outlook发邮件_实体类_02