SpringBoot之邮件发送

之前工作有一个每天监控日志的需求,周末在家就会很不方便监控,需要远程或者vpn等方式解决,这时候就需要一个小项目来解决这种情况,通过思考我决定使用SpringBoot的框架写一个每天定时发日志到我邮箱,这样就解决了这个问题。
至于为什么选择SpringBoot呢?明明选择普通的java基础项目就可以这个问题。
主要是我看中SpringBoot的轻便和简捷(主要是因为懒,哈哈),再则也能巩固一下SpringBoot的项目搭建使用等问题。
本文着重讲怎么实现邮件发送功能,若需要了解SpringBoot中的定时,可以移步我另一篇博客:quartz在项目中的定时任务实现
具体的步骤如下:.
1.发送邮件需要的dependency的导入
2.邮件需要的配置准备
3.邮件工具类
4.测试发送
接下来分步骤详细说明。

1.邮件应用导入

本文使用的是apache的1.3的邮件工具包,需要其他版本的可以去 maven仓库查找。

		<dependency>
			<groupId>org.apache.commons</groupId>
			<artifactId>commons-email</artifactId>
			<version>1.3.3</version>
		</dependency>

2.邮件配置准备

本文使用的是163邮箱,也就是我用我的邮箱作为服务端给我自己发邮件。
邮件发送的时候需要服务端邮箱的SMTP授权码才可以发送邮件。SMTP的授权码可以登录自己的163邮箱网页版,在设置中SMTP页面获取到授权码:
在这里插入图片描述在这里插入图片描述在上面这个页面中新增授权密码按照步骤操作后,你会获得一串授权码,授权码只出现一次,记得保存。

3.邮件工具类

获取完授权码后就可以使用工具类了,本文的邮件相关配置是在工具类中直接写上的,有规范要求的可以写在配置文件中通过读取的方式设置。以下是工具类的源码:

import java.util.Date;
import java.util.List;
import java.util.Properties;

import javax.mail.Message;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;

import org.apache.commons.mail.EmailAttachment;
import org.apache.commons.mail.MultiPartEmail;

public class MailUtil {
	
	private static String from = "XXXX@163.com";// 用于给用户发送邮件的邮箱
	private static String password = "XXXXXXXXXXXX"; // 邮箱的密码
	private static String host = "smtp.163.com";// 发送邮件的服务器地址
	private static int port = 25;

	/**
	 * @title 邮件发送 
	 * @param to
	 * @param title
	 * @param content
	 */
	public static void sendMail(String to, String title, String content) {
		try {
			Properties prop = new Properties();
			prop.setProperty("mail.host", host);
			prop.setProperty("mail.transport.protocol", "smtp");
			prop.setProperty("mail.smtp.auth", "true");
			Session session = Session.getInstance(prop);
			session.setDebug(true);
			Transport ts = session.getTransport();
			ts.connect(host, from, password);
			MimeMessage message = new MimeMessage(session);
			message.setFrom(new InternetAddress(from));
			message.setRecipient(Message.RecipientType.TO, new InternetAddress(
					to));
			message.setSubject(title);
			message.setContent(content, "text/html;charset=UTF-8");
			message.saveChanges();
			ts.sendMessage(message, message.getAllRecipients());
			ts.close();
		} catch (Exception e) {
			throw new RuntimeException(e);
		}
	}
	/**
	 * @title 邮件发送 带单个附件
	 * @param to
	 * @param title
	 * @param content
	 * @param path
	 * @throws Exception
	 */
	public static void sendAttachmentMail(String to, String title, String content, String path) throws Exception {
		try {
			MultiPartEmail mail = new MultiPartEmail();
			// 设置端口
			mail.setSmtpPort(port);
			// 设置邮件服务器地址
			mail.setHostName(host);
			// 设置密码验证
			mail.setAuthentication(from, password);
			// 邮件发送者
			mail.setFrom(from);
			// 邮件接收者
			mail.addTo(to);
			// 邮件编码
			mail.setCharset("UTF-8");
			// 邮件主题
			mail.setSubject(title);
			//邮件内容
			mail.setMsg(content);
			// 创建附件
			EmailAttachment attachment = new EmailAttachment();
			attachment.setPath(path);
			attachment.setDisposition(EmailAttachment.ATTACHMENT);
			mail.attach(attachment);
			// 设置邮件发送时间
			mail.setSentDate(new Date());
			// 发送邮件
			mail.send();
		} catch (Exception e) {
			throw new RuntimeException(e);
		}
	}

	/**
	 * @title 邮件发送 多个附件
	 * @param to
	 * @param title
	 * @param content
	 * @param paths
	 * @throws Exception
	 */
	public static void sendManyAttachmentMail(String to, String title, String content, List<String> paths) throws Exception {
		try {
			MultiPartEmail mail = new MultiPartEmail();
			// 设置端口
			mail.setSmtpPort(port);
			// 设置邮件服务器地址
			mail.setHostName(host);
			// 设置密码验证
			mail.setAuthentication(from, password);
			// 邮件发送者
			mail.setFrom(from);
			// 邮件接收者
			mail.addTo(to);
			// 邮件编码
			mail.setCharset("UTF-8");
			// 邮件主题
			mail.setSubject(title);
			//邮件内容
			mail.setMsg(content);
			// 创建附件
			for (String f : paths) {
				EmailAttachment attachment = new EmailAttachment();
				attachment.setPath(f);
				attachment.setDisposition(EmailAttachment.ATTACHMENT);
				mail.attach(attachment);
			}
			// 设置邮件发送时间
			mail.setSentDate(new Date());
			// 发送邮件
			mail.send();
		} catch (Exception e) {
			throw new RuntimeException(e);
		}
	}

}

工具类中有三种发送方式:
1.只包含内容,收件人只有一个
1.包含内容,可添加一个附件文件,收件人只有一个
1.只包含内容,可添加多个附件文件,收件人只有一个
因为我只需要给我自己发邮件查看日志文件即可,需要多个收件人的同学可以自行扩展。

4.测试发送

测试发送的代码如下:

	public static void main(String[] args) {
		//收件人
		String to = "18119311347@163.com";
		//邮件主题
		String title = OtherUtil.getYesterday(new Date(), "yyyyMMdd") + "记账日志";
		//邮件内容 
		String content = "记账日志与数据已发送至附件,注意查收!\r\n"  + new Date().toLocaleString() + "";
		//附件 文件路径集合
		List<String> paths = new ArrayList<>();
		//日志文件
		paths.add("D:\\py_log\\0928.txt");
		//邮件发送
		try {
			MailUtil.sendManyAttachmentMail(to, title, content, paths);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

发送成功后查看自己邮箱即可看到发送的内容:
在这里插入图片描述
需要定时发送的可以把发送邮件这块的代码放在job中,设置发送时间即可。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Boot是一个用于创建独立的、基于Spring的应用程序的框架。它提供了许多开箱即用的功能,包括邮件发送。下面是使用Spring Boot实现邮件发送的步骤: 1. 添加依赖:在项目的pom.xml文件中添加Spring Boot的邮件依赖,例如: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-mail</artifactId> </dependency> ``` 2. 配置邮件信息:在application.properties或application.yml文件中配置邮件服务器的相关信息,例如: ```properties spring.mail.host=smtp.example.com spring.mail.port=587 spring.mail.username=your-email@example.com spring.mail.password=your-email-password spring.mail.properties.mail.smtp.auth=true spring.mail.properties.mail.smtp.starttls.enable=true ``` 3. 创建邮件服务类:创建一个邮件服务类,用于发送邮件。可以使用JavaMailSender来发送邮件,例如: ```java import org.springframework.beans.factory.annotation.Autowired; import org.springframework.mail.SimpleMailMessage; import org.springframework.mail.javamail.JavaMailSender; import org.springframework.stereotype.Service; @Service public class EmailService { @Autowired private JavaMailSender mailSender; public void sendEmail(String to, String subject, String text) { SimpleMailMessage message = new SimpleMailMessage(); message.setTo(to); message.setSubject(subject); message.setText(text); mailSender.send(message); } } ``` 4. 调用邮件服务类:在需要发送邮件的地方调用邮件服务类的sendEmail方法,例如: ```java import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class EmailController { @Autowired private EmailService emailService; @GetMapping("/sendEmail") public String sendEmail() { emailService.sendEmail("[email protected]", "Test Email", "This is a test email."); return "Email sent successfully."; } } ``` 以上就是使用Spring Boot实现邮件发送的基本步骤。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值