一、用普通java发送:

1、引入依赖jar包

<dependencies>
        <!-- Javamail -->
        <dependency>
            <groupId>javax.mail</groupId>
            <artifactId>mail</artifactId>
            <version>1.4.4</version>
        </dependency>
    </dependencies>

2、创建发送邮件的工具类,详情如下:

package com.fh;

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

public class Demo1 {
    /**
     * 发送邮件的工具类
     * @param recipientMap  收件人信息,map可对多个对象进行发送,map的key是邮箱,value是收取方式,支持发送to,抄送cc:抄送对象与发送对象互相可见,密送bcc:密送对象单方面可见发送和抄送的对象
     * @param subject       邮件的主题
     * @param content       邮件的正文
     * @throws Exception
     */
    public static void sendMail(Map<String,String> recipientMap, String subject, String content) throws  Exception{
        //发件属性
        Properties properties = new Properties();
        //连接协议
        properties.put("mail.transport.protocol","smtp");
        //发件服务器的主机地址,用谁的服务器(腾讯邮箱、网易邮箱等)设置谁的smtp地址,需要去对应邮箱网站上查询获得,本例为网易163
        properties.setProperty("mail.smtp.host","smtp.163.com");
        //发送服务器的端口号
        //properties.put("mail.smtp.port",25);//25端口为SMTP(Simple Mail Transfer Protocol,简单邮件传输协议)服务所开放的,是用于发送邮件。

        //465端口为SMTP为基于smtp协议的变种协议,替代25端口,安全性更高
        properties.put("mail.smtp.port",465);
        // 设置是否使用ssl安全连接 ---一般都使用,与端口465组合使用
        properties.put("mail.smtp.ssl.enable", "true");
        //设置发件必须认证
        properties.setProperty("mail.smtp.auth","true");

        //创建发件会话
        Session session = Session.getInstance(properties);
        //设置debug
        session.setDebug(true);
        //由发件的会话创建邮件消息对象
        MimeMessage message = new MimeMessage(session);

        //设置消息内容
        //设置邮件来源:发件人的邮箱
        message.setFrom(new InternetAddress("xxxx@163.com"));
        //设置邮件的接收:收件人的邮箱.第一个参数:TO 发送  CC 抄送  BCC 密送
        for (Map.Entry<String,String> me : recipientMap.entrySet()) {
            String mail = me.getKey();
            String type = me.getValue();
            if ("to".equalsIgnoreCase(type)) {
                //发送
                message.setRecipient(Message.RecipientType.TO,new InternetAddress(mail));
            }else if ("cc".equalsIgnoreCase(type)) {
                //抄送
                message.setRecipient(Message.RecipientType.CC,new InternetAddress(mail));
            } else if ("bcc".equalsIgnoreCase(type)) {
                //密送
                message.setRecipient(Message.RecipientType.BCC,new InternetAddress(mail));
            }
        }
        //邮件主题
        message.setSubject(subject);
        //邮件内容
        message.setText(content);

        //利用当前使用协议,获取发送器对象
        Transport transport = session.getTransport("smtp");
        //利用发送器对象获取连接,因为上文自己设置的需要认证,因此要阐明发件人登陆的用户名和密码
        transport.connect("xxxx","pppp");
        //12.发送,参2表示对所有收件人均发送信息
        transport.sendMessage(message,message.getAllRecipients());
        //13.释放资源
        transport.close();
    }
}

二:集成spring发送:

1、增加spring依赖:

<dependency>
     <groupId>org.springframework</groupId>
     <artifactId>spring-context-support</artifactId>
     <version>5.0.4.RELEASE</version>
 </dependency>

2、新建配置文件mail.properties:

#发件箱名称。即:从哪个邮箱发出
mail.from=aaaa@163.com
#指定smtp服务器的地址。即:从哪个服务器发出
mail.host=localhost
#指定smtp服务器的端口
mail.port=25
#指定发件箱的登录用户名
mail.username=aaaa
#指定发件箱的登录密码
mail.password=pppp
#指定发送邮件所用的编码
mail.encoding=UTF-8
#指定发送邮件所用的协议。不写默认也是smtp协议。
mail.protocol=smtp

3、新建spring容器的配置文件applicationContext-mail.xml,管理发送消息对象和发送器对象:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       					   http://www.springframework.org/schema/beans/spring-beans.xsd
       					   http://www.springframework.org/schema/context
       					   http://www.springframework.org/schema/context/spring-context.xsd">
    <!--加载配置文件,引入其内各个属性,可被直接调用-->
    <context:property-placeholder location="classpath:mail.properties"/>
    <!--配置消息对象:发送什么-->
    <bean id="simpleMailMessage" class="org.springframework.mail.SimpleMailMessage">
        <!-- 此时我们只需要注入发件箱名称即可。不要注入主题,正文,收件箱等等信息,
        因为那些信息是不固定的,在使用本配置文件的类中随时更改配置 -->
        <property name="from" value="${mail.from}"/>
    </bean>
    <!--配置发送器:用什么发送-->
    <bean id="javaMailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
        <property name="username" value="${mail.username}"/>
        <property name="password" value="${mail.password}"/>
        <property name="host" value="${mail.host}"/>
        <property name="protocol" value="${mail.protocol}"/>
        <property name="defaultEncoding" value="${mail.encoding}"/>
        <property name="port" value="${mail.port}"/>
        <property name="javaMailProperties">
            <props>
                <prop key="mail.smtp.auth">true</prop><!-- 是否需要验证 -->
                <prop key="mail.debug">true</prop><!-- 是否需要debug的信息 -->
                <prop key="mail.smtp.timeout">0</prop><!-- 设置发送超时时间,以秒为单位。0为永不超时 -->
            </props>
        </property>
    </bean>
</beans>

4、在测试类中使用:

package com.fh.test;

import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSenderImpl;

public class MailTest {
    public static void main(String[] args) {
        //获取spring容器
        ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext-mail.xml");

        //获取spring内管理的简单消息对象
        SimpleMailMessage simpleMailMessage = applicationContext.getBean("simpleMailMessage", SimpleMailMessage.class);
        //设置发送地址
        simpleMailMessage.setTo("demo1@163.com");
        simpleMailMessage.setCc("demo2@163.com");
        simpleMailMessage.setBcc("demo3@163.com");
        //设置发送消息主题
        simpleMailMessage.setSubject("爱德华");
        //设置发送消息内容
        simpleMailMessage.setText("钢之炼金术师就是我咯");

        //获取发送器
        JavaMailSenderImpl javaMailSender = applicationContext.getBean("javaMailSender", JavaMailSenderImpl.class);
        //由于配置文件配置好了,所以直接利用发送器发送邮件
        javaMailSender.send(simpleMailMessage);
    }
}

三、spring集成下的复杂文件类型邮件(带图片、附件):

测试类中:

package com.fh.test;

import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.core.io.FileSystemResource;
import org.springframework.mail.javamail.JavaMailSenderImpl;
import org.springframework.mail.javamail.MimeMessageHelper;

import javax.mail.internet.MimeMessage;

public class MailTest {
    public static void main(String[] args) throws Exception {
        //获取spring容器
        ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext-mail.xml");
        //由容器获取发送器
        JavaMailSenderImpl javaMailSender = applicationContext.getBean("javaMailSender", JavaMailSenderImpl.class);
        //设置发送复杂消息的复杂消息对象
        /**
         * 在此说明mime类型:Multipurpose Internet Mail Extensions(多用途互联网邮件扩展类型),由其确定传输文件类型,只要独立进入网络(互联网/局域网)传输的文件都具有mime类型
         * 如css引入主题文件时:<link rel="stylesheet" href="xxx.css" type="text/css"></> rel表示引入文件与本文件的关系,href为引入文件的地址,type表示该独立传入的引入文件的mime类型
         */
        MimeMessage mimeMessage = javaMailSender.createMimeMessage();
        //利用复杂消息对象,新建复杂邮件消息拼装帮助器,设置虽然是利用帮助对象,但其实内容本身还是设置到了消息对象上,参2的true表示支持multipart
        MimeMessageHelper helper = new MimeMessageHelper(mimeMessage,true);
        //设置主题
        helper.setSubject("带有图片和附件的邮件");
        //设置内容,参2为true表示开启html格式设置,注意html中cid:image后的空格
        helper.setText("<html><head></head><body><div>动漫图片范例</div><img src=cid:image /></body></html>",true);
        //用待传入图片建立文件源
        FileSystemResource resource = new FileSystemResource("C:\\testdemo\\1000.jpg");
        //将文件源指向cid
        helper.addInline("image",resource);

        //利用文件源,设置发送邮件的附件
        helper.addAttachment("就是这张咯.jpg",resource);

        //设置收件地址
        helper.setTo("aaa@163.com");
        //设置发件地址
        helper.setFrom("bbb@163.com");
        //发送邮件
        javaMailSender.send(mimeMessage);

    }
}