JavaMail发送邮件 多人发送
-
在我们开发过程中经常会用到邮件,比如 : 发送通知,找回密码 验证码 等等,再次总结了使用javaMail发送邮件,无需单间james等邮件服务器也可发送邮件
-
javaMail官网 在里面可以找到详细的文档以及案例和jar包
-
我们都知道在前后端交互都是有协议的,http协议,JavaMail也有自己的协议,SMTP/POP3和IMAP
-
使用javaMail前提是可以连接外网.
-
废话不多说,直接上案例:
-
导入依赖,在没使用maven的话导入相应的jar包,点此下载
<dependency> <groupId>com.sun.mail</groupId> <artifactId>javax.mail</artifactId> <version>1.5.2</version> </dependency>
-
测试案例:这是一个模板工具
package com.bgi.util; import org.springframework.core.io.ClassPathResource; import javax.mail.Address; import javax.mail.Session; import javax.mail.Transport; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeMessage; import java.io.IOException; import java.util.Date; import java.util.Properties; public class EmailUtil {
//获取属性文件中的值,建议把配置的信息放到属性文件中,方便修改和获取 private static Properties properties = new Properties(); static{ try {
//加在属性文件 properties.load(new ClassPathResource("properties/email.properties").getInputStream()); } catch (IOException e) { } } public static String SMTPSERVER = properties.getProperty("smtp.server"); //从属性文件中获取值其中key为smtp.server public static String SMTPPORT = properties.getProperty("smtp.port"); //端口号 465 465 465 不是456 public static String ACCOUT = properties.getProperty("smtp.account");//账户名:我的是163账户,此账户必须在设置中开启授权码授权 public static String PWD = properties.getProperty("smtp.pwd"); //授权密码 public static String users = properties.getProperty("email.users"); //这里是发送给多个用户多个用户用都好分割xxx@xx.com,xxx@xx.com public static void sendEmail(String content){ try { // 创建邮件配置 Properties props = new Properties(); props.setProperty("mail.transport.protocol", "smtp"); // 使用的协议(JavaMail规范要求) props.setProperty("mail.smtp.host", SMTPSERVER); // 发件人的邮箱的 SMTP 服务器地址 props.setProperty("mail.smtp.port", SMTPPORT); props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory"); props.setProperty("mail.smtp.auth", "true"); // 需要请求认证 props.setProperty("mail.smtp.ssl.enable", "true");// 开启ssl // 根据邮件配置创建会话,注意session别导错包 Session session = Session.getDefaultInstance(props); // 开启debug模式,可以看到更多详细的输入日志 session.setDebug(true); //创建邮件 MimeMessage message = createEmail(session,users,content); //将用户和内容传递过来 //获取传输通道 Transport transport = session.getTransport(); transport.connect(SMTPSERVER,ACCOUT, PWD); //连接,并发送邮件 transport.sendMessage(message, message.getAllRecipients()); transport.close(); } catch (Exception e) { e.printStackTrace(); } } public static MimeMessage createEmail(Session session,String users,String content) throws Exception { // 根据会话创建邮件 MimeMessage msg = new MimeMessage(session); // address邮件地址, personal邮件昵称, charset编码方式 InternetAddress fromAddress = new InternetAddress(ACCOUT, "中间件推送", "utf-8"); // 设置发送邮件方 msg.setFrom(fromAddress); // 单个可以直接这样创建 // InternetAddress receiveAddress = new InternetAddress(); // 设置邮件接收方 Address[] internetAddressTo = new InternetAddress().parse(users);//type:
要被设置为 TO, CC 或者 BCC,这里 CC 代表抄送、BCC 代表秘密抄送。举例:Message.RecipientType.TOmsg.setRecipients(MimeMessage.RecipientType.TO, internetAddressTo); // 设置邮件标题 msg.setSubject("测试标题", "utf-8"); msg.setText(content); // 设置显示的发件时间 msg.setSentDate(new Date()); // 保存设置 msg.saveChanges(); return msg; } }
-
email.properties
smtp.server=smtp.163.com smtp.port=465 smtp.account=xxx@163.com smtp.pwd=xxxxx email.users=xxx@163.com,xxxx@qq.com,xxx@xx.cn
-
163邮箱开启授权:
-
-
qq邮箱开启授权: 点击生成授权码,即可生成授权码
到此已经可以发送邮件了,如果需要添加附件,可以自行研究,