热门标签 | HotTags
当前位置:  开发笔记 > 运维 > 正文

基于JavaMail实现邮件发送

这篇文章主要为大家详细介绍了基于JavaMail实现邮件发送功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

通过javamail 实现发送邮件,供大家参考,具体内容如下

注意:服务器有些端口是没有开放的 需要去开放端口。 有些邮箱是需要开启对应授权服务的。

1.maven依赖:

 
  
  javax.mail   
  mail   
  1.4.5   
  
  
  com.sun.mail   
  javax.mail   
    

2.新建个实体类 用来保存信息

import java.util.Properties; 
public class MailSenderInfo { 
   // 发送邮件的服务器的IP(或主机地址) 
   private String mailServerHost; 
   // 发送邮件的服务器的端口 
   private String mailServerPort; 
   // 发件人邮箱地址 
   private String fromAddress; 
   // 收件人邮箱地址 
   private String toAddress; 
   // 登陆邮件发送服务器的用户名 
   private String userName; 
   // 登陆邮件发送服务器的密码 
   private String password; 
   // 是否需要身份验证 
   private boolean validate = true; 
   // 邮件主题 
   private String subject; 
   // 邮件的文本内容 
   private String content; 
   // 邮件附件的文件名 
   private String[] attachFileNames; 
    
   public Properties getProperties() { 
   Properties p = new Properties(); 
   p.put("mail.smtp.host", this.mailServerHost); 
   p.put("mail.smtp.port", this.mailServerPort); 
   //设置是否安全验证,默认为false,一般情况都设置为true 
   p.put("mail.smtp.auth", "true");  
   p.put("mail.smtp.starttls.enable","true");  
   p.put("mail.smtp.EnableSSL.enable","true"); 
   return p; 
   } 
   public String getMailServerHost() { 
   return mailServerHost; 
   } 
   public void setMailServerHost(String mailServerHost) { 
   this.mailServerHost = mailServerHost; 
   } 
   public String getMailServerPort() { 
   return mailServerPort; 
   } 
   public void setMailServerPort(String mailServerPort) { 
   this.mailServerPort = mailServerPort; 
   } 
   public boolean isValidate() { 
   return validate; 
   } 
   public void setValidate(boolean validate) { 
   this.validate = validate; 
   } 
   public String[] getAttachFileNames() { 
   return attachFileNames; 
   } 
   public void setAttachFileNames(String[] fileNames) { 
   this.attachFileNames = fileNames; 
   } 
   public String getFromAddress() { 
   return fromAddress; 
   } 
   public void setFromAddress(String fromAddress) { 
   this.fromAddress = fromAddress; 
   } 
   public String getPassword() { 
   return password; 
   } 
   public void setPassword(String password) { 
   this.password = password; 
   } 
   public String getToAddress() { 
   return toAddress; 
   } 
   public void setToAddress(String toAddress) { 
   this.toAddress = toAddress; 
   } 
   public String getUserName() { 
   return userName; 
   } 
   public void setUserName(String userName) { 
   this.userName = userName; 
   } 
   public String getSubject() { 
   return subject; 
   } 
   public void setSubject(String subject) { 
   this.subject = subject; 
   } 
   public String getContent() { 
   return content; 
   } 
   public void setContent(String textContent) { 
   this.cOntent= textContent; 
   } 
} 

3.创建一个验证器

import javax.mail.Authenticator; 
import javax.mail.PasswordAuthentication; 
 
/** 
 * 邮件用户名和密码认证器 
 */ 
public class MyAuthenticator extends Authenticator{ 
   String userName = null; 
   String password = null; 
   public MyAuthenticator() { 
   } 
   public MyAuthenticator(String username, String password) { 
   this.userName = username; 
   this.password = password; 
   } 
   protected PasswordAuthentication getPasswordAuthentication() { 
   return new PasswordAuthentication(userName, password); 
   } 
} 

4.在调用的地方给实体类赋值

private void email(HttpSession session, String email) { 
    // 设置邮件服务器信息 
    MailSenderInfo mailInfo = new MailSenderInfo(); 
    mailInfo.setMailServerHost("smtp-mail.outlook.com");// 发送邮件的服务器的IP(或主机地址) 
    mailInfo.setMailServerPort("587");//有些端口在服务器上是没开放的 这里需要注意下 
    mailInfo.setValidate(true); 
    // 邮箱用户名(根据自己情况设置) 这里可以多弄几个邮箱过来 避免邮箱账号需要验证 或者被当成垃圾邮件封号 A失败就用B 
    mailInfo.setUserName("此处填写跟上面发送邮件服务器对应的邮箱"); 
    // 邮箱密码(根据自己情况设置) 
    mailInfo.setPassword("这是你的密码"); 
    // 发件人邮箱(根据自己情况设置,如果你没对邮箱进行特别设置,应该和邮箱用户名一致) 
    mailInfo.setFromAddress("这里跟上面一样"); 
    // 收件人邮箱(根据自己情况设置) 
    mailInfo.setToAddress(email); 
    // 邮件标题 
    mailInfo.setSubject("我是标题"); 
    // 邮件内容 
    mailInfo.setContent("我是内容,正经的内容不是垃圾邮箱"); 
    // 发送邮件 
    SimpleMailSender sms = new SimpleMailSender(); 
    // 发送文体格式 
    sms.sendTextMail(mailInfo); 
  } 

5.这里才是真正的发送邮件

public class SimpleMailSender { 
  public boolean sendTextMail(MailSenderInfo mailInfo) { 
     // 判断是否需要身份认证 
     MyAuthenticator authenticator = null; 
     Properties pro = mailInfo.getProperties(); 
     if (mailInfo.isValidate()) { 
      // 如果需要身份认证,则创建一个密码验证器 
      authenticator = new MyAuthenticator(mailInfo.getUserName(), mailInfo.getPassword()); 
     } 
     // 根据邮件会话属性和密码验证器构造一个发送邮件的session 
     Session sendMailSession = Session.getDefaultInstance(pro, authenticator); 
     try { 
      // 根据session创建一个邮件消息 
      Message mailMessage = new MimeMessage(sendMailSession); 
      // 创建邮件发送者地址 
      Address from = new InternetAddress(mailInfo.getFromAddress()); 
      // 设置邮件消息的发送者 
      mailMessage.setFrom(from); 
      // 创建邮件的接收者地址,并设置到邮件消息中 
      Address to = new InternetAddress(mailInfo.getToAddress()); 
      mailMessage.setRecipient(Message.RecipientType.TO, to); 
      // 设置邮件消息的主题 
      mailMessage.setSubject(mailInfo.getSubject()); 
      // 设置邮件消息发送的时间 
      mailMessage.setSentDate(new Date()); 
      // 设置邮件消息的主要内容 
      String mailCOntent= mailInfo.getContent(); 
      mailMessage.setText(mailContent); 
      mailMessage.saveChanges(); 
      // 发送邮件 
      Transport.send(mailMessage); 
      return true; 
     } catch (MessagingException ex) { 
      ex.printStackTrace(); 
     } 
     return false; 
     } 
} 

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


推荐阅读
  • 本文详细介绍了如何在Windows和Linux系统上配置Openfire服务器,包括安装步骤、数据库配置及端口映射等关键环节。 ... [详细]
  • 本文详细介绍了Socket在Linux内核中的实现机制,包括基本的Socket结构、协议操作集以及不同协议下的具体实现。通过这些内容,读者可以更好地理解Socket的工作原理。 ... [详细]
  • 2023年1月28日网络安全热点
    涵盖最新的网络安全动态,包括OpenSSH和WordPress的安全更新、VirtualBox提权漏洞、以及谷歌推出的新证书验证机制等内容。 ... [详细]
  • 页面预渲染适用于主要包含静态内容的页面。对于依赖大量API调用的动态页面,建议采用SSR(服务器端渲染),如Nuxt等框架。更多优化策略可参见:https://github.com/HaoChuan9421/vue-cli3-optimization ... [详细]
  • STM32代码编写STM32端不需要写关于连接MQTT服务器的代码,连接的工作交给ESP8266来做,STM32只需要通过串口接收和发送数据,间接的与服务器交互。串口三配置串口一已 ... [详细]
  • 如何高效学习鸿蒙操作系统:开发者指南
    本文探讨了开发者如何更有效地学习鸿蒙操作系统,提供了来自行业专家的建议,包括系统化学习方法、职业规划建议以及具体的开发技巧。 ... [详细]
  • 本文探讨为何Request对象的外观设计被认为是精妙的,重点在于其如何利用门面模式确保数据安全,同时保持系统的高效交互。 ... [详细]
  • 汇总了2023年7月7日最新的网络安全新闻和技术更新,包括最新的漏洞披露、工具发布及安全事件。 ... [详细]
  • Canopy环境安装与使用指南
    《利用Python进行数据分析》一书推荐使用EPDFree版本的环境,然而随着技术的发展,目前更多人倾向于使用Canopy。本文将详细介绍Canopy的安装及使用方法。 ... [详细]
  • 本文探讨了使用Python实现监控信息收集的方法,涵盖从基础的日志记录到复杂的系统运维解决方案,旨在帮助开发者和运维人员提升工作效率。 ... [详细]
  • 笔记说明重学前端是程劭非(winter)【前手机淘宝前端负责人】在极客时间开的一个专栏,每天10分钟,重构你的前端知识体系& ... [详细]
  • 本文探讨了互联网服务提供商(ISP)如何可能篡改或插入用户请求的数据流,并提供了有效的技术手段来防止此类劫持行为,确保网络环境的安全与纯净。 ... [详细]
  • 解析Java虚拟机HotSpot中的GC算法实现
    本文探讨了Java虚拟机(JVM)中HotSpot实现的垃圾回收(GC)算法,重点介绍了根节点枚举、安全点及安全区域的概念和技术细节,以及这些机制如何影响GC的效率和准确性。 ... [详细]
  • Java虚拟机及其发展历程
    Java虚拟机(JVM)是每个Java开发者日常工作中不可或缺的一部分,但其背后的运作机制却往往显得神秘莫测。本文将探讨Java及其虚拟机的发展历程,帮助读者深入了解这一关键技术。 ... [详细]
  • WebBenchmark:强大的Web API性能测试工具
    本文介绍了一款名为WebBenchmark的Web API性能测试工具,该工具不仅支持HTTP和HTTPS服务的测试,还提供了丰富的功能来帮助开发者进行高效的性能评估。 ... [详细]
author-avatar
靠谱的留一手_267
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有