IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发工具 -> idea中发送邮件时配置文件中中文乱码问题 -> 正文阅读

[开发工具]idea中发送邮件时配置文件中中文乱码问题

昨天写了一个发送邮件的测试

首先写一个简单的小测试:

public class TestEmail {
    public static void main(String[] args) {
        try{
            HtmlEmail email = new HtmlEmail();
            //设置发邮件邮箱的用户名和密码(授权密码)
            email.setAuthentication("用户名 ","授权密码");
            //设置发送邮件服务器(SMTP服务器)域名
            email.setHostName("smtp.163.com");
            //设置收件人的邮箱
            email.addTo("收件人邮箱@qq.com");
            //设置发件人的邮箱
            email.setFrom("发件人邮箱@163.com");
            //邮箱的主题
            email.setSubject("这是一个用于测试的邮件!");
            //设置编码方式,防止乱码
            email.setCharset("GB2312");
            //设置邮件的内容
            email.setMsg("测试邮件的内容!");
            //发送邮件
             email.send();
        }catch(EmailException e){
            throw new RuntimeException(e);
        }
    }
}

测试出来是可以发送的
在这里插入图片描述
然后我要在自己写的项目添加发邮件的功能,这样肯定是不行的,肯定要对它进行封装,封装之后

配置文件:
在这里插入图片描述
工具类:

package com.cxj.utils;
import javax.mail.internet.MimeUtility;
import org.apache.commons.mail.EmailException;
import org.apache.commons.mail.HtmlEmail;

import java.io.IOException;
import java.io.InputStream;
import java.text.MessageFormat;
import java.util.Properties;

/**
 * @Author : cxj
 * @create 2021/12/4 20:40
 */
public class EmailUtils {
    /**
     * 发送激活邮件
     * @param to 收件人邮箱
     * @param code 激活码
     * @return
     */
    public boolean sendActivateMail(String to,String code){
        //获取输入流
        InputStream in = EmailUtils.class.getClassLoader().getResourceAsStream("activeEmail.properties");
        Properties prop = new Properties();
        try {
            prop.load(in);
            String name = prop.getProperty("name");
            String password = prop.getProperty("password");
            String host = prop.getProperty("host");
            String from = prop.getProperty("from");
            String subject = prop.getProperty("subject");
            String encode = prop.getProperty("encode");
            String content = prop.getProperty("content");
            //把占位符换成激活码     (,激活码)
            content = MessageFormat.format(content,code);

            //发送邮件
            EmailUtils emailUtils = new EmailUtils();

            return emailUtils.sendMail(name,password,host,to,from,subject,content,encode);

        } catch (IOException e) {
            e.printStackTrace();
            return false;
        }
    }

    /**
     * 用于发送邮件
     * @param name 发件人用户名
     * @param password 发件人密码
     * @param host 发件人邮箱
     * @param to 收件人邮箱
     * @param from 发件人邮箱
     * @param subject 邮箱的主题
     * @param content 邮箱的内容
     * @param encode 邮箱的编码方式
     * @return true表示发件成功,false表示发件失败
     */
    public boolean sendMail(String name,String password,String host,String to,String from,String subject,String content,String encode){
        try{
            HtmlEmail email = new HtmlEmail();
            //设置发邮件邮箱的用户名和密码(授权密码)
            email.setAuthentication(name,password);
            //设置发送邮件服务器(SMTP服务器)域名
            email.setHostName(host);
            //设置收件人的邮箱
            email.addTo(to);
            //设置发件人的邮箱
            email.setFrom(from);
            //邮箱的主题
            email.setSubject(subject);
            //设置编码方式,防止乱码
            email.setCharset(encode);
            //设置邮件的内容
            email.setMsg(content);
            //发送邮件
            email.send();
            return true;
        }catch(EmailException e){
            e.printStackTrace();
            return false;
        }
    }
}

然后进行测试:

public class TestEmail {
    public static void main(String[] args) {
        EmailUtils send = new EmailUtils();
        send.sendActivateMail("收件人邮箱@qq.com","邮箱主题");
    }
}

发送过来是这样的
在这里插入图片描述
经过调试我发现,因为我的配置文件中邮件的主题和内容全部都是中文的,所以它在被读取出来时就是乱码。
然后我就去网上找,发现只要这样修改就对了
在这里插入图片描述
但是注意,我修改这里的设置的时候,我的配置文件中中文还在,然后我进行设置,勾选配置文件自动将中文转换为ASCII码,设置完之后发现配置文件中的中文直接乱码了。我先是把乱码删除了,然后再把中文写上,结果测试时候直接报错:
在这里插入图片描述
我先是自己尝试:

1、把设置改回去
2、配置文件的中文换成数字和英文
3、重启idea

结果他还是不行,但是我如果写死不进行封装的话就不会报错,能发送过来。不知道为什么
去网上找答案基本都是说

我的邮箱相关服务没有开启
我邮箱的账号或者授权密码写错了
我收件人邮箱写错了

但是我保证,这些我都写对了,他还是不行。期间有人和我说,这是因为163邮箱把我的邮件当成垃圾处理了,可是我还是不明白,为什么一直,不封装就能发送过来,封装的就一直报错。

后来我就换成用QQ邮箱发送,结果不封装和封装都可以发送过来,然后我又想试试163邮箱还有救吗
再次测试163,我的配置文件里没有中文,天哪,他竟然可以发送过来了,我不知道为什么,我什么地方都没有改,只是换成QQ邮箱测试了几次,再回来测试它就可以了
然后我就尝试着,去改设置,其实我下了很大的决心去改设置的,因为我怕又想上次一样导致163报错,结果我改完设置,再次尝试发送邮件,竟然可以?我又把配置文件中的邮箱主题和内容换成中文,还是可以!
在这里插入图片描述
为什么两次修改设置,结果却截然不同呢?

我终于找到了答案
第一次修改设置的时候,我的配置文件中有中文,修改后配置文件中的中文直接乱码了,然后运行报错(咱也不知道为啥)
第二次修改设置的时候,我的配置文件中没有中文可以正常运行,并且我后来添加中文,也可以正常运行

所以,这种配置文件中有中文,然后测试时乱码的问题,去修改设置,勾选 “ 配置文件里中文转换为ASCII ” 的时候,配置文件中一定不要有中文,以免出现问题

小白所写,如有错误,欢迎指出。

  开发工具 最新文章
Postman接口测试之Mock快速入门
ASCII码空格替换查表_最全ASCII码对照表0-2
如何使用 ssh 建立 socks 代理
Typora配合PicGo阿里云图床配置
SoapUI、Jmeter、Postman三种接口测试工具的
github用相对路径显示图片_GitHub 中 readm
Windows编译g2o及其g2o viewer
解决jupyter notebook无法连接/ jupyter连接
Git恢复到之前版本
VScode常用快捷键
上一篇文章      下一篇文章      查看所有文章
加:2021-12-06 15:28:08  更:2021-12-06 15:29:57 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 17:38:39-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码