【java】向指定邮箱发送电子邮件

本文介绍如何使用SMTP、POP3和IMAP等协议发送和接收邮件,包括使用Java的javax.mail库和Spring Boot框架发送简单及带附件的邮件的具体步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我们有时候会有这样的需求,向指定用户发送邮件,有可能是最简单的邮件,有可能是带附件的邮件。下面我们来看一下如何发送邮件。

网络协议

首先我们要了解一下邮件协议。

发送邮箱用到了SMTPPOP3IMAP等协议

SMTP是一种提供可靠且有效的电子邮件传输的协议。SMTP是建立在FTP文件传输服务商的一种邮件服务,主要用于系统之间的邮件信息传递,并提供有关来信的通知。

SMTP独立于特定的传输子系统。且只需要可靠有序的数据流信道支持,SMTP的重要特征之一就是其能跨越网络传输邮件,即“SMTP邮件中继”。

使用SMTP可以实现相同网络处理进程之间的邮件传输,也可通过中继器或网关实现某处理进程与其他网络之间的邮件传输。

POP3 邮局协议IMAP是对POP3的扩展,作用类似,功能更强。

使用SMTP :把邮件发送到服务器,服务器间传递邮件。

使用POP3: 收件方查看邮箱里的邮件。

在这里插入图片描述

获取授权码

这里我们演示qq的授权码
我们进入qq邮箱界面,设置->账户
在这里插入图片描述

代码实现

javax.mail 发送邮件

@Test
    public void testEmail() throws MessagingException {
        Properties prop = new Properties();
        //定义邮件发送协议
        prop.setProperty("mail.transport.protocol", "smtp");
        //声明邮件服务器地址
        prop.setProperty("mail.smtp.host", "smtp.qq.com");
        //发送权限,为true时表示允许发送
        prop.setProperty("mail.smtp.auth", "true");
        //设置为true时,调试的时候可以在控制台显示信息
        prop.setProperty("mail.debug", "true");

		//相当于建立了一条通信路线
        Session session = Session.getInstance(prop);
        Message msg = new MimeMessage(session);
        //发件者邮箱
        msg.setFrom(new InternetAddress("14598466112@qq.com"));
        //收件邮箱
        msg.setRecipient(RecipientType.TO, new InternetAddress("48987462135@qq.com"));
        msg.setSubject("这是14598466112发送给48987462135的邮件XXXXXXXXXX");
        msg.setText("这是邮件的正文");

        Transport tran = session.getTransport();
        tran.connect("894645250", "授权码");
        tran.sendMessage(msg, msg.getAllRecipients());

    }

springboot 发送邮件

在spring-boot中也为我们提供了发送邮件的工具

1.导入依赖

在pom中导入发送电子邮件需要的依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
   	<artifactId>spring-boot-starter-mail</artifactId>
</dependency>

2.全局配置

我们在application.yml文件中配置邮件的相关信息

spring:
	mail:
    host: smtp.qq.com				# 主机协议 如果是qq,那么不变,如果是163,将qq换成163
    userName: xxxx@qq.com  #邮箱账号,这里用的qq的
    passWord: pcdoqdtjzsmcdahg #授权码,不是qq密码
    default-encoding: UTF-8
    properties:
      mail:
        smtp:
          auth: true
          starttls:
            enable: true
            required: true

3.写测试类测试

我们在导入依赖,配置完后就可以进行代码编写了
我们写一个测试类测试

@RequiredArgsConstructor
public class Email {
 private final JavaMailSender javaMailSender;
 private final EmailProperties emailProperties;

 public void sendEmail(EmailDTO emailDTO) {
        //1.创建一个邮件对象
        MimeMessage mimeMessage = javaMailSender.createMimeMessage();
        //2.发送邮件的一个工具类
        MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMessage);
		@Value("${spring.mail.username}")
   		private String userName;
        try {
            //获得邮件标题
            mimeMessageHelper.setSubject("标题");
            //获得邮件内容
            mimeMessageHelper.setText("标题内容", true);
            //获得发件人名字
            mimeMessageHelper.setFrom(userName);
            //收件人
            mimeMessageHelper.setTo("收件人的邮箱");
            //发送邮件
            javaMailSender.send(mimeMessage);

        } catch (MessagingException e) {
            e.printStackTrace();
        }
    }
}

补充:

发送邮件这个可以封装成一个方法,所以我们可以写成一个工具类,为以后开发时能更好的利用,所以我们这里可以对上述的方法改一些东西

首先,我们可以在config包下写一个配置类,

@Configuration
@ConfigurationProperties(prefix = "spring.mail")
public class EmailProperties {
    //发送者用户名
    private String userName;
    //发送者密码,是授权码
    private String passWord;
    //发送的主机
    private String host;
    
	//get和set方法自行补充
}

我们在配置完后,就可以直接调用了

其次,我们可以将所需要传递的参数封装为一个实体类

   public class Email{
    private final String title =;
    private final String content;
    private String to;
    //get和set方法自行添加
}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值