java发送邮件
一 邮件协议
收发邮件具有与HTTP协议相同的邮件传输协议.
SMTP:(Simple Mail Transfer Protocol,简单邮件传输协议)发邮件协议
POP3:(Post Office Protocol Version 3,邮局协议第3版)收邮件协议
IMAP:(Internet Message Access Protocol,因特网消息访问协议)收发邮件协议
二 开通邮件的SMTP协议
首先要开启邮箱的协议,看你是选择哪种邮箱,这里我列举了163邮箱和QQ邮箱两种常见的
2.1 开启163邮箱
注意:激活码一定要记住!!!
2.2 开启QQ邮箱协议
三 编写Java代码
3.1 引入javax.mail依赖
<!--JavaMail基本包 2022-11-21--> <dependency> <groupId>javax.mail</groupId> <artifactId>mail</artifactId> <version>1.4.7</version> </dependency> <!--邮件发送的扩展包--> <dependency> <groupId>javax.activation</groupId> <artifactId>activation</artifactId> <version>1.1.1</version> </dependency>
注意:下面的代码,163邮件和QQ邮件进行切换的话,只需要修改服务器的主机、激活码、发送人就可以。
服务器的主机是:
QQ邮箱:smtp.qq.com
163邮箱:smtp.163.com(POP3服务器: pop.163.com;SMTP服务器: smtp.163.com;IMAP服务器: imap.163.com)
邮件发送的代码编辑逻辑分为三部分:1 获取Session;2 创建MimeMessage;3 发送邮件
3.2 文本邮件代码示例
/** * 文本邮件 */ public static void sendTextEmail() throws MessagingException { /* * 1.得到Session */ Properties props = new Properties(); // 设置服务器主机名 props.setProperty("mail.host", "smtp.163.com"); // 是否需要认证 props.setProperty("mail.smtp.auth", "true"); Authenticator auth = new Authenticator() { @Override protected PasswordAuthentication getPasswordAuthentication() { // 这是你自己的邮箱域名和激活码 return new PasswordAuthentication("zhangpba2022", "XXXXXXXXXXXXXX"); } }; Session session = Session.getInstance(props, auth); /* * 2.创建MImeMessage */ MimeMessage msg = new MimeMessage(session); //设置发件人 msg.setFrom(new InternetAddress("zhangpba2022@163.com")); //设置收件人 msg.setRecipients(Message.RecipientType.TO, "zhangpba@qq.com"); // 设置主题(标题) msg.setSubject("这是一封myself学习Mail时的测试邮件"); // 设置正文 msg.setContent("这封邮件没有实质意义,就是测试用的", "text/html;charset=utf-8"); /* * 3.发送 */ Transport.send(msg); }
3.3 带附件的邮件
/** * 带附件的邮件 * * @throws MessagingException */ public static void sendFileEmail() throws MessagingException, IOException { /* * 1.得到Session */ Properties props = new Properties(); props.setProperty("mail.host", "smtp.163.com"); props.setProperty("mail.smtp.auth", "true"); Authenticator auth = new Authenticator() { @Override protected PasswordAuthentication getPasswordAuthentication() { // 这是你自己的邮箱域名和激活码 return new PasswordAuthentication("zhangpba2022", "XXXXXXXXXXXXX"); } }; Session session = Session.getInstance(props, auth); /* * 2.创建MImeMessage */ MimeMessage msg = new MimeMessage(session); // 设置发件人 msg.setFrom(new InternetAddress("zhangpba2022@163.com")); // 设置收件人 msg.setRecipients(Message.RecipientType.TO, "zhangpba@qq.com"); // 设置主题(标题) msg.setSubject("这是一封myself学习Mail时的测试邮件-有附件"); /* *当发送包含附件的邮件时,邮件体就为多部件形式 * 1.创建一个多部件邮件内容!MimeMultipart * MimeMultipart是一个集合,用来装载多部件 * 2.我们需要创建两个主体部件,一个是文本内容,另一个是附件 * 主体叫MimeBodyPart * 3.把MimeMultiPart设置给MimeMessage的内容 * */ // 创建多部件主体 MimeMultipart list = new MimeMultipart(); // 创建MimeBodyPart MimeBodyPart part1 = new MimeBodyPart(); // 设置主体部件内容 part1.setContent("<h1>请查收图片!</h1> 这是一封包含附件的垃圾邮件", "text/html;charset=utf-8"); // 把主体部件添加到集合中 list.addBodyPart(part1); //创建MimeBodyPart MimeBodyPart part2 = new MimeBodyPart(); part2.attachFile(new File("/Users/pengbozhang/ideaworkspace/study-everthing/src/main/java/com/study/emial/不同邮件服务器发送邮件.png")); //处理中文乱码问题--显示文件名称 part2.setFileName(MimeUtility.encodeText("不同邮件服务器发送邮件.png")); list.addBodyPart(part2); // 把它设置给邮件作为邮件内容 msg.setContent(list); /* * 3.发送 */ Transport.send(msg); }
本文来自博客园,作者:zhangpba,转载请注明原文链接:https://www.cnblogs.com/zhangpb/p/16928863.html