【Spring框架06】java邮件发送(163邮箱为例)

本文详细介绍了如何使用JavaMail发送邮件,包括环境配置、普通文本和HTML邮件、附件的发送,以及通过Spring框架进行邮件发送的配置和实现。重点讲解了授权、邮件内容设置和测试案例,提供了完整的代码示例。
摘要由CSDN通过智能技术生成

【Spring框架06】java邮件发送(163邮箱为例)

思维导图

在这里插入图片描述

一、环境准备

1.下载maven依赖,并配置在pom.xml文件中

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

2.准备邮箱,并且设置授权法

在这里插入图片描述
在网易163邮箱中查看,服务器地址
在这里插入图片描述
在这里插入图片描述

二、JavaMail邮件发送

1.发送普通文本邮件

(1)Authenticator认证
注意这里导入的包

import javax.mail.Authenticator;
import javax.mail.PasswordAuthentication;
public class MyAuthenticator extends Authenticator {
    private String username;
    private String password;

    public MyAuthenticator(String username, String password) {
        this.username = username;
        this.password = password;
    }

    @Override
//    重写通过密码校验的这种方式
    protected PasswordAuthentication getPasswordAuthentication() {
        return new PasswordAuthentication(username,password);
    }
}

(2)发送一个文本文件的java类

public class SendMail {
    public void send01() throws MessagingException{
//        定义邮箱服务器配置
        Properties props = new Properties();
//        163服务器地址
        props.put("mail.smtp.host","smtp.163.com");
//        163服务器端口
        props.put("mail.smtp.prot","25");
//        163服务器认证属性
        props.put("mail.smtp.auth","true");

//        加载配置用于验证
        Session session = Session.getInstance(props,new MyAuthenticator("发件人账户邮箱","授权密码"));

//        创建消息并发送
        Message message = new MimeMessage(session);
//        设置发件人
        Address from = new InternetAddress("发件人邮箱");
        message.setFrom(from);
//        设置收件人
        Address to = new InternetAddress("收件人邮箱");
        message.setRecipient(Message.RecipientType.TO,to);
//        设置发送日期
        message.setSentDate(new Date());
//        设置主题
        message.setSubject("我喜欢你");
//        设置文本内容
        message.setText("嘿,你知道吗,现在我写的每行代码都与你有关,比如这个有一点想你的代码,它可能已经在这个宇宙中尝试发送了很多次,才侥幸可以被你看到哦,希望你不要不识抬举!!");

//        发送
        Transport.send(message);
    }
}

(3)编写测试类

public class SendMailTest extends TestCase {

    public void testSend01() throws MessagingException{
        new SendMail().send01();
        System.out.println("发送成功!!!!!!!!!!!!");
    }
}

可能会有这一行的报错提示,显示你发送的是垃圾邮件,如果是当天开启ssl(就是上图需要开启的内容)
第二天去测试试试看(网易垃圾,呼呼!)

om.sun.mail.smtp.SMTPSendFailedException: 554 DT:SPM 163 smtp7,C8CowADn2JA6xv9gTTRZow--.7280S2 1627375162,please see

2.发送html邮件和附件

(1)发html邮件就在原来普通文本邮件的基础上加上以下这段代码就好了

//        添加HTML内容
        Multipart multipart = new MimeMultipart();
        BodyPart bodyPart = new MimeBodyPart();

        String html = "<html><body><a href='http://www.binflcy.cn'>嘿嘿,一个自己建的用于记录和男朋友甜甜的网站</a></body></html>";
        bodyPart.setContent(html,"text/html;charset=utf-8");

        multipart.addBodyPart(bodyPart);
        message.setContent(multipart);

(2)发送附件,在原先基础上添加附件资源信息

//        添加附件
        BodyPart bodyPart2 = new MimeBodyPart();
        FileDataSource fds = new FileDataSource(new File("D:\\ide\\IdeaProjects\\com.lcy\\spring05-mail\\image\\2.png"));

        bodyPart2.setDataHandler(new DataHandler(fds));
        bodyPart2.setFileName(MimeUtility.encodeText("2.png"));
        multipart.addBodyPart(bodyPart2);

        message.setContent(multipart);

发送成功
在这里插入图片描述

3.发送封装

(1)基本信息封装

public class lcyMailSendInfo {
    private String serverHost;//服务器主机
    private String serverPort;//服务器端口
    private String fromAddress;//发送方邮件地址
    private List<String> toAddress;//接收方地址

    private String userName;//邮件服务用户名
    private String userPwd;//服务器密码

    private String subject;//邮件主题
    private String content;//邮件内容

    private Boolean flag=true;

    private List<String> attachFileName;//附件文件名

    public String getServerHost() {
        return serverHost;
    }

    public void setServerHost(String serverHost) {
        this.serverHost = serverHost;
    }

    public String getServerPort() {
        return serverPort;
    }

    public void setServerPort(String serverPort) {
        this.serverPort = serverPort;
    }

    public String getFromAddress() {
        return fromAddress;
    }

    public void setFromAddress(String fromAddress) {
        this.fromAddress = fromAddress;
    }

    public List<String> getToAddress() {
        return toAddress;
    }

    public void setToAddress(List<String> toAddress) {
        this.toAddress = toAddress;
    }

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public String getUserPwd() {
        return userPwd;
    }

    public void setUserPwd(String userPwd) {
        this.userPwd = userPwd;
    }

    public String getSubject() {
        return subject;
    }

    public void setSubject(String subject) {
        this.subject = subject;
    }

    public String getContent() {
        return content;
    }

    public void setContent(String content) {
        this.content = content;
    }

    public Boolean getFlag() {
        return flag;
    }

    public void setFlag(Boolean flag) {
        this.flag = flag;
    }

    public List<String> getAttachFileName() {
        return attachFileName;
    }

    public void setAttachFileName(List<String> attachFileName) {
        this.attachFileName = attachFileName;
    }
}

(2)用户请求处理封装

package com.binflcy.util;

import com.binflcy.MyAuthenticator;

import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.*;
import javax.mail.internet.*;
import java.io.File;
import java.util.Date;
import java.util.List;
import java.util.Properties;
public class lcyMailSender {
    public void sendMail(lcyMailSendInfo mailSendInfo) throws Exception{
        Message message = null;
        Session session = null;
    try{
        MyAuthenticator au = new MyAuthenticator(mailSendInfo.getUserName(),mailSendInfo.getUserPwd());
        Properties props = new Properties();
        props.put("mail.smtp.host",mailSendInfo.getServerHost());
        props.put("mail.smtp.port",mailSendInfo.getServerPort());
        props.put("mail.smtp.auth",mailSendInfo.getFlag());
        session = Session.getDefaultInstance(props,au);
        message = new MimeMessage(session);
        Address from = new InternetAddress(mailSendInfo.getFromAddress());
        message.setFrom(from);
        message.setSentDate(new Date());
        if(mailSendInfo.getToAddress()!=null&&mailSendInfo.getToAddress().size()>0){
            Address[] addresses=new Address[mailSendInfo.getToAddress().size()];
            for(int i=0;i<mailSendInfo.getToAddress().size();i++){
                Address address =new InternetAddress(mailSendInfo.getToAddress().get(i));
                addresses[i]=address;
            }
            message.setRecipients(Message.RecipientType.TO,addresses);
            message.setSubject(mailSendInfo.getSubject());
            Multipart multipart = new MimeMultipart();
            BodyPart bodyPart = new MimeBodyPart();
            bodyPart.setContent(mailSendInfo.getContent(),"test/html;charset=utf-8");
            multipart.addBodyPart(bodyPart);
//          添加附件
            List<String> files = mailSendInfo.getAttachFileName();
            if(files!=null&&files.size()>0){
                for(int i=0;i<files.size();i++){
                    File tempFile =new File(files.get(i));
                    if(tempFile.exists()){
                        BodyPart temp = new MimeBodyPart();
                        temp.setDataHandler(new DataHandler(new FileDataSource(tempFile)));
                        temp.setFileName(MimeUtility.encodeText(tempFile.getName()));
                        multipart.addBodyPart(temp);
                    }
                }
            }
            message.setContent(multipart);
            Transport.send(message);
        }
    }catch (Exception e){
        e.printStackTrace();
    }
    }
}

(3)添加测试类模拟用户发送邮件

public class lcyMailSenderTest extends TestCase {

    public void testSendMail() throws Exception {
        lcyMailSendInfo mailSendInfo = new lcyMailSendInfo();
        mailSendInfo.setServerHost("smtp.163.com");
        mailSendInfo.setServerPort("25");
        mailSendInfo.setUserName("");
        mailSendInfo.setUserPwd("");
        mailSendInfo.setSubject("我超级喜欢你");
        mailSendInfo.setFromAddress("");
        mailSendInfo.setContent("Hello");
        List<String> users =new ArrayList<String>();
        users.add("");
        mailSendInfo.setToAddress(users);

        List<String> files = new ArrayList<String>();
        files.add("");
        mailSendInfo.setAttachFileName(files);

        lcyMailSender mailSender =new lcyMailSender();
        mailSender.sendMail(mailSendInfo);
    }
}

三、Spring API实现邮件发送

1.添加 java mail坐标依赖

<?xml version="1.0" encoding="UTF-8"?>

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>com.lcy</groupId>
  <artifactId>spring06</artifactId>
  <version>1.0-SNAPSHOT</version>

  <name>spring06</name>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
  </properties>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.12</version>
      <scope>test</scope>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.springframework/spring-context -->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <version>5.3.8</version>
    </dependency>

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context-support</artifactId>
      <version>5.3.8</version>
    </dependency>

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-test</artifactId>
      <version>5.3.8</version>
    </dependency>

    <!-- https://mvnrepository.com/artifact/javax.mail/javax.mail-api -->
    <dependency>
      <groupId>javax.mail</groupId>
      <artifactId>mail</artifactId>
      <version>1.4.7</version>
    </dependency>



  </dependencies>

  <build>

  </build>
</project>

2.配置bean

<?xml version="1.0" encoding="UTF-8"?>
<!--使用的命名空间-->
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd">
    <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="用户邮箱"></property>
        <property name="password" value="发送端密码"></property>
        <property name="javaMailProperties">
            <props>
                <prop key="mail.smtp.auth">true</prop>
            </props>
        </property>
    </bean>
    <bean id="templateMessage" class="org.springframework.mail.SimpleMailMessage">
        <property name="from" value="发件邮箱"/>
        <property name="subject" value="主题"/>
    </bean>
    <bean id="orderManager" class="com.lcy.OrderManagerImpl">
        <property name="mailSender" ref="mailSender"/>
        <property name="templateMessage" ref="templateMessage"/>
    </bean>
</beans>

3.发送接口并实现

(1)编写接口类

public interface OrderManager {
    void placeOrder();
}

(2)实现接口类(注意要构造set方法)

public class OrderManagerImpl implements OrderManager {

    private MailSender mailSender;
    private SimpleMailMessage templateMessage;
    @Override
    public void placeOrder() {
//  创建邮件基本信息
        SimpleMailMessage simpleMailMessage = new SimpleMailMessage(this.templateMessage);
        simpleMailMessage.setTo("收件人邮箱");
        simpleMailMessage.setText("发送信息");
        mailSender.send(simpleMailMessage);
    }

    public void setMailSender(MailSender mailSender) {
        this.mailSender = mailSender;
    }


    public void setTemplateMessage(SimpleMailMessage templateMessage) {
        this.templateMessage = templateMessage;
    }
}

(3)测试类模拟用户发送邮件

public class OrderManagerImplTest extends TestCase {

    @Test
    public void testPlaceOrder() {
        ApplicationContext context = new ClassPathXmlApplicationContext("spring.xml");
        OrderManager orderManager =(OrderManager) context.getBean("orderManager");
        orderManager.placeOrder();
    }
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值