首頁 > 軟體

SpringBoot實現傳送郵件、傳送微信公眾號推播功能

2022-03-17 13:01:36

SpringBoot實現傳送郵件

  JavaMailSender是Spring封裝的郵件傳送封裝類,支援普通文字、附件、html等格式。

pom.xml

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

application.yml

  我們這裡用QQ郵箱傳送郵件作為例子,首先需要在QQ郵箱中開啟POP3/SMTP,獲得授權碼。
  需在application.yml中加入的設定如下:

spring:
  mail:
    host: smtp.qq.com
    username: xxxxxxxx@qq.com
    # 這個不是QQ密碼,而是自己郵箱-賬戶-開啟POP3/SMTP時的使用者端授權碼
    password: xxxxxxxxx
    default-encoding: utf-8
    protocol: smtp
    properties:
      mail:
        smtp:
          auth:
            starttls:
              # 需要TLS認證 保證傳送郵件安全驗證
              enable: true
              required: true

程式碼實現

  帶附件的格式傳送郵件需要藉助JavaMailSender物件的createMimeMessage()方法建立的範例MimeMessage作為傳送物件,而設定郵件引數通過MimeMessageHelper物件完成。
  我們建立EmailUtil工具類,在其中定義sendMail方法進行郵件傳送,EmailUtil完整程式碼如下:

@Component
public class EmailUtil {

	@Value("${spring.mail.username}")
	private String from;
	@Resource
	private JavaMailSender javaMailSender;
	
	public boolean sendMail(String email, String subject, String text) {
		MimeMessage mimeMessage = javaMailSender.createMimeMessage();
		try {
			MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMessage, true);
			// 設定發件人
			mimeMessageHelper.setFrom(from);
			// 設定收件人
			mimeMessageHelper.setTo(email);
			// 設定郵件主題
			mimeMessageHelper.setSubject(subject);
			// 設定傳送的文字資訊
			mimeMessageHelper.setText(text);
			javaMailSender.send(mimeMessage);
			return true;
		} catch (MessagingException e) {
			e.printStackTrace();
			return false;
		}
	}
}

  這裡對成員變數JavaMailSender使用了@Resource註解。@Resource註解和@Autowired註解類似,都用來宣告需要自動裝配的bean,區別在於@Autowired是型別驅動的注入,而@Resource是名稱驅動的注入,所以前者存在多bean問題,而後者,只要保證bean命名唯一就不會出現多bean的問題。

SpringBoot實現傳送微信公眾號推播

  我們需要登入微信公眾號測試平臺,獲取appID和appsecret,並在模板訊息介面中新建模板,獲得模板ID:

然後讓需要接收資訊推播的人都關注測試公眾號:

這樣我們就能得到關注了此公眾號的使用者的openid(微訊號):

pom.xml

  這裡我們使用微信模版訊息推播三方sdk:

<dependency>
            <groupId>com.github.binarywang</groupId>
            <artifactId>weixin-java-mp</artifactId>
            <version>3.3.0</version>
        </dependency>

程式碼實現

@Component
public class WxUtils {

	private Logger log = LoggerFactory.getLogger(getClass());
	public String sendMessage(String title, String message, String userOpenId) {
		//1,設定
		WxMpInMemoryConfigStorage wxStorage = new WxMpInMemoryConfigStorage();
		// 設定appId和secret
		wxStorage.setAppId("xxxxxx");
		wxStorage.setSecret("xxxxxxxxx");
		WxMpService wxMpService = new WxMpServiceImpl();
		wxMpService.setWxMpConfigStorage(wxStorage);
		// 設定訊息模板的templateID
		String messageTemplateId = "xxxxxxxxxxx";
		//2,推播訊息
		WxMpTemplateMessage templateMessage = WxMpTemplateMessage.builder()
				.toUser(userOpenId) // 要推播的使用者openid
				.templateId(messageTemplateId) // 模版id
//                .url("https://www.xxxxx.com/xxxxxx/") // 這裡可以設定使用者點選模版訊息後,跳轉存取的網址
				.build();
		//3,這裡設定推播資訊的標題和內容,以及它們的文字顏色
		templateMessage.addData(new WxMpTemplateData("title", title, "#FF00FF"));
		templateMessage.addData(new WxMpTemplateData("message", message, "#FF00FF"));
		try {
			wxMpService.getTemplateMsgService().sendTemplateMsg(templateMessage);
			log.info("微信訊息推播成功,訊息標題:{},訊息內容:{},推播給的使用者openid:{},模板id:{}",
					title, message, userOpenId, messageTemplateId);
			return "推播成功";
		} catch (Exception e) {
			log.error("推播失敗:{},訊息標題:{},訊息內容:{},推播給的使用者openid:{},模板id:{}", e.getMessage(),
			return "推播失敗";
		}
	}
}

  各個設定項例如appId和secret等都需要在application.yml中設定,然後用@Value註解將我們組態檔的屬性讀出來,我這裡是偷懶了

到此這篇關於SpringBoot實現傳送郵件、傳送微信公眾號推播功能的文章就介紹到這了,更多相關SpringBoot傳送郵件傳送微信公眾號推播內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com