美洲杯外围下注_美洲杯投注导航_[所有网址]

美洲杯外围下注_美洲杯投注导航_[所有网址]是该公司为打造信誉第一,2014最新体验金,美洲杯外围下注_美洲杯投注导航_[所有网址]这里的所有老虎机游戏及真人百家乐游戏都具有欧洲风格,致力成为最具传播力和互动性的娱乐城网站。

SpringBoot 发送邮件

2019-05-29 09:21 来源:未知

准备

发送邮件应该是网站的必备功能之一,什么注册验证,忘记密码或者是给用户发送营销信息。最早期的时候我们会使用JavaMail相关api来写发送邮件的相关代码,后来spring退出了JavaMailSender更加简化了邮件发送的过程,在之后springboot对此进行了封装就有了现在的spring-boot-starter-mail,本章文章的介绍主要来自于此包。

项目源码:

1. 引入依赖

        <!-- 发送邮件依赖 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-mail</artifactId>
        </dependency>

一、发送简单文本邮件

上一篇文章已经讲到如何springboot如何实现邮件的发送,趁热打铁,这篇文章实现如下功能。
很多网站注册功能都会给您注册的邮箱发送一封邮件,里面是一串连接,点击链接激活功能,今天咱们就实现这个功能。

2. 在application.yml中配置必要的属性

PS: 在这里因为使用的是QQ邮箱,而QQ邮箱的软件收发服务是默认关闭的,需要手动打开
进入邮箱->账户设置

spring:
    mail:
        host: smtp.qq.com
        username: 邮箱用户名
        password: 密码或验证码
        properties:
          mail:
            smtp:
              auth: true
              starttls:
                enable: true
                required: true
1、build.gradle配置依赖
compile group: 'org.springframework.boot', name: 'spring-boot-starter-mail', version: '1.5.9.RELEASE'

原理:
在您注册的时候,User类中设置一个邮件码code,同时用户状态未激活。邮件码可以通过UUID实现,这样在注册的时候发送一封邮件,把这个邮件码以html的格式发送到指定邮箱,然后通过点击链接,把邮件码在提交到后台进行对比,如果邮件中的邮件码跟发送时设置的一样,就把用户状态改为激活,然后登陆即可。

3. 发送简单邮件

    @Autowired
    private JavaMailSender mailSender;

    @Test
    public void sendSimpleMail() throws Exception {
        SimpleMailMessage message = new SimpleMailMessage();
        message.setFrom("邮件发送方");
        message.setTo("邮件接收方");
        message.setSubject("主题");
        message.setText("正文");

        mailSender.send(message);
    }
2、在application.properties中添加邮箱配置
spring.mail.host=smtp.qiye.163.com //邮箱服务器地址
spring.mail.username=xxx@oo.com //用户名
spring.mail.password=xxyyooo    //密码
spring.mail.default-encoding=UTF-8

mail.fromMail.addr=xxx@oo.com  //以谁来发送邮件

开始编码

第一步搭搭建开发环境,只需要通过springboot整合mybatis实现用户注册登录功能即可,然后在注册的时候调用邮件接口发送邮件就可以了

4. 发送模板邮件(使用thymeleaf来做)

3、编写mailService,这里只提出实现类。
@Component
public class MailServiceImpl implements MailService{

    private final Logger logger = LoggerFactory.getLogger(this.getClass());

    @Autowired
    private JavaMailSender mailSender;

    @Value("${mail.fromMail.addr}")
    private String from;

    @Override
    public void sendSimpleMail(String to, String subject, String content) {
        SimpleMailMessage message = new SimpleMailMessage();
        message.setFrom(from);
        message.setTo(to);
        message.setSubject(subject);
        message.setText(content);

        try {
            mailSender.send(message);
            logger.info("简单邮件已经发送。");
        } catch (Exception e) {
            logger.error("发送简单邮件时发生异常!", e);
        }
    }
}

由于Spring Boot的starter模块提供了自动化配置,所以在引入了spring-boot-starter-mail依赖之后,会根据配置文件中的内容去创建JavaMailSender实例,因此我们可以直接在需要使用的地方直接@Autowired来引入邮件发送对象。

项目结构

图片 1
引入相关依赖,这里使用的是阿里巴巴druid数据库连接池

1. 引入thymeleaf依赖

<!-- 引入thymeleaf模块 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
            <version>2.0.0.RELEASE</version>
        </dependency>
4、编写test类进行测试

@RunWith(SpringRunner.class)
@SpringBootTest
public class MailServiceTest {

@Autowired
private MailService MailService;

@Test
public void testSimpleMail() throws Exception {
    MailService.sendSimpleMail("ityouknow@126.com","test simple mail"," hello this is simple mail");
}

}
至此一个简单的文本发送就完成了。

可能出现如下异常:
异常如下:

Exception in thread "main" org.springframework.mail.MailAuthenticationException: Authentication failed; nested exception is javax.mail.AuthenticationFailedException

Caused by: javax.mail.AuthenticationFailedException

遇到这个异常首先检查用户名密码配置是否正确,如果正确那就可能是邮箱的POP3/SMTP/IMAP服务没有开启,网易邮箱是默认关闭的,QQ邮箱也是默认关闭的。可以在邮箱的设置中开启POP3/SMTP/IMAP服务,但是开启该服务以后网易邮箱客户端和配置文件中的登录密码就变成重新设置的授权码了(记得修改配置文件中的密码为授权码,否则还是会报上述错误)。

pom.xml

<properties>        <java.version>1.8</java.version>    </properties>    <dependencies>        <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter-web</artifactId>        </dependency>        <!--MyBatis-->        <dependency>            <groupId>org.mybatis.spring.boot</groupId>            <artifactId>mybatis-spring-boot-starter</artifactId>            <version>1.3.2</version>        </dependency>        <!--SpringBoot测试支持-->        <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter-test</artifactId>            <scope>test</scope>        </dependency>        <!--MySQL-->        <dependency>            <groupId>mysql</groupId>            <artifactId>mysql-connector-java</artifactId>            <scope>runtime</scope>        </dependency>        <!--SpringBoot热部署-->        <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-devtools</artifactId>            <optional>true</optional> <!-- 这个需要为 true 热部署才有效 -->        </dependency>        <!--Druid数据库连接池-->        <dependency>            <groupId>com.alibaba</groupId>            <artifactId>druid-spring-boot-starter</artifactId>            <version>1.1.10</version>        </dependency>        <!--邮件-->        <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter-mail</artifactId>        </dependency>        <!--thymeleaf-->        <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter-thymeleaf</artifactId>        </dependency>    </dependencies>

上面引入了热部署依赖,不引人页是可以的。另外还有thymeleaf模板引擎,springboot默认支持此引擎

引入相关依赖之后,节下来根据项目结构创建对应的包,请参考上文中的结构图。在目录结构完善之后,下面开始配置相关属性

2. 配置thymeleaf

# thymeleaf 参数配置
spring:
  thymeleaf:
    cache: true
    prefix: classpath:/templates/
    suffix: .html
    encoding: UTF-8
    servlet:
      content-type: text/html
    check-template-location: true
    enabled: true
    mode: HTML5

二、发送html格式邮件

其它都不变在MailService添加sendHtmlMail方法.

public void sendHtmlMail(String to, String subject, String content) {
    MimeMessage message = mailSender.createMimeMessage();

    try {
        //true表示需要创建一个multipart message
        MimeMessageHelper helper = new MimeMessageHelper(message, true);
        helper.setFrom(from);
        helper.setTo(to);
        helper.setSubject(subject);
        helper.setText(content, true);

        mailSender.send(message);
        logger.info("html邮件发送成功");
    } catch (MessagingException e) {
        logger.error("发送html邮件时发生异常!", e);
    }
}

在测试类中构建html内容,测试发送

@Test
public void testHtmlMail() throws Exception {
    String content="<html>n"  
            "<body>n"  
            "    <h3>hello world ! 这是一封Html邮件!</h3>n"  
            "</body>n"  
            "</html>";
    MailService.sendHtmlMail("ityouknow@126.com","test simple mail",content);
}

application.properties配置

##热部署spring.devtools.remote.restart.enabled=truespring.devtools.restart.additional-paths=src/main## 数据库连接配置spring.datasource.type=com.alibaba.druid.pool.DruidDataSourcespring.datasource.driver-class-name=com.mysql.jdbc.Driverspring.datasource.url=jdbc:mysql://localhost:3306/test2?characterEncoding=utf-8&serverTimezone=GMT+8spring.datasource.username=“你的用户名”spring.datasource.password=“你的密码”#默认编码配置spring.http.encoding.charset=UTF-8spring.http.encoding.force=truespring.http.encoding.enabled=trueserver.tomcat.uri-encoding=UTF-8## MyBatis相关配置mybatis.type-aliases-package=com.jiangfeixiang.springbootemail.entitymybatis.mapper-locations=mapper/*.xmlspring.thymeleaf.prefix=classpath:/templates/##邮箱服务器地址##QQ smtp.qq.com##sina smtp.sina.cn##aliyun smtp.aliyun.com##163 smtp.163.comspring.mail.host=smtp.qq.com##邮箱用户名spring.mail.username=1016767658@qq.com##邮箱密码(注意:qq邮箱应该使用独立密码,去qq邮箱设置里面获取)spring.mail.password=ivhkrccrallkbdcf##编码格式spring.mail.default-encoding=UTF-8##发送邮件地址spring.mail.from=1016767658@qq.com

注意:数据库配置全部改写成您自己的账号密码,数据库等信息。邮箱配置不明白的可以参考上一篇springboot如何实现邮件的发送。

以上都完成之后,接下来是完善实体类,另外数据库这里就不在提示了,只有一个user类,可以自己完善一下

3. 编写模板

<html xmlns:th="http://www.w3.org/1999/xhtml">
<body>
<p>
    吾儿,错误,最后一次测试了!!!
</p>
</body>
</html>

三、发送带附件的邮件

在MailService添加sendAttachmentsMail方法.

public void sendAttachmentsMail(String to, String subject, String content, String filePath){
    MimeMessage message = mailSender.createMimeMessage();

    try {
        MimeMessageHelper helper = new MimeMessageHelper(message, true);
        helper.setFrom(from);
        helper.setTo(to);
        helper.setSubject(subject);
        helper.setText(content, true);

        FileSystemResource file = new FileSystemResource(new File(filePath));
        String fileName = filePath.substring(filePath.lastIndexOf(File.separator));
        helper.addAttachment(fileName, file);

        mailSender.send(message);
        logger.info("带附件的邮件已经发送。");
    } catch (MessagingException e) {
        logger.error("发送带附件的邮件时发生异常!", e);
    }
}

添加多个附件可以使用多条 helper.addAttachment(fileName, file)

在测试类中添加测试方法

@Test
public void sendAttachmentsMail() {
    String filePath="e:\tmp\application.log";
    mailService.sendAttachmentsMail("ityouknow@126.com", "主题:带附件的邮件", "有附件,请查收!", filePath);
}

实体类User

public class User implements Serializable {    private Integer id;    private String username;    private String password;    private String useremail;    /**     * 状态:0代表未激活,1代表激活     */    private Integer status;    /**     * 利用UUID生成一段数字,发动到用户邮箱,当用户点击链接时     * 在做一个校验如果用户传来的code跟我们发生的code一致,更改状态为“1”来激活用户     */    private String  code;    public Integer getId() {        return id;    }    public void setId(Integer id) {        this.id = id;    }    public String getUsername() {        return username;    }    public void setUsername(String username) {        this.username = username;    }    public String getPassword() {        return password;    }    public String getUseremail() {        return useremail;    }    public void setUseremail(String useremail) {        this.useremail = useremail;    }    public void setPassword(String password) {        this.password = password;    }    public Integer getStatus() {        return status;    }    public void setStatus(Integer status) {        this.status = status;    }    public String getCode() {        return code;    }    public void setCode(String code) {        this.code = code;    }    @Override    public String toString() {        return "User{"                  "id="   id                  ", username='"   username   '''                  ", password='"   password   '''                  ", useremail='"   useremail   '''                  ", status="   status                  ", code='"   code   '''                  '}';    }}

说明:

  • 用户状态status:0代表未激活,1代表激活,注册的时候,默认是0,只有激活邮箱激活码可以更改为1
  • 邮箱激活码code:利用UUID生成一段数字,发动到用户邮箱,当用户点击链接时,在做一个校验,如果用户传来的code跟我们发送的code一致,更改状态为“1”来激活用户

实体类完成之后下面开始完善dao以及对应的mapper.xml文件

TAG标签:
版权声明:本文由美洲杯外围下注发布于系统,转载请注明出处:SpringBoot 发送邮件