2021-01-25

一、引入依赖

 <!-- mail -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-mail</artifactId>
</dependency>

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>

二、配置邮箱的参数

spring: 
 mail:
    # 163
    host: smtp.163.com
    port:
    username: 你的邮箱
    password: 邮箱获取到的16位字符串长度的授权码
    protocol: smtp
    default-encoding: UTF-8
    properties:
      mail.smtp.auth: true
      mail.smtp.starttls.enable: true
      mail.smtp.starttls.required: true
      mail.smtp.socketFactory.port: 465
      mail.smtp.socketFactory.class: javax.net.ssl.SSLSocketFactory
      mail.smtp.socketFactory.fallback: false

三、写模板和发送内容(template.html)

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>邮件</title>
</head>
<body>
<div th:text="${subject}"></div>
<div>书籍清单
    <table border="1">
        <tr>
            <td>图书名称</td>
            <td>图书作者</td>
            <td>售卖本数</td>
        </tr>
        <tr th:each="book:${books}">
            <td th:text="${book.name}"></td>
            <td th:text="${book.coder}"></td>
            <td th:text="${book.count}"></td>
        </tr>
    </table>
</div>
</body>
</html>

-- SendEmailController

package com.wangguo.mybatisgen.controller;

import com.wangguo.mybatisgen.service.MailService;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.thymeleaf.TemplateEngine;
import org.thymeleaf.context.Context;

import java.util.ArrayList;
import java.util.List;
import java.util.UUID;

/**
 * @Author wangguo
 * @Date 2021/1/25
 */
@RequestMapping("/email")
@Slf4j
@RestController
public class SendEmailController {

    @Data
    @NoArgsConstructor
    @AllArgsConstructor
    public class Book {

        private String name;
        private String coder;
        private int count;
    }

    @Autowired
    private MailService mailService;

    @Autowired
    private TemplateEngine templateEngine;

    @GetMapping("/send")
    public void sendEmail(){
        Context context = new Context();
        context.setVariable("subject", "古典文化书籍");
        List<Book> books = new ArrayList<>();
        books.add(new Book("《西游记》",  "吴承恩", 100));
        books.add(new Book("《三国演义》",  "罗贯中", 100));
        books.add(new Book("《水浒传》",  "施耐庵", 1000));
        context.setVariable("books", books);
        String template = "template.html";//模板名称,位置 默认在resource/templates/xxx.html
        String to = "wangguo@tobosoft.com.cn";
        mailService.send(to, "模板邮件", UUID.randomUUID().toString().toUpperCase(),context,template);
    }

}

-- MailService

package com.wangguo.mybatisgen.service;

import org.thymeleaf.context.Context;

public interface MailService {

    public void send(String to, String subject, String text, Context context, String template);
}

-- MailServiceImpl

package com.wangguo.mybatisgen.service.impl;

import com.wangguo.mybatisgen.service.MailService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.stereotype.Service;

import javax.mail.*;
import javax.mail.internet.MimeMessage;
import org.thymeleaf.TemplateEngine;
import org.thymeleaf.context.Context;


@Service
@Slf4j
public class MailServiceImpl implements MailService {

    @Autowired
    private JavaMailSender mailSender;

    /**
     * 用来发送模版邮件
     */
    @Autowired
    private JavaMailSender javaMailSender;

    @Autowired
    private TemplateEngine templateEngine;


    @Override
    public void send(String to, String subject, String text, Context context,String template) {

            String from = "xxxxxx.com";//你邮箱地址
            String emailContent = templateEngine.process(template, context);
            MimeMessage message = mailSender.createMimeMessage();
            MimeMessageHelper helper = null;
            try {
                helper = new MimeMessageHelper(message, true);
                helper.setFrom(from);
                helper.setTo(to);
                helper.setSubject(subject);
                helper.setText(emailContent, true);
            } catch (MessagingException e) {
                e.printStackTrace();
            }
            mailSender.send(message);
        }
}

 

 

你提供的数据是一个典型的空气质量监测数据集,包含日期、AQI 和多种污染物浓度以及污染等级。我们可以基于此数据进行统计分析、可视化或模型训练等操作。 以下是一些可以执行的常见任务和示例代码: --- ### ✅ 1. 数据加载与查看 ```python import pandas as pd # 假设你的数据存储在一个 CSV 文件中 data = pd.read_csv("air_quality_data.csv") # 查看前几行数据 print(data.head()) ``` --- ### ✅ 2. 按污染等级分组统计污染物均值 ```python grouped_stats = data.groupby('污染等级').agg({ 'PM2.5': 'mean', 'PM10': 'mean', 'CO': 'mean', 'NO2': 'mean', 'SO2': 'mean', 'O3_8h': 'mean' }).reset_index() print(grouped_stats) ``` --- ### ✅ 3. 绘制箱线图(Boxplot)比较不同污染等级下的污染物分布 ```python import matplotlib.pyplot as plt import seaborn as sns pollutants = ['PM2.5', 'PM10', 'CO', 'NO2', 'SO2', 'O3_8h'] fig, axes = plt.subplots(2, 3, figsize=(16, 10), dpi=100) axes = axes.flatten() for i, pollutant in enumerate(pollutants): sns.boxplot(x='污染等级', y=pollutant, data=data, ax=axes[i], palette="Set2") axes[i].set_title(f'{pollutant} 分布') axes[i].tick_params(axis='x', rotation=45) plt.tight_layout() plt.show() ``` --- ### ✅ 4. 进行显著性检验(ANOVA 或 Kruskal-Wallis) ```python from scipy.stats import f_oneway, kruskal for pollutant in pollutants: groups = [group[pollutant].values for name, group in data.groupby('污染等级')] # 正态性检验(可选) normality_results = [stats.normaltest(group) for group in groups] p_values_normal = [p for stat, p in normality_results] if all(p > 0.05 for p in p_values_normal): f_stat, p_val = f_oneway(*groups) print(f"污染物 {pollutant}: ANOVA p-value = {p_val:.4f}") else: h_stat, p_val = kruskal(*groups) print(f"污染物 {pollutant}: Kruskal-Wallis p-value = {p_val:.4f}") ``` --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值