使用 Java 发送邮件

在我们的应用程序中有时需要给用户发送邮件,例如激活邮件、通知邮件等等。那么如何使用 Java 来给用户发送邮件呢?

  • 使用 java 代码发送邮件

  • 使用工具类发送邮件

  • 使用Spring进行整合发送邮件

  • 发送带附件的邮件


一.使用 Java 代码发送邮件

第一步:导入依赖坐标

<!-- Javamail --><dependency> <groupId>javax.mail</groupId> <artifactId>mail</artifactId> <version>1.4.4</version></dependency>

第二步:编写 Java 代码发送邮件

/** * java程序发送邮件 * @author Mr.song * @date 2019/05/24 16:17 */public class JavaMail { public static void main(String[] args) throws Exception { //1.配置发送邮件的属性 Properties properties = new Properties(); properties.setProperty("mail.smtp.host", "localhost"); //设置协议主机 properties.setProperty("mail.smtp.auth", "true"); //设置smtp是否需要认证 //2.根据属性获得一个会话 Session session = Session.getInstance(properties); //3.设置会话是debug模式(会打印更多相关信息) session.setDebug(true); //4.创建邮件主题信息对象 MimeMessage message = new MimeMessage(session); //5.设置发件人 message.setFrom(new InternetAddress("dintalk@sh.com")); //6.设置邮件主题 message.setSubject("我的第一份java邮件"); //7.设置邮件正文 message.setText("第一份邮件发送成功了,哈哈"); //8.设置收件人: TO-发送 CC-抄送 BCC-密送 message.setRecipient(Message.RecipientType.TO, new InternetAddress("talkdin@sh.com")); //9.获取发送器对象:提供指定的协议 Transport transport = session.getTransport("smtp"); //10.设置发件人的信息 transport.connect("localhost", "dintalk", "123456"); //11.发送邮件 transport.sendMessage(message, message.getAllRecipients()); //12.关闭资源 transport.close(); }}

二.使用工具类发送邮件

第一步:导入依赖坐标(同 上)

第二步:抽取工具类

/** * @author Mr.song * @date 2019/05/24 16:53 */public class MailUtil { /** * 工具类发送邮件的方法里,发件邮箱的信息是固定的 * @param map : 收件地址和发送类型 (地址作 key) * @param subject : 邮件的主题 * @param content : 邮件的正文 * @throws MessagingException */ public static void sendMail(Map<String,String>map,String subject,String content) throws MessagingException { //1.配置发送邮件的属性 Properties properties = new Properties(); properties.setProperty("mail.smtp.host","localhost"); //设置协议主机 properties.setProperty("mail.smtp.auth","true"); //设置smtp是否需要认证 //2.根据属性获得一个会话 Session session = Session.getInstance(properties); //3.设置会话是debug模式(会打印更多相关信息,生产环境可设为false) session.setDebug(true); //4.创建邮件主题信息对象 MimeMessage message = new MimeMessage(session); //5.设置发件人 message.setFrom(new InternetAddress("dintalk@sh.com")); //6.设置邮件主题 message.setSubject(subject); //7.设置邮件正文 message.setText(content); //8.设置收件人: TO-发送 CC-抄送 BCC-密送 for (Map.Entry<String, String> me : map.entrySet()) { String email = me.getKey(); //邮件地址 String type = me.getValue(); //邮件类型 if ("to".equalsIgnoreCase(type)){ //发送 message.setRecipient(Message.RecipientType.TO,new InternetAddress(email)); }else if ("cc".equalsIgnoreCase(type)){ //抄送 message.setRecipient(Message.RecipientType.CC,new InternetAddress(email)); }else if ("bcc".equalsIgnoreCase(type)){ //密送 message.setRecipient(Message.RecipientType.BCC,new InternetAddress(email)); } } //9.获取发送器对象:提供指定的协议 Transport transport = session.getTransport("smtp"); //10.设置发件人的信息 transport.connect("localhost","dintalk","123456"); //11.发送邮件 transport.sendMessage(message,message.getAllRecipients()); //12.关闭资源 transport.close(); }}

第三步:发送邮件

/** * 使用工具类发送邮件 * @author Mr.song * @date 2019/05/24 16:47 */public class UtilMail { public static void main(String[] args) throws Exception{ Map<String,String> map = new HashMap<>(); map.put("din@sh.com","to"); map.put("talk@sh.com","cc"); map.put("talkdin@sh.com","bcc"); MailUtil.sendMail(map,"我的第二封邮件","使用工具类发送邮件...."); }}

三.整合Spring进行邮件发送

第一步:导入依赖坐标

<!-- Javamail --><dependency> <groupId>javax.mail</groupId> <artifactId>mail</artifactId> <version>1.4.4</version></dependency><!--整合spring坐标--><dependency> <groupId>org.springframework</groupId> <artifactId>spring-context-support</artifactId> <version>5.0.4.RELEASE</version></dependency>

第二步:编写发件方邮箱配置文件(mail.properties)

#设置发件方邮箱地址mail.from=dintalk@sh.com#设置协议主机mail.host=localhost#设置发件方用户名mail.username=dintalk#设置发件方密码mail.password=123456#设置邮件编码格式mail.encoding=UTF-8#设置邮件发送协议mail.protocol=smtp

第三步:编写mail的Spring配置文件( applicationContext-mail.xml )

<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <!-- 1.指定引入其他资源文件.properties文件 --> <context:property-placeholder location="classpath:mail.properties"/> <!-- 2.配置简单邮件消息对象 --> <bean id="mailMessage" class="org.springframework.mail.SimpleMailMessage"> <!-- 此时我们只需要注入发件箱名称即可。不要注入主题,正文,收件箱等不固定的信息 --> <property name="from" value="${mail.from}"></property> </bean>
<!-- 3.配置邮件发送器 --> <bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl"> <property name="host" value="${mail.host}"></property> <property name="username" value="${mail.username}"></property> <property name="password" value="${mail.password}"></property> <property name="defaultEncoding" value="${mail.encoding}"></property> <property name="protocol" value="${mail.protocol}"></property> <property name="javaMailProperties"> <props> <!-- 是否需要验证 --> <prop key="mail.smtp.auth">true</prop> <!-- 是否需要debug的信息 --> <prop key="mail.debug">true</prop> <!-- 设置发送超时时间,以秒为单位。0为永不超时 --> <prop key="mail.smtp.timeout">0</prop> </props> </property> </bean></beans>

第四步:发送邮件

/** * 整合Spring的邮件发送 * @author Mr.song * @date 2019/05/24 17:07 */public class SpringMail {
public static void main(String[] args) throws MessagingException { //1.获取Spring容器 ApplicationContext ac = new ClassPathXmlApplicationContext ("classpath:applicationContext-mail.xml"); //2.获取消息对象 SimpleMailMessage mailMessage = (SimpleMailMessage) ac.getBean("mailMessage"); //3.设置邮件的主题 mailMessage.setSubject("Spring整合javamail"); //4.设置邮件的内容,和收件人信息 mailMessage.setText("Spring整合javamail成功"); mailMessage.setTo("din@sh.com","talk@sh.com"); mailMessage.setCc("talkdin@sh.com"); //5.获取邮件发送对象 JavaMailSenderImpl mailSender = (JavaMailSenderImpl) ac.getBean("mailSender"); //6.发送邮件 mailSender.send(mailMessage); }}

四.发送带附件的邮件(在整合Spring的基础上)

编写带附件的邮件

/** * 发送带附件的邮件 * @author Mr.song * @date 2019/05/24 17:35 */public class AttachmentMail { public static void main(String[] args) throws MessagingException { //1.获取spring的容器 ApplicationContext ac = new ClassPathXmlApplicationContext ("classpath:applicationContext-mail.xml"); //2.获取发送器对象(spring提供的) JavaMailSenderImpl sender = (JavaMailSenderImpl) ac.getBean("mailSender"); //3.获取MimeMessage MimeMessage mailMessage = sender.createMimeMessage(); //4.创建spring提供的复杂邮件的帮助对象 MimeMessageHelper helper = new MimeMessageHelper(mailMessage, true); //5.设置发件人邮箱 helper.setFrom("dintalk@sh.com"); //6.设置邮件的收件人 helper.setTo("din@sh.com"); //7.设置邮件的主题 helper.setSubject("带有附件和图片的邮件"); //8.设置邮件的正文 helper.setText("<html><head></head><body><h1>这是一封带有附件和图片的邮件</h1><img src=cid:image></body></html>", true); //9.设置图片 FileSystemResource resource = new FileSystemResource(new File("C:\\Users\\Administrator\\Desktop\\1.png")); //10.使用图片替换cid (cid是规定的,只能用cid) helper.addInline("image", resource); //11.设置附件 helper.addAttachment("1.png", resource); //12.发送邮件 sender.send(mailMessage); }}
(0)

相关推荐

  • Asp.net Core 3.0 Identity 使用smtp账户确认和密码恢复

    当新建一个core项目后,使用identity基架后,确认邮件出现了错误,并不能正常使用. 建立文档在这里 https://docs.microsoft.com/zh-cn/aspnet/core/s ...

  • JAVA多线程学习笔记整理

    多线程: 三种创建方法 继承Thread类,以线程运行内容重写run方法,创建Thread对象并用start方法启动该线程. (匿名内部类) (Lambda表达式) 实现Runable接口,以线程运行 ...

  • 为什么要选择学习Java?适合零基础的初学者的文章

    我经常收到这样的问题:"要学习的第一门编程语言是什么?" Java是一门好的编程语言吗?"和" Java是适合初学者的好的第一门编程语言,还是我应该从Java或 ...

  • Java高并发21-AQS在共享,独占场景下的源码介绍

    一.AQS--锁的底层支持 1.AQS是什么 AQS是AbstractQueuedSychronizer的简称,即抽象同步队列的简称,这是实现同步器的重要组件,是一个抽象类,虽然在实际工作中很烧用到它 ...

  • Java基础之:泛型

    Java基础之:泛型 在不使用泛型的情况下,在ArrayList 中,添加3个Dog. Dog对象含有name 和 age, 并输出name 和 age (要求使用getXxx()). package ...

  • 2021最新 Java虚拟机(JVM)面试题精选(附刷题小程序)

    推荐使用小程序阅读 为了能让您更加方便的阅读 本文所有的面试题目均已整理至小程序<面试手册> 可以通过微信扫描(或长按)下图的二维码享受更好的阅读体验! 目录 推荐使用小程序阅读 1. J ...

  • 成为一名优秀的Java程序员9+难以置信的公式

    成为一名优秀的Java程序员 成为一名优秀的Java程序员并不重要,但是首先您应该了解基本的编程语言. 好吧,你知道那太好了.我们应该一步一步地精通Java编程,并应遵循所有说明,改进Java的编程逻 ...

  • Java异常处理(观察常见异常)

    一:观察异常 在一上一节我们讲解了常见的异常类型,这次可我们通过代码来观察这些异常是如何出现的. DEMO:算术异常   此时出现的是算术异常. DEMO:数组越界异常   发现了出现异常的之后的代码 ...

  • Azure上的Java:云原生身份验证

    API通常需要识别其调用方.它可以是调用API的Web应用程序,也可以是调用API的另一个API.识别API的调用者也称为身份验证.建立自己的身份验证框架可能很棘手.值得庆幸的是,不必建立自己的身份验 ...

  • Azure上的Java:监视和扩展容器化的应用程序

    了解应用程序的运行状况至关重要.如果您的服务不可用,则可能会降低生产力并延误其他流程.您可以通过多种方式跟踪应用程序的可用性.AzureMonitor提供了一种收集和分析有关应用程序性能和事件的信息的 ...