SpringBoot-Mail 发邮件(单发、群发、加附件、HTML格式)

我们处理异常通常会写入日志,但我们无法及时知道。如果能够将异常信息发送到邮箱,我们可以在第一时间发现这个异常。除此以外,还可以用来给用户发验证码以及各种离线消息等等。

说明:本Demo是用Springboot + Spring自带的JavaMailSender + QQ邮箱 来发邮件的

JavaMailSender

发纯文本的消息,

还可以发送HTML格式的内容,

而且还可以携带附件,

还支持群发。


一、pom.xml中引入依赖

<!-- mail发邮件 -->
<dependency>
    <groupId>org.springframework.boot</groupId>  
    <artifactId>spring-boot-starter-mail</artifactId>  
</dependency> 

application.properties

SMTP授权码 QQ邮箱开启SMTP方法如何授权

#使用smtp.qq.com的邮件服务器
spring.mail.host=smtp.qq.com
#用户名
spring.mail.username=17***80@qq.com
#密码,SMTP授权码
spring.mail.password=ra*******jfg

Controller

package com.example.springBootdemo.controller;

import java.io.PrintWriter;
import java.io.StringWriter;

import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.io.ClassPathResource;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.JavaMailSenderImpl;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
 * 发送邮件Demo
 * 1、单发、发送普通文本
 * 2、单发、发送html格式的内容,并携带附件
 * 3、群发给多个人
 * @author luolei
 * @date 2019年1月30日
 */
@RestController
@RequestMapping("/sendmail")
public class SendMailController{
	
	@Autowired
	private JavaMailSender javaMailSender;
	/**
	 * 发送普通文本
	 * @return
	 * String
	 */
	@RequestMapping("/simple")
	public String sendMail() {
		//创建一个SimpleMailMessage对象
		SimpleMailMessage message = new SimpleMailMessage();
		//发件人
		message.setFrom("17***80@qq.com");
		//收件人
		message.setTo("17***80@qq.com");
		message.setSubject("报警消息");
		try{
			int a = 1/0;
		}catch(Exception e){
			//错误详细信息
			StringWriter sw = new StringWriter();
			PrintWriter pw = new PrintWriter(sw, true);
			e.printStackTrace(pw);
			pw.flush();
			sw.flush();
			message.setText(sw.toString());
			javaMailSender.send(message);
			return "邮件发送成功";
		}
		return "邮件发送失败";
	}
	/**
	 * 发送html格式的内容,并携带附件
	 * @return
	 * @throws MessagingException
	 * String
	 */
	@RequestMapping("/enclosure")
	public String sendMail2() throws MessagingException {
		//创建一个SimpleMailMessage对象
		MimeMessage mimeMessage = javaMailSender.createMimeMessage();
		//需要创建一个MimeMessageHelper对象,相关参数和简单邮件类似
		MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);
		//发件人
		helper.setFrom("17***80@qq.com");
		//收件人
		helper.setTo("17***80@qq.com");
		helper.setSubject("报警消息");
		//将邮件内容设置为html格式
		try{
			int a = 1/0;
		}catch(Exception e){		
			//错误详细信息
			StringWriter sw = new StringWriter();
			PrintWriter pw = new PrintWriter(sw, true);
			e.printStackTrace(pw);
			pw.flush();
			sw.flush();
			helper.setText("<html><body><p style='color:red;'>"+ sw.toString() +"</p></body></html>", true);
			//定义文件,这是classpach路径下的也就是java.main.resources下的文件load4.gif
			ClassPathResource file = new ClassPathResource("static/img/loading/load4.gif");
			//添加附件文件, 设置文件名为error.gif
			helper.addAttachment("error.gif", file);
			javaMailSender.send(mimeMessage);
			return "邮件发送成功";
		}
		return "邮件发送失败";
	}
	/**
	 * 群发给多个人
	 * @return
	 * @throws MessagingException
	 * String
	 */
	@RequestMapping("/group")
	public String sendMail3() throws MessagingException {
		//用户组
		String users[] = {"17***80@qq.com","10***27@qq.com"};
		//创建一个SimpleMailMessage对象
		SimpleMailMessage message = new SimpleMailMessage();
		//发件人
		message.setFrom("17***80@qq.com");
		//收件人
		message.setTo(users); // 群发
		try{
			int a = 1/0;
		}catch(Exception e){
			//错误详细信息
			StringWriter sw = new StringWriter();
			PrintWriter pw = new PrintWriter(sw, true);
			e.printStackTrace(pw);
			pw.flush();
			sw.flush();
			message.setText(sw.toString());
			javaMailSender.send(message);
			return "邮件群发送成功";
		}
		return "邮件群发送失败";
	}

}

测试

http://localhost:8080/sendmail/simple 

http://localhost:8080/sendmail/enclosure

http://localhost:8080/sendmail/group

 

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是使用SpringBoot实现单发和群消息的WebSocket示例代码: 1. 首先,需要在pom.xml文件中添以下依赖: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-websocket</artifactId> </dependency> ``` 2. 创建WebSocket配置类,用于注册WebSocket处理程序: ```java @Configuration @EnableWebSocket public class WebSocketConfig implements WebSocketConfigurer { @Override public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) { registry.addHandler(new MyWebSocketHandler(), "/websocket") .addInterceptors(new HttpSessionHandshakeInterceptor()); } } ``` 3. 创建WebSocket处理程序,实现单发和群消息的逻辑: ```java public class MyWebSocketHandler extends TextWebSocketHandler { private static final Map<String, WebSocketSession> sessions = new ConcurrentHashMap<>(); @Override public void afterConnectionEstablished(WebSocketSession session) throws Exception { sessions.put(session.getId(), session); } @Override public void afterConnectionClosed(WebSocketSession session, CloseStatus status) throws Exception { sessions.remove(session.getId()); } @Override protected void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception { String payload = message.getPayload(); JSONObject jsonObject = JSONObject.parseObject(payload); String type = jsonObject.getString("type"); String content = jsonObject.getString("content"); if ("single".equals(type)) { String to = jsonObject.getString("to"); WebSocketSession toSession = sessions.get(to); if (toSession != null && toSession.isOpen()) { toSession.sendMessage(new TextMessage(content)); } } else if ("group".equals(type)) { for (WebSocketSession s : sessions.values()) { if (s.isOpen()) { s.sendMessage(new TextMessage(content)); } } } } } ``` 4. 在控制器中注入WebSocket处理程序,并提供单发和群消息的接口: ```java @RestController public class WebSocketController { @Autowired private MyWebSocketHandler webSocketHandler; @PostMapping("/send/single") public void sendSingleMessage(@RequestParam String to, @RequestParam String message) throws IOException { JSONObject jsonObject = new JSONObject(); jsonObject.put("type", "single"); jsonObject.put("to", to); jsonObject.put("content", message); TextMessage textMessage = new TextMessage(jsonObject.toJSONString()); for (WebSocketSession session : webSocketHandler.sessions.values()) { if (session.isOpen()) { session.sendMessage(textMessage); } } } @PostMapping("/send/group") public void sendGroupMessage(@RequestParam String message) throws IOException { JSONObject jsonObject = new JSONObject(); jsonObject.put("type", "group"); jsonObject.put("content", message); TextMessage textMessage = new TextMessage(jsonObject.toJSONString()); for (WebSocketSession session : webSocketHandler.sessions.values()) { if (session.isOpen()) { session.sendMessage(textMessage); } } } } ``` 以上代码实现了一个简单的SpringBoot WebSocket应用程序,可以通过送POST请求来单发和群消息。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值