java 邮件发送乱码_JavaMail发送邮件(附实例及乱码问题解决)

本文提供了一个使用JavaMail发送邮件的示例,包括设置邮件服务器、端口、认证,并解决了邮件正文和主题的乱码问题。通过MimeUtility.encodeText方法进行编码转换,确保中文正常显示。同时,文章提到了163邮箱的授权码设置,以及发送HTML格式邮件的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

下边是我写的一个mailTest的类实现。亲测有效;

这里是以163邮箱为例,文章的后边会记录几个我本人遇到的问题。也希望可以帮助到你;

package com.utils;

import javax.mail.Address;

import javax.mail.Authenticator;

import javax.mail.Message;

import javax.mail.PasswordAuthentication;

import javax.mail.Session;

import javax.mail.Transport;

import javax.mail.internet.InternetAddress;

import javax.mail.internet.MimeMessage;

import javax.mail.internet.MimeUtility;

import java.util.Properties;

public class mailTest {

public static void main(String[] args) {

try {

sendMail();

} catch (Exception e) {

e.printStackTrace();

}

System.out.println("done...");

}

private static void sendMail() throws Exception {

/* --设置邮件服务器、端口、开启认证-- */

Properties props = new Properties();

props.put("mail.smtp.host", "smtp.163.com");

props.put("mail.smtp.port", 25);

props.put("mail.smtp.auth", true);

/* --创建Session-- */

Session session = Session.getInstance(props, new Authenticator() {

/* authenticator */

protected PasswordAuthentication getPasswordAuthentication() {

return new PasswordAuthentication("xxx@163.com", "********");

}

});

/* --发件人-- */

Address addressFrom = new InternetAddress("xxx@163.com");

// 如果希望发件人显示中文,则可以使用:

// Address addressFrom = new InternetAddress("xxx@163.com", MimeUtility.encodeText("发送者"));

/* --收件人-- */

Address addressTo = new InternetAddress("xxx@163.com");

// 如果希望收件人显示中文,则可以使用:

// Address addressToOne = new InternetAddress(recipient, MimeUtility.encodeText("收件人"));

/* --抄送-- */

Address[] addressToArr = {new InternetAddress("xxx1@163.com"), new InternetAddress("xxx2@163.com"), new InternetAddress("xxx3@163.com")};

/* --邮件内容-- */

Message message = new MimeMessage(session);

message.setFrom(addressFrom);

message.setRecipient(Message.RecipientType.TO, addressTo);

message.setRecipients(Message.RecipientType.CC, addressToArr);

message.setSubject("邮件主题");

// 如果是定时任务发送,采用以下编码可解决乱码问题:

// message.setSubject(MimeUtility.encodeText("邮件主题", "gbk", null));

message.setText("Hi, 这里是邮件正文");

// 如果要发送的邮件正文为HTML,则第二个参数为"text/html"

// 如果要发送的邮件正文为HTML并且包含中文,则第二个参数为"text/html;charset=gbk"

// message.setContent("

Hi, 这里是邮件正文

", "text/html;charset=gbk");

/* --发送-- */

Transport.send(message);

/* --发送完成,做下记录-- */

System.out.println("javax.mail:邮件发送完毕");

}

}

上边这段代码是可行的。你只需将发件人、收件人的邮箱按实际情况替换即可;

执行结果如下:

bac37d8f7847

result

本人遇到的问题及解答:

1、如何引入依赖?

maven项目在对应的pom.xml文件中引入即可

com.sun.mail

javax.mail

1.6.1

2、mail.smtp.host是邮件服务器地址,163邮箱的话,可以登录网页版,点击 设置-POP3/SMTP/IMAP

bac37d8f7847

网页版截图

3、PasswordAuthentication中的账户名和密码究竟是什么?

账户名很好理解,就是发件人邮箱;

密码要注意了,这并不是163邮箱登录密码,而是自己另外设置的一个授权码,专门用于登录第三方邮件客户端的专用密码。在下图位置中点击开启即可通过手机号设置授权码:

bac37d8f7847

授权码设置截图

4、想发送HTML格式的邮件正文怎么办?

代码中已经给出了注释,使用setContent方法即可。

message.setContent("

Hi, here is content

", "text/html");

需要注意的是,当邮件正文中出现中文,则需要加上charset,否则会出现乱码。

message.setContent("

Hi, 这里是邮件正文

", "text/html;charset=gbk");

5、定时任务/脚本执行,邮件主题乱码怎么办?

代码中同样给出了注释:

message.setSubject(MimeUtility.encodeText("邮件主题", "gbk", null));

如果这篇文章对你有帮助,不妨点个赞再走吧~ _

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值