1. 邮件协议
发送邮件协议:smtp
查收邮件协议:pop3
2. 依赖
<dependency> <groupId>javax.mail</groupId> <artifactId>mail</artifactId> <version>1.4.7</version> </dependency>
3. 使用qq邮箱给163邮箱发送邮件
使用前发件箱要开启 SMTP服务 ,并获得授权码
public class EmailTest { public static void main(String[] args) { Properties properties = new Properties(); //设置发送邮件客户端和协议 properties.setProperty("mail.host","smtp.qq.com"); properties.setProperty("mail.transport.protocol","smtp"); //获取会话和传输对象 Session session = Session.getDefaultInstance(properties); Transport ts = null; try { //获取传输对象发送邮件 ts = session.getTransport(); //发送邮件前先进行校验 ts.connect("xx@qq.com","授权码"); //构建邮件 Message message = new MimeMessage(session); // 发送人 message.setFrom(new InternetAddress("xx@qq.com")); // 收件人 Message.RecipientType.TO //抄送:Message.RecipientType.CC //密送:Message.RecipientType.BCC message.setRecipient(Message.RecipientType.TO,new InternetAddress("xx@163.com")); // 主题 message.setSubject("使用qq邮箱给163发送邮件"); // 正文 message.setContent("测试邮件","text/html;charset=utf-8"); //message.setSubject("激活邮件"); //message.setContent("这是一个激活邮件:<a href='http://www.baidu.com'>点击激活</a>","text/html;charset=utf-8"); //保存邮件 message.saveChanges(); //发送邮件 ts.sendMessage(message,message.getAllRecipients()); } catch (MessagingException e) { e.printStackTrace(); }finally { if (ts != null){ try { ts.close(); } catch (MessagingException e) { e.printStackTrace(); } } } } }
4. 封装工具类
public class EmailUtil { /** * @param to 收件人 * @param subject 主题 * @param context 正文 */ public static void sendEmail(String to,String subject,String context){ Properties properties = new Properties(); properties.setProperty("mail.host","smtp.qq.com"); properties.setProperty("mail.transport.protocol","smtp"); Session session = Session.getDefaultInstance(properties); Transport ts = null; try { ts = session.getTransport(); ts.connect("xx@qq.com","授权码"); Message message = new MimeMessage(session); message.setFrom(new InternetAddress("xx@qq.com")); message.setRecipient(Message.RecipientType.TO,new InternetAddress(to)); message.setSubject(subject); message.setContent(context,"text/html;charset=utf-8"); message.saveChanges(); ts.sendMessage(message,message.getAllRecipients()); } catch (MessagingException e) { e.printStackTrace(); }finally { if (ts != null){ try { ts.close(); } catch (MessagingException e) { e.printStackTrace(); } } } } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)