Java如何实现邮件发送?

准备工作

软件:idea 2020.2.2 x64

jdk:16.0.2

jar包:mail.jar

类介绍

Properties(Java.util.Properties),Properties 继承于 Hashtable。表示一个持久的属性集.属性列表中每个键及其对应值都是一个字符串。该类主要用于读取Java的配置文件,能让用户够脱离程序本身去修改相关的变量设置。

Session(Javax.mail.Session),会话控制,保存会话的属性和配置,相当于作为连接服务器和浏览器的通道。会话是一种网络协议,客户端和服务端之间建立连接,交换数据包。

MimeMessage(Javax.mail.internet.MimeMessage),创建邮件对象。

创建邮件

//方法的三个参数分别为会话、发件人,收件人
public static MimeMessage createMimeMessage(Session session, String sendMail, String receiveMail) throws Exception {
    // 1. 创建邮件对象
    MimeMessage message = new MimeMessage(session);
    // 2. From: 发件人,InternetAddress的三个参数为发件人,昵称(随意),昵称的字符集
    message.setFrom(new InternetAddress(sendMail, "xxx", "UTF-8"));
    // 3. To: 收件人
    message.setRecipient(MimeMessage.RecipientType.TO, new InternetAddress(receiveMail,         "xxx", "UTF-8"));
    // 4. Subject: 邮件主题
    message.setSubject("邮件发送测试", "UTF-8");
    // 5. Content: 邮件正文(可以使用html标签)
    message.setContent("恭喜您,邮件发送成功!", "text/html;charset=UTF-8");
    // 6. 设置发件时间
    message.setSentDate(new Date());
    // 7. 保存设置
    message.saveChanges();
    //8.返回邮件对象
    return message;
}

发送邮件

//发件人的电子邮箱账号
public static String myEmailAccount = "*****@sina.com";
//(sina)在开通SMTP服务后,会给你一个授权码
public static String myEmailPassword = "********";
// 新浪邮箱的 SMTP 服务器地址为: smtp.sina.com,在网页就可以查询
public static String myEmailSMTPHost = "smtp.sina.com";
// 收件人邮箱
public static String receiveMailAccount = "********@qq.com";

以新浪邮箱为例,点击右上角设置,按照图片打开SMTP服务,打开后会给你一个授权码,类似于这种:3bb1********1dc1bb

 

public static void main(String[] args) throws Exception {
    //创建参数配置,连接邮件服务器的参数配置
    //Properties对象放便找到发送mail的主机信息(session对象的创建也需要properties)
    Properties props = new Properties();
    //将参数以键值对的形势连接
    //使用SMTP作为传输数据的协议
    props.setProperty("mail.transport.protocol", "smtp");
    //发件人的邮箱SMTP服务器地址
    props.setProperty("mail.smtp.host", myEmailSMTPHost);
    //授权认证,允许发件账号发送邮件
    props.setProperty("mail.smtp.auth", "true");
    // 创建会话,为数据传输建立通道
    Session session = Session.getInstance(props);
    //MimeMessage对象用来存放实际的mail信息
    MimeMessage message = createMimeMessage(session, myEmailAccount,     receiveMailAccount);
    // 4. 根据 Session 获取邮件传输对象
    Transport transport = session.getTransport();
    //理解为通过账号密码登录
    transport.connect(myEmailAccount, myEmailPassword);
    // 6. 发送邮件, 发到所有的收件地址, message.getAllRecipients() 获取到的是在创建邮件对象              时添加的所有收件人, 抄送人, 密送人
    transport.sendMessage(message, message.getAllRecipients());
    // 7. 关闭连接
    transport.close();
}

问题总结

1,部分jar包对于jdk有版本要求,过低版本可能会出现兼容性问题

2,一定要打开对应邮箱的SMTP服务(如上文打开新浪的SMTP服务)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值