13课:springboot实现发送邮件的功能

简介

项目中可能会碰到需要我们会碰到需要发送邮件的功能,预警信息,异常报警等等.
本案例通过springboot来实现通过qq邮箱来模拟发送邮件的功能

项目demo下载

项目的结构

在这里插入图片描述

代码内容

1.pom.xml

<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.khy.mail</groupId>
  <artifactId>boot-mail</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  
  <parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>1.5.4.RELEASE</version>
	</parent>
  
   <properties>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
		<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
		<java.version>1.8</java.version>
		<!--含有多个main 需要指定某一个启动class-->
		<start-class>com.khy.MainApplication</start-class>
	</properties>
	
	 <dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency> 
		<dependency>
		    <groupId>javax.mail</groupId>
		    <artifactId>mail</artifactId>
		    <version>1.4.1</version>
		</dependency>
		<dependency>
			<groupId>com.alibaba</groupId>
			<artifactId>fastjson</artifactId>
			<version>1.2.6</version>
		</dependency>
		<dependency>
			<groupId>org.apache.commons</groupId>
			<artifactId>commons-lang3</artifactId>
			<version>3.4</version>
		</dependency>
		<dependency>
			<groupId>commons-collections</groupId>
			<artifactId>commons-collections</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
	  		<artifactId>spring-context-support</artifactId>
	  		<version>4.3.24.RELEASE</version>
		</dependency>	 
	 </dependencies>
	<build>
	    <plugins>
	        <plugin>
	            <groupId>org.springframework.boot</groupId>
	            <artifactId>spring-boot-maven-plugin</artifactId>
	        </plugin>
	    </plugins>
	</build>
</project>

2.EmailConfig.java

邮箱配置信息的邮件内容;

@Configuration
@ConfigurationProperties(prefix = "email")
@PropertySource("classpath:email.properties")
public class EmailConfig {
	private String host,userName,password,timeout,auth;
	
	@Bean
	public JavaMailSenderImpl getJavaMailSenderImpl(){
		JavaMailSenderImpl sender = new JavaMailSenderImpl();
		sender.setHost(host);
		sender.setUsername(userName);	
		sender.setPassword(password);//这个是IMAP/SMTP服务
		Properties javaMailProperties = new Properties();
		javaMailProperties.setProperty("mail.smtp.timeout", timeout);
		javaMailProperties.setProperty("mail.smtp.auth", auth);
		sender.setJavaMailProperties(javaMailProperties );
		return sender;
	}
	//省略get/set
}

3.email.properties

关于邮件服务器的配置信息内容;
qq邮箱的配置下面会贴图展示怎么操作的;
email.host=smtp.qq.com
email.userName=190502894@qq.com
email.password=phkmzouxymmvbheh
email.timeout=100000
email.auth=false

4.MailController.java

@RestController
public class MailController {
	private static final Logger log = LoggerFactory.getLogger(MailController.class);
	
	@Autowired
	private JavaMailSenderImpl sender;
	
	/**
	 * 发送纯文本内容
	 * @author  khy
	 * @createTime 2020年8月19日下午4:09:54
	 * @param receiptAddr
	 * @return
	 * @throws MessagingException
	 */
	@RequestMapping("/mailText")
	public String mailText(String[] receiptAddr) throws MessagingException{
		String subject = "邮箱标题内容";//邮箱的标题内容
		String content = "邮箱里面的内容信息-->纯文本内容";
		boolean ret = sendEmail(receiptAddr,subject,content,null);
		return "执行完毕";
	}
	
	/**
	 * 发送带有附件的邮件
	 * @author  khy
	 * @createTime 2020年8月19日下午4:10:00
	 * @param receiptAddr
	 * @return
	 * @throws MessagingException
	 */
	@RequestMapping("/mailFile")
	public String mailFile(String[] receiptAddr) throws MessagingException{
		String subject = "邮箱标题内容";//邮箱的标题内容
		String content = "邮箱里面的内容信息-->纯文本内容";
		List<String>filePaths = new ArrayList<String>(){{
			add("C:\\Users\\Administrator\\Desktop\\111.png");
			add("C:\\Users\\Administrator\\Desktop\\222.jpg");
			add("C:\\Users\\Administrator\\Desktop\\333.jpeg");
		}};
		boolean ret = sendEmail(receiptAddr,subject,content,filePaths);
		return "执行完毕";
	}
	
	private boolean sendEmail(String[] receiptAddr, String subject, String content,List<String>filePaths) {
		try {
			MimeMessage msg = sender.createMimeMessage();
			MimeMessageHelper helper = new MimeMessageHelper(msg, true, "utf-8");
			String text = createMailText(content);//设置同一个样式内容
			helper.setTo(receiptAddr);
			helper.setFrom(sender.getUsername());
			helper.setSubject(subject);
			helper.setText(text,true);
			if(!CollectionUtils.isEmpty(filePaths)){//发送带有附近的邮箱内容
				for (String filePath : filePaths) {
					File attachfile = new File(filePath);
					FileSystemResource attachment = new FileSystemResource(attachfile);
					helper.addAttachment(MimeUtility.encodeWord(attachfile.getName()), attachment);
				}
			}
			sender.send(msg);
			StringBuffer sb = new StringBuffer("");
			for(String s : receiptAddr){
				sb.append(s);
				sb.append(",");
			}
			log.info("邮件发送者:{}" ,sender.getUsername());
			log.info("邮件已发送给:" + sb.toString());
		} catch (Exception e) {
			e.printStackTrace();
		}
		return false;
	}

	/**
	 * 创建邮件内容
	 * @param content 内容
	 * @return 邮件内容
	 */
	private static String createMailText(String content){
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		Date date = new Date();
		String blank = "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;";
		String text = "<html><head></head><body>"
				+ "<p>您好:</p>"
				+ "<p>" + blank + content +"</p>"
				+ "<p>" + blank + "跳转链接地址" + "<a href='https://www.baidu.com/'>百度一下"//添加了带有跳转链接的
				+ "<p>" + blank + "此邮件为支付平台自动发出,请勿回复。 </p>"
				+ "<p>" + blank + "如有问题,请及时联系技术部门接口人。</p>"
				+ "<p>" + blank + "祝您工作愉快。</p>"
				+ "<p>" + blank + sdf.format(date) +"</p>"
				+ "</body></html>";
		return text;
	}
}

但是项目需要注意的是如果附件文件过大的话发送邮件会异常;
解决方案就是将大文件上传到内容服务器,然后指定文件在服务器的地址通过邮件将地址链接发送 给指定用户;

项目看起来干净整洁 将配置文件里面的发邮件的邮箱配置 然后调用接口的时间输入发送邮件的人既可;

QQ邮箱的配置

1.登录个人的qq邮箱

在这里插入图片描述

2.通过账户设置下拉找到邮箱服务设置

在这里插入图片描述

开启指定服务内容;

在这里插入图片描述
这个就是email.properties文件中的密码的配置;

然后执行
localhost:11111/mailText 发送的纯文本内容
其中主题和文件内容都是我们自定义的;
在这里插入图片描述

localhost:11111/mailFile发送带有附件的邮件
里面的附件 ,
下面百度一下是发送带有 跳转链接的;

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值