使用Java实现给QQ邮箱发送验证码

1.给QQ邮箱发送字符串(验证码)

public class QQYte {public static void main(String[] args) {// 创建Properties 类用于记录邮箱的一些属性Properties props = new Properties();// 表示SMTP发送邮件,必须进行身份验证props.put("mail.smtp.auth", "true");//此处填写SMTP服务器props.put("mail.smtp.host", "smtp.qq.com");//端口号,QQ邮箱端口587props.put("mail.smtp.port", "587");// 此处填写,写信人的账号props.put("mail.user", "1781484543@qq.com");// 此处填写16位STMP口令props.put("mail.password", "nwjvnvkvlikjefdb");// 构建授权信息,用于进行SMTP进行身份验证Authenticator authenticator = new Authenticator() {protected PasswordAuthentication getPasswordAuthentication() {// 用户名、密码String userName = props.getProperty("mail.user");String password = props.getProperty("mail.password");return new PasswordAuthentication(userName, password);}};// 使用环境属性和授权信息,创建邮件会话Session mailSession = Session.getInstance(props, authenticator);// 创建邮件消息MimeMessage message = new MimeMessage(mailSession);// 设置发件人try {InternetAddress form = new InternetAddress(props.getProperty("mail.user"));message.setFrom(form);// 设置收件人的邮箱//InternetAddress to = new InternetAddress("xujr3@asiainfo.com"); 有多少个邮箱,发送给多少人//一般数组是不能够添加元素的  刚开始初始化的时候数组就已经规定好了长度//String[] strings = new String[]{"1781484543@qq.com","2385824854@qq.com","2498068709@qq.com","xujr3@asiainfo.com"};//使用list集合代替 数组方便又快捷   ArrayList本身是个数组(底层是用数组实现的)List<String> stringList = new ArrayList<>();stringList.add("1781484543@qq.com");//stringList.add("2385824854@qq.com");//stringList.add("2498068709@qq.com");stringList.add("xujr3@asiainfo.com");for (String s : stringList) {System.out.println("s = " + s);InternetAddress to2 = new InternetAddress(s);//message.setRecipient(RecipientType.TO, to);message.setRecipient(RecipientType.TO,to2);//使用UUID自动生成6位验证码String substring = UUID.randomUUID().toString();// 设置邮件标题message.setSubject("您的验证码信息如下");// 设置邮件的内容体message.setContent(substring, "text/html;charset=UTF-8");// 设置邮件消息内容、包含附件Multipart msgPart = new MimeMultipart();message.setContent(msgPart);MimeBodyPart body = new MimeBodyPart();//正文//MimeBodyPart attach = new MimeBodyPart();//附件msgPart.addBodyPart(body);//msgPart.addBodyPart(attach);//设置正文内容String uuid=UUID.randomUUID().toString();//body.setContent("记得观看哟,更多精彩视频请关注抖音:20762851861","text/html;charset=utf-8");body.setContent(uuid,"text/html;charset=utf-8");//设置附件内容//attach.setDataHandler(new DataHandler(new FileDataSource("C:\\Users\\17814\\Desktop\\商品表信息.xls")));//attach.setFileName((MimeUtility.encodeText("旅行视频合集.mp4")));message.saveChanges();//邮件的创建时间// message.setSentDate(new Date());// 最后当然就是发送邮件啦Transport.send(message);}} catch (MessagingException e) {e.printStackTrace();}
}
}

注意:以上也可实现附件的上传

2.发送Excel表格

public class Email {private static final Logger LOGGER = LoggerFactory.getLogger(Email.class);private static String defaultSenderName = "1781484543@qq.com";// 默认的发件人用户名,defaultEntity用得到
private static String defaultSenderPass = "eakkywepkedmehec";// 默认的发件人密码,defaultEntity用得到
private static String defaultSmtpHost = "";// 默认的邮件服务器地址,defaultEntity用得到private String smtpHost="smtp.qq.com"; // 邮件服务器地址
private Integer port;//邮件服务器端口号
private String sendUserName; // 发件人的用户名
private String sendUserPass; // 发件人密码private MimeMessage mimeMsg; // 邮件对象
private Session session;
private Properties props;
private Multipart mp;// 附件添加的组件
private List<FileDataSource> files = new LinkedList<FileDataSource>();// 存放附件文件private void init() {if (props == null) {props = System.getProperties();}props.setProperty("mail.smtp.host", smtpHost);props.setProperty("mail.smtp.auth", "true"); // 需要身份验证final String smtpPort = "587";props.setProperty("mail.smtp.port", smtpPort);props.setProperty("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");props.setProperty("mail.smtp.socketFactory.fallback", "false");props.setProperty("mail.smtp.socketFactory.port", smtpPort);session = Session.getInstance(props);// 置true可以在控制台(console)上看到发送邮件的过程session.setDebug(true);// 用session对象来创建并初始化邮件对象mimeMsg = new MimeMessage(session);// 生成附件组件的实例mp = new MimeMultipart();
}private Email(String smtpHost, Integer port, String sendUserName, String sendUserPass, String to, String cc, String mailSubject, String mailBody,List<String> attachments) {this.smtpHost = smtpHost;this.sendUserName = sendUserName;this.sendUserPass = sendUserPass;this.port = port;init();setFrom(sendUserName);setTo(to);setCC(cc);setBody(mailBody);setSubject(mailSubject);if (attachments != null) {for (String attachment : attachments) {addFileAffix(attachment);}}}/*** 邮件实体** @param smtpHost* 邮件服务器地址* @param sendUserName* 发件邮件地址* @param sendUserPass* 发件邮箱密码* @param to* 收件人,多个邮箱地址以半角逗号分隔* @param cc* 抄送,多个邮箱地址以半角逗号分隔* @param mailSubject* 邮件主题* @param mailBody*  邮件正文* @param attachments*  附件路径* @return*/
public static Email entity(String smtpHost,Integer port, String sendUserName, String sendUserPass, String to, String cc, String mailSubject, String mailBody,List<String> attachments) {return new Email(smtpHost,port, sendUserName, sendUserPass, to, cc, mailSubject, mailBody, attachments);
}/*** 默认邮件实体,用了默认的发送帐号和邮件服务器** @param to*            收件人,多个邮箱地址以半角逗号分隔* @param cc*            抄送,多个邮箱地址以半角逗号分隔* @param subject*            邮件主题* @param body*            邮件正文* @param attachments*            附件全路径* @return*/
public static Email defaultEntity(String to, String cc, String subject, String body, List<String> attachments) {return new Email(defaultSmtpHost,null, defaultSenderName, defaultSenderPass, to, cc, subject, body, attachments);
}/*** 设置邮件主题** @param mailSubject* @return*/
private boolean setSubject(String mailSubject) {try {mimeMsg.setSubject(mailSubject);} catch (Exception e) {return false;}return true;
}/*** 设置邮件内容,并设置其为文本格式或HTML文件格式,编码方式为UTF-8** @param mailBody* @return*/
private boolean setBody(String mailBody) {try {BodyPart bp = new MimeBodyPart();bp.setContent("<meta http-equiv=Content-Type content=text/html; charset=UTF-8>" + mailBody, "text/html;charset=UTF-8");// 在组件上添加邮件文本mp.addBodyPart(bp);} catch (Exception e) {System.err.println("设置邮件正文时发生错误!" + e);return false;}return true;
}/*** 添加一个附件** @param filename*            邮件附件的地址,只能是本机地址而不能是网络地址,否则抛出异常* @return*/
public boolean addFileAffix(String filename) {try {if (filename != null && filename.length() > 0) {BodyPart bp = new MimeBodyPart();FileDataSource fileds = new FileDataSource(filename);bp.setDataHandler(new DataHandler(fileds));bp.setFileName(MimeUtility.encodeText(fileds.getName(), "utf-8", null)); // 解决附件名称乱码mp.addBodyPart(bp);// 添加附件files.add(fileds);}} catch (Exception e) {System.err.println("增加邮件附件:" + filename + "发生错误!" + e);return false;}return true;
}/*** 删除所有附件** @return*/
public boolean delFileAffix() {try {FileDataSource fileds = null;for (Iterator<FileDataSource> it = files.iterator(); it.hasNext();) {fileds = it.next();if (fileds != null && fileds.getFile() != null) {fileds.getFile().delete();}}} catch (Exception e) {return false;}return true;
}/*** 设置发件人地址** @param from*            发件人地址* @return*/
private boolean setFrom(String from) {try {mimeMsg.setFrom(new InternetAddress(from));} catch (Exception e) {return false;}return true;
}/*** 设置收件人地址** @param to 收件人的地址* @return*/
private boolean setTo(String to) {if (to == null)return false;try {mimeMsg.setRecipients(Message.RecipientType.TO, InternetAddress.parse(to));} catch (Exception e) {return false;}return true;
}/*** 设置抄送** @param cc* @return*/
private boolean setCC(String cc) {if (cc == null) {return false;}try {mimeMsg.setRecipients(Message.RecipientType.CC, InternetAddress.parse(cc));} catch (Exception e) {return false;}return true;
}/*** 发送邮件** @return*/
public boolean send() throws Exception {mimeMsg.setContent(mp);//mimeMsg.saveChanges();System.out.println("正在发送邮件....");Transport transport = session.getTransport("smtp");

// 连接邮件服务器并进行身份验证
// transport.connect(smtpHost,port,sendUserName, sendUserPass);
// 发送邮件
//transport.sendMessage(mimeMsg, mimeMsg.getRecipients(Message.RecipientType.TO));
System.out.println(“发送邮件成功!”);
transport.close();

    Transport.send(mimeMsg);System.out.println("发送邮件成功!");return true;
}public static String buildContent(List<Map<String,Object>> list) throws IOException {//加载邮件html模板   运行springBootApplication时才能够引用resource下的html模板String fileName = "pod-scale-alarm.html";String path = System.getProperty("user.dir")+ "\\student\\src\\main\\java\\com\\tjetc\\test01\\pod-scale-alarm.html";System.out.println("path = " + path);StringBuffer buff=new StringBuffer();InputStreamReader in=null;BufferedReader br=null;File file=new File(path);String line = "";try {//jdk中的输入输出流in=new InputStreamReader(new FileInputStream(file));br=new BufferedReader(in);while((line=br.readLine()) != null){//System.out.println(line);buff.append(line).append("\n");}} catch (FileNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}finally{if(in!=null){try {in.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}if(br!=null){try {br.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}//InputStream inputStream = ClassLoader.getSystemResourceAsStream(path);BufferedReader fileReader = new BufferedReader(in);try {/*while ((line = fileReader.readLine()) != null) {buff.append(line);}*/} catch (Exception e) {LOGGER.error("读取文件失败,fileName:{}", fileName, e);} finally {//inputStream.close();fileReader.close();}String contentText = "以下是分销平台产品列表信息, 敬请查看.<br>below is the information of product list on those distribution platforms, please check. ";//邮件表格headerString header = "<td>产品名称</td><td>分销平台名称</td><td>分销平台产品类别</td><td>分销平台产品页URL</td><td>分销平台产品推广URL</td><td>推广url远程地址ip</td><td>分销平台产品页页数</td><td>上架时间</td><td>更新时间</td>";StringBuilder linesBuffer = new StringBuilder();if(list!=null&&list.size()>0) {list.forEach(map -> {linesBuffer.append("<tr><td>" + map.get("productName") +"</td><td>" + map.get("distributionPlatformName") +"</td><td>" + map.get("productType") +"</td><td>" + map.getOrDefault("distributionPlatformDetailUrl","无") +"</td><td>"+ map.getOrDefault("distributionPlatformProductUrl","无") +"</td><td>"+ map.getOrDefault("addressIp","无") +"</td><td>"+ map.getOrDefault("distributionPlatformPageNum","无") +"</td><td>"+ map.getOrDefault("onShelfTime","无") +"</td><td>" + map.getOrDefault("updateTime","无") + "</td></tr>");});}//颜色String emailHeadColor = "#fa5834";String date = DateFormatUtils.format(new Date(), "yyyy/MM/dd HH:mm:ss");//填充html模板中的五个参数String htmlText = MessageFormat.format(buff.toString(), emailHeadColor, contentText, date, header, linesBuffer.toString());//改变表格样式htmlText = htmlText.replaceAll("<td>", "<td  style=\"padding:6px 10px; line-height: 150%;border: 1px solid #eee; width: 100px; word-wrap: break-word;\">");htmlText = htmlText.replaceAll("<tr>", "<tr style=\"border-bottom: 1px solid #eee; color:#666;\">");return htmlText;
}public static String dddd(){String userName = "1781484543@qq.com"; // 发件人邮箱String password = "nwjvnvkvlikjefdb"; // 发件人密码(不是登录密码是授权码,需要到邮箱里设置开通授权码功能)String smtpHost = "smtp.exmail.qq.com"; // 邮件服务器Integer port = 465; // 邮件服务器端口号String to = "许稷荣"; // 收件人,多个收件人以半角逗号分隔String cc = "许稷荣"; // 抄送,多个抄送以半角逗号分隔String subject = "尊敬的自己请查看"; // 主题List<Map<String, Object>> list = new ArrayList<>();for(int i=0;i<10;i++){HashMap<String, Object> dateMap = new HashMap<>();dateMap.put("productName","魔域");dateMap.put("productType","页面网游");dateMap.put("distributionPlatformName","网游社区");dateMap.put("distributionPlatformDetailUrl","www.baidu.com");dateMap.put("addressIp","0.0.0.0");dateMap.put("distributionPlatformPageNum","1");dateMap.put("onShelfTime","2019-06-28");dateMap.put("updateTime","2019-06-28");list.add(dateMap);}String body = null; // 正文,可以用html格式的哟try {body = Email.buildContent(list);} catch (IOException e) {e.printStackTrace();}
// List<String> attachments = Arrays.asList("D:\\tmp\\1.png", "D:\\tmp\\2.png"); // 附件的路径,多个附件也不怕System.out.println("body = " + body);return body;//Email email = Email.entity(smtpHost,port, userName, password, to, cc, subject, body, null);//email.send(); // 发送!
}public static void main(String[] args) {// 创建Properties 类用于记录邮箱的一些属性Properties props = new Properties();// 表示SMTP发送邮件,必须进行身份验证props.put("mail.smtp.auth", "true");//此处填写SMTP服务器props.put("mail.smtp.host", "smtp.qq.com");//端口号,QQ邮箱端口587props.put("mail.smtp.port", "587");// 此处填写,写信人的账号props.put("mail.user", "1781484543@qq.com");// 此处填写16位STMP口令props.put("mail.password", "nwjvnvkvlikjefdb");// 构建授权信息,用于进行SMTP进行身份验证Authenticator authenticator = new Authenticator() {protected PasswordAuthentication getPasswordAuthentication() {// 用户名、密码String userName = props.getProperty("mail.user");String password = props.getProperty("mail.password");return new PasswordAuthentication(userName, password);}};// 使用环境属性和授权信息,创建邮件会话Session mailSession = Session.getInstance(props, authenticator);// 创建邮件消息MimeMessage message = new MimeMessage(mailSession);try {// 设置发件人InternetAddress form = new InternetAddress(props.getProperty("mail.user"));message.setFrom(form);// 设置收件人的邮箱InternetAddress to = new InternetAddress("xujr3@asiainfo.com");//InternetAddress to2 = new InternetAddress("1781484543@qq.com");// message.setRecipient(MimeMessage.RecipientType.TO, to2);message.setRecipient(Message.RecipientType.TO,to);//使用UUID自动生成6位验证码String substring = UUID.randomUUID().toString();// 设置邮件标题message.setSubject("来信啦");String str = Email.dddd();// 设置邮件的内容体message.setContent(str, "text/html;charset=UTF-8");// 设置邮件消息内容、包含附件/*Multipart msgPart = new MimeMultipart();message.setContent(msgPart);MimeBodyPart body = new MimeBodyPart();//正文MimeBodyPart attach = new MimeBodyPart();//附件msgPart.addBodyPart(body);msgPart.addBodyPart(attach);*///设置正文内容//body.setContent("商品信息见附件","text/html;charset=utf-8");//设置附件内容// attach.setDataHandler(new DataHandler(new FileDataSource("c:/Users/17814/Desktop/商品表信息.xls")));// attach.setFileName((MimeUtility.encodeText("商品表信息.xls")));message.saveChanges();//邮件的创建时间//message.setSentDate(new Date());// 最后当然就是发送邮件啦Transport.send(message);} catch (MessagingException e) {e.printStackTrace();}
}
}

相关文件位置(仅供参考)

使用Java实现给QQ邮箱发送验证码相关推荐

  1. java springboot借助qq邮箱发送验证码

    1.起因 主流的短信验证无论是阿里云还是腾讯云,都是需要收费的,且一般需要企业认证才可以使用.作为学习,我们可以选择无门槛的qq邮箱验证登录的方式. 2.步骤 2.1 访问qq邮箱官网qq邮箱,打开Q ...

  2. 最简单Java实现QQ邮箱发送验证码

    Java使用QQ邮箱发送验证码 1. 开启服务,获取授权码 需登录自己的QQ邮箱,打开 POP3/SMTP 服务,并获取授权码. 具体操作: 登录邮箱 邮箱首页 "设置" 选择 & ...

  3. java发送qq邮箱验证_JAVA 实现 QQ 邮箱发送验证码功能(不局限于框架)

    JAVA 实现 QQ 邮箱发送验证码功能(不局限于框架) 本来想实现 QQ 登录,有域名一直没用过,还得备案,好麻烦,只能过几天再更新啦. 先把实现的发送邮箱验证码更能更新了. 老规矩,更多内容在注释 ...

  4. SpringBoot通过qq邮箱发送验证码

    SpringBoot通过qq邮箱发送验证码 1.开启qq授权码 2.编写配置文件 spring:#邮箱验证mail:##163 smtp.163.com(反垃圾系统发送不了了)##qq smtp.qq ...

  5. Spring Boot 整合163或者qq邮箱发送验证码

    前记 最近做的项目中注册功能要用到验证码,本来想用阿里云的短信服务,但是有点小贵,就另辟捷径,选择了用邮箱来发送验证码.记录一下整合过程,也希望能帮助一些有需要的人. 正文 1.Spring Boot ...

  6. react-hooks + node 使用qq邮箱发送验证码,验证修改密码

    在平常,我们写登录注册react项目时,我们可能会考虑使用QQ邮箱发送验证码登录注册,或者使用QQ邮箱验证来修改密码,下面,我们就来使用QQ邮箱来简单发送个邮件. 1.当我们想在react项目中使用Q ...

  7. Python使用QQ邮箱发送验证码

    向指定对象发送验证码 在做一些个人的demo或者实战项目等,涉及登录验证的,可以通过该方式实现一个简易的邮箱发送验证码. 该方法使用了Python的smtplib第三方库,需要保证发送者的QQ邮箱开通 ...

  8. java实现通过QQ邮箱发送激活邮件 springBoot

    用户邮件激活 通过QQ邮箱发送激活邮件 soringBoot 本文主要介绍了使用java 调用邮箱发送邮件的功能 首先新建一个springboot项目 pom依赖如下 <parent>&l ...

  9. java邮箱发送验证码_java实现使用QQ邮箱发送验证码功能

    首先当然是导入jar包了啊 如果是maven项目可以进maven资源库进行搜索导入,在此附上地址:https://mvnrepository.com 这是需要导入的jar包  commons-emai ...

  10. QQ邮箱发送验证码功能的实现

    1.打开QQ邮箱的xxx服务,记住授权码 2.引入依赖 <dependency>             <groupId>org.springframework.boot&l ...

最新文章

  1. SAP MIGO 发货批次确定界面批次可用数量无穷大问题之对策
  2. ideal连接数据库报错The server time zone value ‘�й���׼ʱ��’ is unrecognized or represents more than one time
  3. Session与Cookie区别[1][摘]
  4. linux下动态库(*.so)的路径问题
  5. 指向成员函数的指针有什么用_指针函数,函数指针,有点懵圈了?你能分清楚吗...
  6. P2184 【贪婪大陆】
  7. BZOJ2958 序列染色
  8. 执行删除操作返回没被删除的信息
  9. 版本控制工具——Git常用操作(下)
  10. WinRAR在DOS下压缩/解压缩的使用方法
  11. LaTeX:equation, aligned 书写公式换行,顶部对齐
  12. Chrome开发者工具使用小技巧
  13. Linux查看登录日志
  14. 拓端tecdat|红圈律所微信公众号图文数据报告
  15. 二十三、Java异常捕获与处理
  16. 190313每日一句
  17. 如何快速解决office2016每次打开都需要配置修复的问题,其他回答都是屁
  18. 高通设备进入高通9008模式
  19. java swing 插件下载_eclipse安装swing插件
  20. 一文读懂什么是云服务器,和本地服务器的区别,云服务的用途,华为云服务器的获取

热门文章

  1. Windows远程提示“终端服务器超出了最大允许连接”
  2. Grub4dos 硬盘引导 iso 文件
  3. android手机电池寿命,手机电池寿命检测
  4. October cms-Plugins(插件-注册)
  5. Unrecognized Windows Sockets error: 10106: create 的解决
  6. 2019年日本上班的你必须知道的社会保障和源泉所得税
  7. WORD文本框和文本框之间,文本框和文字相互不覆盖
  8. 【手游】手游行业专业相关知识储备
  9. 从罗京、张艺谋看CCTV的知识管理
  10. 使用键盘设置桌面计算机图标的显示不出来,显示桌面,小编教你显示桌面图标不见了如何恢复...