IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> JavaMail -> 正文阅读

[Java知识库]JavaMail

一, 用于处理电子邮件相关的编程接口,javaMail 是由Sun定义的一套收发电子邮件的API,它可以方便地执行一些常用的邮件传输,不同的厂商可以提供自己的实现类,但它并没有包含在jdk中,而是作为javaEE的一部分。

二, 厂商所提供的javamail服务程序可以有选择的实现某些邮件协议,常见的邮件协议:
-SMTP: 简单邮件传输协议,用于发送电子邮件的传输协议
-POP3: 用于接收电子邮件的标准协议。
-IMAP: 互联网消息协议,是POP3的替代协议。
-三种协议都有对应SSL加密传输的协议,分别是 SMTPS, POP3S,和IMAPS 。除JavaMail 服务提供程序之外,JavaMail还需要JAF (JavaBeans Activation Framework) 来处理不是纯文本的邮件内容,包括MIME(多用途互联网邮件扩展),URL 页面和文件附件等内容。另外,JavaMail 依赖 JAF (JavaBeans Activation Framework),JAF 在Java6之后已经合并到JDK中,而JDK5之前需要另外下载JAF的类库。

三,JavaMail 关键对象
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
四,添加JavaMail相关依赖
在Maven项目中的pom.xml配置文件中添加mail所需的依赖

<!--    JavaMail-->
    <dependency>
      <groupId>com.sun.mail</groupId>
      <artifactId>javax.mail</artifactId>
      <version>1.6.2</version>
    </dependency>

    <dependency>
      <groupId>javax.mail</groupId>
      <artifactId>javax.mail-api</artifactId>
      <version>1.6.2</version>
    </dependency>

五,发送普通文本邮件

public class MailTest {
    public static void main(String [] args ) throws  Exception{
        //定义邮箱服务器配置
        Properties prop = new Properties ();
        //设置邮件服务器主机名
        prop.setProperty("mail.smtp.host","smtp.163.com");
        //设置邮件服务器端口
        prop.setProperty("mail.smtp.port","25");
        //设置邮件服务器认证属性  (设置为true表示发送服务器需要身份认证)
        prop.setProperty("mail.smtp.auth","true");

        //根据不同的邮箱,决定 SMTP 协议是否需要使用 SSL 安全认证
        prop.setProperty("mail.smtp.port","465");
        prop.setProperty("mail.smtp.socketFactory.class","javax.net.ssl.SSLSocketFactory");
        prop.setProperty("mail.smtp.socketFactory.fallback","false");
        prop.setProperty("mail.smtp.socketFactory.port","465");

        //使用JavaMail发送邮件的五个步骤
        /*
        *   1.创建Session
        *   2.开启Session的 debug 模式,查看到程序发送Email的进程
        *   3.通过Session得到transport对象
        *   4.使用邮箱的用户名和密码连上邮件服务器(用户名只需写 @ 符号前面的内容即可,密码指的是 邮箱协议授权码)
        *
        * */
        Session session = Session.getInstance(prop);
        session.setDebug(true);
        Transport transport = session.getTransport();
        transport.connect("smtp.163.com","lwj18475","PQQVRNRONLXASWQZ");
        Message message= createSimpleMail(session);
        transport.sendMessage(message , message.getAllRecipients());
        transport.close();

    }

    public static  Message createSimpleMail(Session session) throws MessagingException {
        /*
        *   1.创建邮件对象
        *   2.设置邮件的发送人
        *   3.设置邮件的接收人
        *   4.设置(邮件的主题,发送时间,邮件内容)
        *   4.返回封装好的邮箱对象
        * */
        MimeMessage message = new MimeMessage(session);
       message.setFrom("lwj18475@163.com");
       message.setRecipients(Message.RecipientType.TO,"lwj18475@163.com");
       message.setSubject("测试文本邮件!");
       message.setSentDate(new Date());
       message.setText("Hello,Vodka!");
       return message;
    }
}

六,发送带附件的邮件

package com.vodka.Test;
import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.*;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
import java.util.Date;
import java.util.Properties;

/**
 * @author Vodka
 * @date 2022/02//17:01
 */
public class MailTest {
    public static void main(String [] args ) throws  Exception{
        //定义邮箱服务器配置
        Properties prop = new Properties ();
        //设置邮件服务器主机名
        prop.setProperty("mail.smtp.host","smtp.163.com");
        //设置邮件服务器端口
        prop.setProperty("mail.smtp.port","25");
        //设置邮件服务器认证属性  (设置为true表示发送服务器需要身份认证)
        prop.setProperty("mail.smtp.auth","true");

        //根据不同的邮箱,决定 SMTP 协议是否需要使用 SSL 安全认证
        prop.setProperty("mail.smtp.port","465");
        prop.setProperty("mail.smtp.socketFactory.class","javax.net.ssl.SSLSocketFactory");
        prop.setProperty("mail.smtp.socketFactory.fallback","false");
        prop.setProperty("mail.smtp.socketFactory.port","465");

        //使用JavaMail发送邮件的五个步骤
        /*
        *   1.创建Session
        *   2.开启Session的 debug 模式,查看到程序发送Email的进程
        *   3.通过Session得到transport对象
        *   4.使用邮箱的用户名和密码连上邮件服务器(用户名只需写 @ 符号前面的内容即可,密码指的是 邮箱协议授权码)
        *
        * */
        Session session = Session.getInstance(prop);
        session.setDebug(true);
        Transport transport = session.getTransport();
        transport.connect("smtp.163.com","lwj18475","PQQVRNRONLXASWQZ");
        Message message= createAttachMail(session);
        transport.sendMessage(message , message.getAllRecipients());
        transport.close();

    }

    public static  Message createAttachMail(Session session) throws MessagingException {
        /*
        *   1.创建邮件对象
        *   2.设置邮件的发送人
        *   3.设置邮件的接收人
        *   4.设置(邮件的主题,发送时间,邮件内容)
        *      Message表示一封邮件的抽象,messages.getContent() 返回一个  Multipart 对象,
        * 一个Multipart包含一个或多个BodyPart对象,来组成邮件的正文部分(包括附件), 将BodyPart嵌入MultiPart,再将MultiPart嵌入Message。
        *   5.返回封装好的邮箱对象
        * */
        MimeMessage message = new MimeMessage(session);
       message.setFrom("lwj18475@163.com");
       message.setRecipients(Message.RecipientType.TO,"lwj18475@163.com");
       message.setSubject("含带附件的邮件!");
       message.setSentDate(new Date());
        //邮件正文
        MimeBodyPart bodyPart = new MimeBodyPart();
        bodyPart.setContent("一封带附件的邮件","text/html; charset=utf-8");
        //创建附件
        MimeMultipart mimeMultipart = new MimeMultipart();
        MimeBodyPart attachPart = new MimeBodyPart();
        //获取本地文件
        DataHandler dataHandler = new DataHandler(new FileDataSource("C:\\Users\\伟神\\Desktop\\Hotel\\VipRoom.jpg"));
        attachPart.setDataHandler(dataHandler);
        //附件名称
        attachPart.setFileName("Spring.Log");
        //添加正文
        mimeMultipart.addBodyPart(bodyPart);
        //添加附件
        mimeMultipart.addBodyPart(attachPart);
        //如果在邮件中添加附件,需要设置为mixed
        mimeMultipart.setSubType("mixed");
        message.setContent(mimeMultipart);
       return message;
    }
}

七,Html内容的邮件
在这里插入图片描述

八,


1。邮件信息配置封装类

public class MailConfiguration {
    //服务器信息
    private String Host;
    private String Port;
    //邮件发送者与邮件接收者集合
    private  String FromAddress;
    private List<String> AllRecipients;
    //邮箱的用户名(发送者)
    private String UserName;
    private String UserPwd;
    //邮件认证,主题,内容,附件
    private boolean Authentic = true;
    private String Subject;
    private String Content;
    private List<String> AttachFiles;


    public MailConfiguration() {
    }

    public MailConfiguration(String host, String port, String fromAddress, List<String> allRecipients, String userName, String userPwd, boolean authentic, String subject, String content, List<String> attachFiles) {
        Host = host;
        Port = port;
        FromAddress = fromAddress;
        AllRecipients = allRecipients;
        UserName = userName;
        UserPwd = userPwd;
        Authentic = authentic;
        Subject = subject;
        Content = content;
        AttachFiles = attachFiles;
    }

    public String getHost() {
        return Host;
    }

    public void setHost(String host) {
        Host = host;
    }

    public String getPort() {
        return Port;
    }

    public void setPort(String port) {
        Port = port;
    }

    public String getFromAddress() {
        return FromAddress;
    }

    public void setFromAddress(String fromAddress) {
        FromAddress = fromAddress;
    }

    public List<String> getAllRecipients() {
        return AllRecipients;
    }

    public void setAllRecipients(List<String> allRecipients) {
        AllRecipients = allRecipients;
    }

    public String getUserName() {
        return UserName;
    }

    public void setUserName(String userName) {
        UserName = userName;
    }

    public String getUserPwd() {
        return UserPwd;
    }

    public void setUserPwd(String userPwd) {
        UserPwd = userPwd;
    }

    public boolean isAuthentic() {
        return Authentic;
    }

    public void setAuthentic(boolean authentic) {
        Authentic = authentic;
    }

    public String getSubject() {
        return Subject;
    }

    public void setSubject(String subject) {
        Subject = subject;
    }

    public String getContent() {
        return Content;
    }

    public void setContent(String content) {
        Content = content;
    }

    public List<String> getAttachFiles() {
        return AttachFiles;
    }

    public void setAttachFiles(List<String> attachFiles) {
        AttachFiles = attachFiles;
    }

    @Override
    public String toString() {
        return "MailConfiguration{" +
                "Host='" + Host + '\'' +
                ", Port='" + Port + '\'' +
                ", FromAddress='" + FromAddress + '\'' +
                ", AllRecipients=" + AllRecipients +
                ", UserName='" + UserName + '\'' +
                ", UserPwd='" + UserPwd + '\'' +
                ", Authentic=" + Authentic +
                ", Subject='" + Subject + '\'' +
                ", Content='" + Content + '\'' +
                ", AttachFiles=" + AttachFiles +
                '}';
    }
}


2.身份认证类
public class MyAuthenticator extends Authenticator {
    private  String UserName;
    private String UserPwd;

    public  MyAuthenticator(String userName , String userPwd){
        this.UserName = userName;
        this.UserPwd = userPwd;
    }

    //发送邮件时,进行身份认证
    protected PasswordAuthentication getPasswordAuthentication(){
        return new PasswordAuthentication(UserName,UserPwd);
    }
}





3.邮件发送类
public class MailSender {
    public  void sendMail(MailConfiguration mc) throws Exception {
        //定义邮箱服务器配置
        Properties prop = new Properties ();
        //设置邮件服务器主机名
        prop.setProperty("mail.smtp.host",mc.getHost());
        //设置邮件服务器端口
        prop.setProperty("mail.smtp.port",mc.getPort());
        //设置邮件服务器认证属性  (设置为true表示发送服务器需要身份认证)
        prop.setProperty("mail.smtp.auth", String.valueOf(mc.isAuthentic()));
        //身份认证
        MyAuthenticator myAuthenticator = new MyAuthenticator(mc.getUserName(),mc.getUserPwd());

        //创建Session对象
        Session session = Session.getDefaultInstance(prop,myAuthenticator);
        //开启debug模式
        session.setDebug(true);

        //创建Message
        Message message = new MimeMessage(session);
        //设置发送方邮箱地址
        message.setFrom(new InternetAddress(mc.getFromAddress()));
        //设置邮件主题
        message.setSubject(mc.getSubject());
        //设置发送时间
        message.setSentDate(new Date());
        //设置收件地址
        if(mc.getAllRecipients() != null && mc.getAllRecipients().size() > 0){

             Address[] addresses = new Address[mc.getAllRecipients().size()];

             for(int index = 0 ; index < mc.getAllRecipients().size() ; ++index){

                 Address address =  new InternetAddress(mc.getAllRecipients().get(index));

                 addresses[index] = address;

             }
             //设置类型,并将接收地址数组添加到message对象
            message.setRecipients(Message.RecipientType.TO,addresses);
        }

        //创建多媒体容器
        MimeMultipart mimeMultipart = new MimeMultipart();
        //主体容器
        MimeBodyPart mimeBodyPart = new MimeBodyPart();
        //创建正文内容
        mimeBodyPart.setContent(mc.getContent(),"text/html;character=UTF-8");
        //将正文加入到主体容器
        mimeMultipart.addBodyPart(mimeBodyPart);

        //添加附件(获取所有附件)
        List<String> AttachFiles = mc.getAttachFiles();
        MimeBodyPart attachFile = null;
        if(AttachFiles != null && AttachFiles.size() > 0 ){
            File tempFile = null;
            for (int index = 0 ; index < AttachFiles.size(); index++){
                attachFile = new MimeBodyPart();
                tempFile = new File(AttachFiles.get(index));
                //判断当前文件路径的文件是否为空
                if(tempFile != null){
                    //加入文件源
                    DataHandler dataHandler = new DataHandler(new FileDataSource(tempFile));
                    attachFile.setDataHandler(dataHandler);
                    //设置文件附件名(借助MimeUtility可以解决文件名乱码问题)
                    attachFile.setFileName(MimeUtility.decodeText(tempFile.getName()));
                    //将附属文件加入主容器
                    mimeMultipart.addBodyPart(attachFile);
                }
            }
        }
       //将多媒体容器,添加到message对象中
        message.setContent(mimeMultipart);
        //发送邮件
        Transport.send(message);

    }
}


4.测试类
	  @Test
    public void MailTest() throws Exception {
        MailConfiguration mailConfiguration = new MailConfiguration();
         mailConfiguration.setHost("smtp.163.com");
         mailConfiguration.setPort("25");
         mailConfiguration.setUserName("lwj18475");
         mailConfiguration.setUserPwd("xxxxxxxxxx");
         mailConfiguration.setSubject("邮件封装测试");
         mailConfiguration.setFromAddress("lwj18475@163.com");
         List<String> Recipients = new ArrayList<>();
         Recipients.add("lwj18475@163.com");
         mailConfiguration.setAllRecipients(Recipients);
         mailConfiguration.setContent("<h1>Hello Vodka!");
         MailSender mailSender = new MailSender();

         //添加附件
          List<String> files = new ArrayList<>();
          files.add("C:\\Users\\伟神\\Desktop\\Hotel\\VipRoom.jpg");
          files.add("D:\\VipRoom.jpg");
          mailConfiguration.setAttachFiles(files);
          mailSender.sendMail(mailConfiguration);
     }

九,使用Spring 的Mail API
1.配置pom.xml

 <!--    添加spring的配置环境-->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <version> 5.3.9</version>
    </dependency>

    <!--  上下文环境支持  -->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context-support</artifactId>
      <version>5.2.4.RELEASE</version>
    </dependency>

<!-- spring 测试环境-->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-test</artifactId>
      <version>4.3.2.RELEASE</version>
      <scope>compile</scope>
    </dependency>

<!--    JavaMail-->
    <dependency>
      <groupId>com.sun.mail</groupId>
      <artifactId>javax.mail</artifactId>
      <version>1.6.2</version>
    </dependency>

2.定义spring配置

<?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"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd
       http://www.springframework.org/schema/tx
       http://www.springframework.org/schema/tx/spring-tx.xsd
       http://www.springframework.org/schema/aop
       http://www.springframework.org/schema/aop/spring-aop.xsd
       http://www.springframework.org/schema/context
       http://www.springframework.org/schema/context/spring-context.xsd">

    <!--      设置spring自动化扫描注解范围  -->
    <context:component-scan base-package="com.vodka" />

    <!--  邮件发送器:有发送接口,透明创建Java Mail的MimeMessage,及邮件发送的配置   -->
     <bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
         <property name="host" value="smtp.163.com"></property>
         <property name="port" value="25"></property>
         <property name="defaultEncoding" value="UTF-8"></property>
         <property name="username" value="lwj18475"></property>
         <property name="password" value="xxxxxxxxxxxxxxxxxx"></property>
     </bean>
    
    <!--  普通文本邮件对象    -->
     <bean id="templateMessage" class="org.springframework.mail.SimpleMailMessage">
         <property name="from" value="lwj18475@163.com"></property>
         <property name="subject" value="SpringMailApiTest"></property>
     </bean>


</beans>

3.定义接口和实现类


//接口
public interface OrderManager {
    void placeOrder();
}


//实现类
@Service
public class ManagerOrderImp implements OrderManager{

    @Autowired
    private MailSender mailSender;

    @Autowired
    private SimpleMailMessage simpleMailMessage;

    @Override
    public void placeOrder(){
        //创建信息对象
         SimpleMailMessage msg = new SimpleMailMessage(this.simpleMailMessage);
        //设置接收地址
        msg.setTo("lwj18475@163.com");
        msg.setText("veryGood");
        try{
            this.mailSender.send(msg);
        }catch(MailException ex){
            System.err.println(ex.getMessage());
        }
    }
}


//测试类
public class TestMailFunction {

     public static void main(String[] args){
         BeanFactory beanFactory = new ClassPathXmlApplicationContext("spring.xml");
         ManagerOrderImp managerOrderImp = (ManagerOrderImp) beanFactory.getBean("managerOrderImp");
         managerOrderImp.placeOrder();
     }
}





//带附件测试类
public class TestMailFunction {

     public static void main(String[] args) throws MessagingException {
         BeanFactory beanFactory = new ClassPathXmlApplicationContext("spring.xml");
         //获取发送器
         JavaMailSender javaMailSendermailSender = (JavaMailSender) beanFactory.getBean("mailSender");
         //创建邮件信封
         MimeMessage mimeMessage = javaMailSendermailSender.createMimeMessage();
         mimeMessage.setSubject("SpringMailTest-AttachFiles");   //设置邮件主题
         //创建带有附件的消息帮助类
         MimeMessageHelper  mimeMessageHelper = new MimeMessageHelper(mimeMessage,true,"utf-8");
         mimeMessageHelper.setTo("lwj18475@163.com");
         mimeMessageHelper.setText("<h1>敬赠</h1>");
         mimeMessageHelper.setFrom("lwj18475@163.com");
         File file = new File("D:\\敬赠.txt");
         mimeMessageHelper.addAttachment(file.getName(),file);
         javaMailSendermailSender.send(mimeMessage);
     }
}
  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-03-03 15:57:54  更:2022-03-03 16:02:38 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 11:40:24-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码