Jelajahi Sumber

:space_invader:feat: 使用邮件推送服务发送海外地区用户的验证码

Ritchie 1 tahun lalu
induk
melakukan
441dc6b8b4

+ 312 - 290
pom.xml

@@ -1,32 +1,32 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <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>
+         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.szwl</groupId>
-	<artifactId>szwlServer</artifactId>
-	<version>0.0.1</version>
-	<packaging>jar</packaging>
+    <groupId>com.szwl</groupId>
+    <artifactId>szwlServer</artifactId>
+    <version>0.0.1</version>
+    <packaging>jar</packaging>
 
-	<name>szwlServer</name>
+    <name>szwlServer</name>
 
-	<parent>
-		<groupId>org.springframework.boot</groupId>
-		<artifactId>spring-boot-starter-parent</artifactId>
-		<version>2.3.12.RELEASE</version>
-	</parent>
+    <parent>
+        <groupId>org.springframework.boot</groupId>
+        <artifactId>spring-boot-starter-parent</artifactId>
+        <version>2.3.12.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>
-		<spring-cloud.version>Hoxton.SR12</spring-cloud.version>
-<!--		<mybatis-spring-boot-starter.version>2.2.0</mybatis-spring-boot-starter.version>-->
-		<mybatis-plus.version>3.4.0</mybatis-plus.version>
-		<mybatis.version>3.5.7</mybatis.version>
-	</properties>
+    <properties>
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
+        <java.version>1.8</java.version>
+        <spring-cloud.version>Hoxton.SR12</spring-cloud.version>
+        <!--		<mybatis-spring-boot-starter.version>2.2.0</mybatis-spring-boot-starter.version>-->
+        <mybatis-plus.version>3.4.0</mybatis-plus.version>
+        <mybatis.version>3.5.7</mybatis.version>
+    </properties>
 
 	<dependencyManagement>
 		<dependencies>
@@ -55,279 +55,301 @@
 		</dependencies>
 	</dependencyManagement>
 
-	<dependencies>
-		<!-- springcloud组件 start -->
-		<dependency>
-			<groupId>org.springframework.boot</groupId>
-			<artifactId>spring-boot-starter-web</artifactId>
-		</dependency>
-		<dependency>
-			<groupId>org.springframework.cloud</groupId>
-			<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
-		</dependency>
-		<dependency>
-			<groupId>org.springframework.cloud</groupId>
-			<artifactId>spring-cloud-starter-openfeign</artifactId>
-		</dependency>
-		<dependency>
-			<groupId>org.springframework.cloud</groupId>
-			<artifactId>spring-cloud-starter-config</artifactId>
-		</dependency>
-		<dependency>
-			<groupId>org.springframework.boot</groupId>
-			<artifactId>spring-boot-starter-actuator</artifactId>
-		</dependency>
-		<dependency>
-			<groupId>org.springframework.boot</groupId>
-			<artifactId>spring-boot-starter-test</artifactId>
-			<scope>test</scope>
-		</dependency>
-<!--		<dependency>-->
-<!--			<groupId>org.springframework.boot</groupId>-->
-<!--			<artifactId>spring-boot-starter-jdbc</artifactId>-->
-<!--		</dependency>-->
-		<!-- springcloud组件 end -->
-		<dependency>
-			<groupId>org.projectlombok</groupId>
-			<artifactId>lombok</artifactId>
-		</dependency>
+    <dependencies>
+        <!-- springcloud组件 start -->
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-web</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.cloud</groupId>
+            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.cloud</groupId>
+            <artifactId>spring-cloud-starter-openfeign</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.cloud</groupId>
+            <artifactId>spring-cloud-starter-config</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-actuator</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-test</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <!--		<dependency>-->
+        <!--			<groupId>org.springframework.boot</groupId>-->
+        <!--			<artifactId>spring-boot-starter-jdbc</artifactId>-->
+        <!--		</dependency>-->
+        <!-- springcloud组件 end -->
+        <dependency>
+            <groupId>org.projectlombok</groupId>
+            <artifactId>lombok</artifactId>
+        </dependency>
 
-		<!-- mybatis-plus -->
-		<dependency>
-			<groupId>com.baomidou</groupId>
-			<artifactId>mybatis-plus-boot-starter</artifactId>
-		</dependency>
-		<!--mybatisplus代码生成 start -->
-		<dependency>
-			<groupId>com.baomidou</groupId>
-			<artifactId>mybatis-plus-generator</artifactId>
-		</dependency>
-		<dependency>
-			<groupId>org.apache.velocity</groupId>
-			<artifactId>velocity-engine-core</artifactId>
-			<version>2.2</version>
-		</dependency>
-		<!--mybatisplus代码生成 end -->
-		<dependency>
-			<groupId>mysql</groupId>
-			<artifactId>mysql-connector-java</artifactId>
-		</dependency>
-		<!-- swagger2 -->
-		<dependency>
-			<groupId>com.github.xiaoymin</groupId>
-			<artifactId>knife4j-spring-boot-starter</artifactId>
-			<version>3.0.3</version>
-		</dependency>
-		<dependency>
-			<groupId>ch.ethz.ganymed</groupId>
-			<artifactId>ganymed-ssh2</artifactId>
-			<version>build210</version>
-		</dependency>
-		<!-- json -->
-		<dependency>
-			<groupId>com.alibaba</groupId>
-			<artifactId>fastjson</artifactId>
-			<version>1.2.75</version>
-		</dependency>
-		<!-- Spring Component End -->
-		<dependency>
-			<groupId>org.json</groupId>
-			<artifactId>json</artifactId>
-			<version>20200518</version>
-		</dependency>
-		<!--邮箱-->
-		<dependency>
-			<groupId>javax.mail</groupId>
-			<artifactId>mail</artifactId>
-			<version>1.4.7</version>
-		</dependency>
-		<!-- hutool -->
-		<dependency>
-			<groupId>cn.hutool</groupId>
-			<artifactId>hutool-core</artifactId>
-			<version>5.7.16</version>
-		</dependency>
-		<dependency>
-			<groupId>cn.hutool</groupId>
-			<artifactId>hutool-http</artifactId>
-			<version>5.7.16</version>
-		</dependency>
-		<dependency>
-			<groupId>commons-beanutils</groupId>
-			<artifactId>commons-beanutils</artifactId>
-			<version>1.8.3</version>
-		</dependency>
-		<!--<dependency>-->
-			<!--<groupId>org.hibernate</groupId>-->
-			<!--<artifactId>hibernate</artifactId>-->
-			<!--<version>3.6.10</version>-->
-		<!--</dependency>-->
-		<dependency>
-			<groupId>org.hibernate</groupId>
-			<artifactId>hibernate-core</artifactId>
-			<version>3.6.10.Final</version>
-		</dependency>
-		<!-- 个推 -->
-		<dependency>
-			<groupId>com.gexin.platform</groupId>
-			<artifactId>gexin-rp-sdk-http</artifactId>
-			<version>4.0.1.9</version>
-		</dependency>
-		<!--rabbitmq-->
-		<dependency>
-			<groupId>org.springframework.boot</groupId>
-			<artifactId>spring-boot-starter-amqp</artifactId>
-			<version>2.1.3.RELEASE</version>
-		</dependency>
-		<dependency>
-			<groupId>org.springframework.cloud</groupId>
-			<artifactId>spring-cloud-starter-bus-amqp</artifactId>
-		</dependency>
-		<dependency>
-			<groupId>org.springframework.amqp</groupId>
-			<artifactId>spring-rabbit</artifactId>
-			<version>2.3.6</version>
-		</dependency>
-		<dependency>
-			<groupId>org.springframework.amqp</groupId>
-			<artifactId>spring-amqp</artifactId>
-			<version>2.3.6</version>
-		</dependency>
-		<dependency>
-			<groupId>cn.com.crbank.ommo</groupId>
-			<artifactId>EsBaseServer</artifactId>
-			<version>1.2.11</version>
-		</dependency>
-		<!--redis start-->
-		<dependency>
-			<groupId>org.springframework.boot</groupId>
-			<artifactId>spring-boot-starter-data-redis</artifactId>
-		</dependency>
-		<dependency>
-			<groupId>org.apache.commons</groupId>
-			<artifactId>commons-pool2</artifactId>
-		</dependency>
-		<!--redis end-->
-		<!--杉德支付-->
-		<dependency>
-			<groupId>cn.com.sand</groupId>
-			<artifactId>hmpay-sdk</artifactId>
-			<version>1.1.4</version>
-		</dependency>
-		<!--汇付支付-->
-		<dependency>
-			<groupId>com.huifu.bspay.sdk</groupId>
-			<artifactId>dg-java-sdk</artifactId>
-			<version>3.0.8</version>
-		</dependency>
-		<!-- 导出Excel -->
-		<dependency>
-			<groupId>cn.afterturn</groupId>
-			<artifactId>easypoi-base</artifactId>
-			<version>4.4.0</version>
-		</dependency>
-		<!--定时任务-->
-<!--		<dependency>-->
-<!--			<groupId>org.springframework.boot</groupId>-->
-<!--			<artifactId>spring-boot-starter-web</artifactId>-->
-<!--		</dependency>-->
+        <!-- mybatis-plus -->
+        <dependency>
+            <groupId>com.baomidou</groupId>
+            <artifactId>mybatis-plus-boot-starter</artifactId>
+        </dependency>
+        <!--mybatisplus代码生成 start -->
+        <dependency>
+            <groupId>com.baomidou</groupId>
+            <artifactId>mybatis-plus-generator</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.velocity</groupId>
+            <artifactId>velocity-engine-core</artifactId>
+            <version>2.2</version>
+        </dependency>
+        <!--mybatisplus代码生成 end -->
+        <dependency>
+            <groupId>mysql</groupId>
+            <artifactId>mysql-connector-java</artifactId>
+        </dependency>
+        <!-- swagger2 -->
+        <dependency>
+            <groupId>com.github.xiaoymin</groupId>
+            <artifactId>knife4j-spring-boot-starter</artifactId>
+            <version>3.0.3</version>
+        </dependency>
+        <dependency>
+            <groupId>ch.ethz.ganymed</groupId>
+            <artifactId>ganymed-ssh2</artifactId>
+            <version>build210</version>
+        </dependency>
+        <!-- json -->
+        <dependency>
+            <groupId>com.alibaba</groupId>
+            <artifactId>fastjson</artifactId>
+            <version>1.2.75</version>
+        </dependency>
+        <!-- Spring Component End -->
+        <dependency>
+            <groupId>org.json</groupId>
+            <artifactId>json</artifactId>
+            <version>20200518</version>
+        </dependency>
+        <!--邮箱-->
+        <dependency>
+            <groupId>javax.mail</groupId>
+            <artifactId>mail</artifactId>
+            <version>1.4.7</version>
+        </dependency>
 
-		<dependency>
-			<groupId>com.squareup.okhttp3</groupId>
-			<artifactId>okhttp</artifactId>
-			<version>4.9.3</version>
-		</dependency>
+        <!-- Direct Mail -->
+        <dependency>
+            <groupId>com.sun.mail</groupId>
+            <artifactId>javax.mail</artifactId>
+            <version>1.6.2</version>
+        </dependency>
+        <dependency>
+            <groupId>javax.activation</groupId>
+            <artifactId>activation</artifactId>
+            <version>1.1.1</version>
+        </dependency>
 
-		<dependency>
-			<groupId>org.springframework.boot</groupId>
-			<artifactId>spring-boot-starter</artifactId>
-		</dependency>
+        <!-- hutool -->
+        <dependency>
+            <groupId>cn.hutool</groupId>
+            <artifactId>hutool-core</artifactId>
+            <version>5.7.16</version>
+        </dependency>
+        <dependency>
+            <groupId>cn.hutool</groupId>
+            <artifactId>hutool-http</artifactId>
+            <version>5.7.16</version>
+        </dependency>
+        <dependency>
+            <groupId>commons-beanutils</groupId>
+            <artifactId>commons-beanutils</artifactId>
+            <version>1.8.3</version>
+        </dependency>
+        <!--<dependency>-->
+        <!--<groupId>org.hibernate</groupId>-->
+        <!--<artifactId>hibernate</artifactId>-->
+        <!--<version>3.6.10</version>-->
+        <!--</dependency>-->
+        <dependency>
+            <groupId>org.hibernate</groupId>
+            <artifactId>hibernate-core</artifactId>
+            <version>3.6.10.Final</version>
+        </dependency>
+        <!-- 个推 -->
+        <dependency>
+            <groupId>com.gexin.platform</groupId>
+            <artifactId>gexin-rp-sdk-http</artifactId>
+            <version>4.0.1.9</version>
+        </dependency>
+        <!--rabbitmq-->
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-amqp</artifactId>
+            <version>2.1.3.RELEASE</version>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.cloud</groupId>
+            <artifactId>spring-cloud-starter-bus-amqp</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.amqp</groupId>
+            <artifactId>spring-rabbit</artifactId>
+            <version>2.3.6</version>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.amqp</groupId>
+            <artifactId>spring-amqp</artifactId>
+            <version>2.3.6</version>
+        </dependency>
+        <dependency>
+            <groupId>cn.com.crbank.ommo</groupId>
+            <artifactId>EsBaseServer</artifactId>
+            <version>1.2.11</version>
+        </dependency>
+        <!--redis start-->
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-data-redis</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.commons</groupId>
+            <artifactId>commons-pool2</artifactId>
+        </dependency>
+        <!--redis end-->
+        <!--杉德支付-->
+        <dependency>
+            <groupId>cn.com.sand</groupId>
+            <artifactId>hmpay-sdk</artifactId>
+            <version>1.1.4</version>
+        </dependency>
+        <!--汇付支付-->
+        <dependency>
+            <groupId>com.huifu.bspay.sdk</groupId>
+            <artifactId>dg-java-sdk</artifactId>
+            <version>3.0.8</version>
+        </dependency>
+        <!-- 导出Excel -->
+        <dependency>
+            <groupId>cn.afterturn</groupId>
+            <artifactId>easypoi-base</artifactId>
+            <version>4.4.0</version>
+        </dependency>
+        <!--定时任务-->
+        <!--		<dependency>-->
+        <!--			<groupId>org.springframework.boot</groupId>-->
+        <!--			<artifactId>spring-boot-starter-web</artifactId>-->
+        <!--		</dependency>-->
 
-<!--		<dependency>-->
-<!--			<groupId>org.projectlombok</groupId>-->
-<!--			<artifactId>lombok</artifactId>-->
-<!--			<optional>true</optional>-->
-<!--		</dependency>-->
-<!--		<dependency>-->
-<!--			<groupId>org.springframework.boot</groupId>-->
-<!--			<artifactId>spring-boot-starter-test</artifactId>-->
-<!--			<scope>test</scope>-->
-<!--		</dependency>-->
-		<!--elasticsearch-->
-		<dependency>
-			<groupId>org.elasticsearch</groupId>
-			<artifactId>elasticsearch</artifactId>
-			<version>7.6.2</version>
-		</dependency>
-		<dependency>
-			<groupId>org.elasticsearch.client</groupId>
-			<artifactId>elasticsearch-rest-high-level-client</artifactId>
-			<version>7.6.2</version>
-		</dependency>
-		<dependency>
-			<groupId>org.elasticsearch.client</groupId>
-			<artifactId>elasticsearch-rest-client</artifactId>
-			<version>7.6.2</version>
-		</dependency>
-		<!-- 七牛云 -->
-		<dependency>
-			<groupId>com.qiniu</groupId>
-			<artifactId>qiniu-java-sdk</artifactId>
-			<version>7.13.0</version>
-		</dependency>
-		<dependency>
-			<groupId>com.google.code.gson</groupId>
-			<artifactId>gson</artifactId>
-		</dependency>
-	</dependencies>
+        <dependency>
+            <groupId>com.squareup.okhttp3</groupId>
+            <artifactId>okhttp</artifactId>
+            <version>4.9.3</version>
+        </dependency>
 
-	<build>
-		<resources>
-			<resource>
-				<directory>src/main/java</directory>
-				<includes>
-					<include>**/*.xml</include>
-					<include>**/*.*</include>
-				</includes>
-				<!-- 是否替换资源中的属性 -->
-				<filtering>false</filtering>
-			</resource>
-			<resource>
-				<directory>src/main/resources</directory>
-				<includes>
-					<include>**/*.*</include>
-				</includes>
-				<!-- 是否替换资源中的属性 -->
-				<filtering>false</filtering>
-			</resource>
-		</resources>
-		<plugins>
-			<plugin>
-				<groupId>org.springframework.boot</groupId>
-				<artifactId>spring-boot-maven-plugin</artifactId>
-				<configuration>
-					<layout>ZIP</layout>
-				</configuration>
-			</plugin>
-		</plugins>
-	</build>
-	<repositories>
-		<!-- 个推 -->
-		<repository>
-			<id>getui-nexus</id>
-			<url>http://mvn.gt.igexin.com/nexus/content/repositories/releases/</url>
-		</repository>
-		<repository>
-			<id>nexus</id>
-			<url>http://120.25.151.99:1888/repository/crbank-host/</url>
-			<releases>
-				<enabled>true</enabled>
-			</releases>
-			<snapshots>
-				<enabled>false</enabled>
-			</snapshots>
-		</repository>
-	</repositories>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter</artifactId>
+        </dependency>
+
+        <!--		<dependency>-->
+        <!--			<groupId>org.projectlombok</groupId>-->
+        <!--			<artifactId>lombok</artifactId>-->
+        <!--			<optional>true</optional>-->
+        <!--		</dependency>-->
+        <!--		<dependency>-->
+        <!--			<groupId>org.springframework.boot</groupId>-->
+        <!--			<artifactId>spring-boot-starter-test</artifactId>-->
+        <!--			<scope>test</scope>-->
+        <!--		</dependency>-->
+        <!--elasticsearch-->
+        <dependency>
+            <groupId>org.elasticsearch</groupId>
+            <artifactId>elasticsearch</artifactId>
+            <version>7.6.2</version>
+        </dependency>
+        <dependency>
+            <groupId>org.elasticsearch.client</groupId>
+            <artifactId>elasticsearch-rest-high-level-client</artifactId>
+            <version>7.6.2</version>
+        </dependency>
+        <dependency>
+            <groupId>org.elasticsearch.client</groupId>
+            <artifactId>elasticsearch-rest-client</artifactId>
+            <version>7.6.2</version>
+        </dependency>
+        <!-- 七牛云 -->
+        <dependency>
+            <groupId>com.qiniu</groupId>
+            <artifactId>qiniu-java-sdk</artifactId>
+            <version>7.13.0</version>
+        </dependency>
+        <dependency>
+            <groupId>com.google.code.gson</groupId>
+            <artifactId>gson</artifactId>
+        </dependency>
+
+        <!-- amazon ses -->
+        <!-- https://mvnrepository.com/artifact/com.amazonaws/aws-java-sdk -->
+<!--        <dependency>-->
+<!--            <groupId>com.amazonaws</groupId>-->
+<!--            <artifactId>aws-java-sdk</artifactId>-->
+<!--            <version>1.10.77</version>-->
+<!--        </dependency>-->
+
+    </dependencies>
+
+    <build>
+        <resources>
+            <resource>
+                <directory>src/main/java</directory>
+                <includes>
+                    <include>**/*.xml</include>
+                    <include>**/*.*</include>
+                </includes>
+                <!-- 是否替换资源中的属性 -->
+                <filtering>false</filtering>
+            </resource>
+            <resource>
+                <directory>src/main/resources</directory>
+                <includes>
+                    <include>**/*.*</include>
+                </includes>
+                <!-- 是否替换资源中的属性 -->
+                <filtering>false</filtering>
+            </resource>
+        </resources>
+        <plugins>
+            <plugin>
+                <groupId>org.springframework.boot</groupId>
+                <artifactId>spring-boot-maven-plugin</artifactId>
+                <configuration>
+                    <layout>ZIP</layout>
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>
+    <repositories>
+        <!-- 个推 -->
+        <repository>
+            <id>getui-nexus</id>
+            <url>http://mvn.gt.igexin.com/nexus/content/repositories/releases/</url>
+        </repository>
+        <repository>
+            <id>nexus</id>
+            <url>http://120.25.151.99:1888/repository/crbank-host/</url>
+            <releases>
+                <enabled>true</enabled>
+            </releases>
+            <snapshots>
+                <enabled>false</enabled>
+            </snapshots>
+        </repository>
+    </repositories>
 
 
 </project>

+ 5 - 4
src/main/java/com/szwl/controller/TMessageCodeController.java

@@ -56,6 +56,7 @@ public class TMessageCodeController {
         return R.ok(lastSendTime); // 返回时间戳
     }
 
+
     @ApiOperation(value = "发送注册验证码")
     @PostMapping("/sentRegisterCode")
     public ResponseModel<?> sentRegisterCode(String ifForeign, String phoneOrEmail, String hostName) {
@@ -118,8 +119,8 @@ public class TMessageCodeController {
             if (list.size() > 0) {
                 return R.fail(ResponseCodesEnum.A0207, "用户邮箱已存在");
             }
-            //国外发邮件
-            String result = tMessageCodeService.sentEmail("0", phoneOrEmail);
+            //海外发邮件验证码
+            String result = tMessageCodeService.sendEmailAbroad("0", phoneOrEmail);
             return R.ok(result);
         }
     }
@@ -193,8 +194,8 @@ public class TMessageCodeController {
             if (list.size() <= 0) {
                 return R.fail(ResponseCodesEnum.A0001, "登录名或邮箱出错");
             }
-            //海外发邮件
-            String result = tMessageCodeService.sentEmail("1", phoneOrEmail);
+            //海外发邮件验证码
+            String result = tMessageCodeService.sendEmailAbroad("1", phoneOrEmail);
             return R.ok(result);
         }
     }

+ 263 - 0
src/main/java/com/szwl/model/utils/SampleMail.java

@@ -0,0 +1,263 @@
+package com.szwl.model.utils;
+
+import javax.mail.*;
+import javax.mail.internet.InternetAddress;
+import javax.mail.internet.MimeMessage;
+import java.io.UnsupportedEncodingException;
+import java.util.Date;
+import java.util.Properties;
+import java.util.UUID;
+//import java.util.HashMap;
+//import java.util.Base64;
+//import com.google.gson.GsonBuilder;
+//import javax.activation.DataHandler;
+//import javax.activation.FileDataSource;
+//import java.net.URL;
+//import java.net.URLEncoder;
+//import javax.activation.DataHandler;
+//import javax.activation.URLDataSource;
+
+public class SampleMail {
+    protected static String genMessageID(String mailFrom) {
+        // message-id 必须符合 first-part@last-part
+        String[] mailInfo = mailFrom.split("@");
+        String domain = mailFrom;
+        int index = mailInfo.length - 1;
+        if (index >= 0) {
+            domain = mailInfo[index];
+        }
+        UUID uuid = UUID.randomUUID();
+        StringBuffer messageId = new StringBuffer();
+        messageId.append('<').append(uuid.toString()).append('@').append(domain).append('>');
+        return messageId.toString();
+    }
+
+    public void sendAuthCode(String toEmail, String content) {
+        // 配置发送邮件的环境属性
+        final Properties props = new Properties();
+
+        // 表示SMTP发送邮件,需要进行身份验证
+        props.put("mail.smtp.auth", "true");
+        props.put("mail.smtp.host", "smtpdm.aliyun.com"); //华东1:smtpdm.aliyun.com,悉尼:smtpdm-ap-southeast-2.aliyun.com
+        //设置端口:
+        props.put("mail.smtp.port", "80");//或"25"
+        props.put("mail.smtp.from", "robot@suncee.cn");    //mailfrom 参数
+        props.put("mail.user", "robot@suncee.cn");// 发件人的账号(在控制台创建的发信地址)
+        props.put("mail.password", "DirectMail123");// 发信地址的smtp密码(在控制台选择发信地址进行设置)
+        System.setProperty("mail.mime.splitlongparameters", "false");//用于解决附件名过长导致的显示异常
+
+        // 构建授权信息,用于进行SMTP进行身份验证
+        Authenticator authenticator = new Authenticator() {
+            @Override
+            protected PasswordAuthentication getPasswordAuthentication() {
+                // 用户名、密码
+                String userName = props.getProperty("mail.user");
+                String password = props.getProperty("mail.password");
+                return new PasswordAuthentication(userName, password);
+            }
+        };
+        //使用环境属性和授权信息,创建邮件会话
+        Session mailSession = Session.getInstance(props, authenticator);
+        //mailSession.setDebug(true);//开启debug模式
+
+
+        final String messageIDValue = genMessageID(props.getProperty("mail.user"));
+        //创建邮件消息
+        MimeMessage message = new MimeMessage(mailSession) {
+            @Override
+            protected void updateMessageID() throws MessagingException {
+                //设置自定义Message-ID值
+                setHeader("Message-ID", messageIDValue);//创建Message-ID
+            }
+        };
+
+        try {
+            // 设置发件人邮件地址和名称。填写控制台配置的发信地址。和上面的mail.user保持一致。名称用户可以自定义填写。
+            InternetAddress from = new InternetAddress("robot@suncee.cn", "Cotton Candy Robot");//from 参数,可实现代发,注意:代发容易被收信方拒信或进入垃圾箱。
+            message.setFrom(from);
+
+            //可选。设置回信地址
+            Address[] a = new Address[1];
+            a[0] = new InternetAddress(toEmail);
+            message.setReplyTo(a);
+
+            // 设置收件人邮件地址
+            InternetAddress to = new InternetAddress(toEmail);
+            message.setRecipient(MimeMessage.RecipientType.TO, to);
+
+
+            message.setSentDate(new Date()); //设置时间
+
+            //设置邮件标题
+            message.setSubject("Verification Code");
+            message.setContent(content, "text/html;charset=UTF-8");//html超文本;// "text/plain;charset=UTF-8" //纯文本。
+            // 发送邮件
+            Transport.send(message);
+
+        } catch (MessagingException e) {
+            String err = e.getMessage();
+            // 在这里处理message内容, 格式是固定的
+            System.out.println(err);
+        } catch (UnsupportedEncodingException e) {
+            e.printStackTrace();
+        }
+
+    }
+//    public static void main(String[] args) {
+//        // 配置发送邮件的环境属性
+//        final Properties props = new Properties();
+//
+//        // 表示SMTP发送邮件,需要进行身份验证
+//        props.put("mail.smtp.auth", "true");
+//        props.put("mail.smtp.host", "smtpdm.aliyun.com"); //华东1:smtpdm.aliyun.com,悉尼:smtpdm-ap-southeast-2.aliyun.com,新加坡:smtpdm-ap-southeast-1.aliyuncs.com
+//        //设置端口:
+//        props.put("mail.smtp.port", "80");//或"25", 如果使用ssl,则去掉使用80或25端口的配置,进行如下配置:
+//        //加密方式:
+//        //props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
+//        //props.put("mail.smtp.socketFactory.port", "465");
+//        //props.put("mail.smtp.port", "465");
+//
+//        props.put("mail.smtp.from", "robot@suncee.cn");    //mailfrom 参数
+//        props.put("mail.user", "robot@suncee.cn");// 发件人的账号(在控制台创建的发信地址)
+//        props.put("mail.password", "DirectMail123");// 发信地址的smtp密码(在控制台选择发信地址进行设置)
+//        //props.setProperty("mail.smtp.ssl.enable", "true");  //请配合465端口使用
+//        System.setProperty("mail.mime.splitlongparameters", "false");//用于解决附件名过长导致的显示异常
+//        //props.put("mail.smtp.connectiontimeout", 1000);
+//
+//        // 构建授权信息,用于进行SMTP进行身份验证
+//        Authenticator authenticator = new Authenticator() {
+//            @Override
+//            protected PasswordAuthentication getPasswordAuthentication() {
+//                // 用户名、密码
+//                String userName = props.getProperty("mail.user");
+//                String password = props.getProperty("mail.password");
+//                return new PasswordAuthentication(userName, password);
+//            }
+//        };
+//
+//        //使用环境属性和授权信息,创建邮件会话
+//        Session mailSession = Session.getInstance(props, authenticator);
+//        //mailSession.setDebug(true);//开启debug模式
+//
+//
+//        final String messageIDValue = genMessageID(props.getProperty("mail.user"));
+//        //创建邮件消息
+//        MimeMessage message = new MimeMessage(mailSession) {
+//            @Override
+//            protected void updateMessageID() throws MessagingException {
+//                //设置自定义Message-ID值
+//                setHeader("Message-ID", messageIDValue);//创建Message-ID
+//            }
+//        };
+//
+//        try {
+//            // 设置发件人邮件地址和名称。填写控制台配置的发信地址。和上面的mail.user保持一致。名称用户可以自定义填写。
+//            InternetAddress from = new InternetAddress("robot@suncee.cn", "发件人名称");//from 参数,可实现代发,注意:代发容易被收信方拒信或进入垃圾箱。
+//            message.setFrom(from);
+//
+//            //可选。设置回信地址
+//            Address[] a = new Address[1];
+//            a[0] = new InternetAddress("ritchie@linuxmail.org");
+//            message.setReplyTo(a);
+//
+//            // 设置收件人邮件地址
+//            InternetAddress to = new InternetAddress("ritchie@linuxmail.org");
+//            message.setRecipient(MimeMessage.RecipientType.TO, to);
+//            //如果同时发给多人,才将上面两行替换为如下(因为部分收信系统的一些限制,尽量每次投递给一个人;同时我们限制单次允许发送的人数,具体参考规格清单):
+//            //InternetAddress[] adds = new InternetAddress[2];
+//            //adds[0] = new InternetAddress("收信地址");
+//            //adds[1] = new InternetAddress("收信地址");
+//            //message.setRecipients(Message.RecipientType.TO, adds);
+//
+//            message.setSentDate(new Date()); //设置时间
+////            String ccUser = "抄送地址";
+////            // 设置多个抄送地址
+////            if (null != ccUser && !ccUser.isEmpty()) {
+////                @SuppressWarnings("static-access")
+////                InternetAddress[] internetAddressCC = new InternetAddress().parse(ccUser);
+////                message.setRecipients(Message.RecipientType.CC, internetAddressCC);
+////            }
+////            String bccUser = "密送地址";
+////            // 设置多个密送地址
+////            if (null != bccUser && !bccUser.isEmpty()) {
+////                @SuppressWarnings("static-access")
+////                InternetAddress[] internetAddressBCC = new InternetAddress().parse(bccUser);
+////                message.setRecipients(Message.RecipientType.BCC, internetAddressBCC);
+////            }
+//            //设置邮件标题
+//            message.setSubject("测试主题");
+//            message.setContent("测试<br> 内容", "text/html;charset=UTF-8");//html超文本;// "text/plain;charset=UTF-8" //纯文本。
+//
+////            //若需要开启邮件跟踪服务,请使用以下代码设置跟踪链接头。前置条件和约束见文档"如何开启数据跟踪功能?"
+////            String tagName = "Test";
+////            HashMap<String, String> trace = new HashMap<>();
+////            //这里为字符串"1"
+////            trace.put("OpenTrace", "1");      //打开邮件跟踪
+////            trace.put("LinkTrace", "1");     //点击邮件里的URL跟踪
+////            trace.put("TagName", tagName);   //控制台创建的标签tagname
+////            String jsonTrace = new GsonBuilder().setPrettyPrinting().create().toJson(trace);
+////            //System.out.println(jsonTrace);
+////            String base64Trace = new String(Base64.getEncoder().encode(jsonTrace.getBytes()));
+////            //设置跟踪链接头
+////            message.addHeader("X-AliDM-Trace", base64Trace);
+////            //邮件eml原文中的示例值:X-AliDM-Trace: eyJUYWdOYW1lIjoiVGVzdCIsIk9wZW5UcmFjZSI6IjEiLCJMaW5rVHJhY2UiOiIxIn0=
+//
+////发送附件和内容:
+////            BodyPart messageBodyPart = new MimeBodyPart();
+////            //messageBodyPart.setText("消息<br>Text");//设置邮件的内容,文本
+////            messageBodyPart.setContent("测试<br> 内容", "text/html;charset=UTF-8");// 纯文本:"text/plain;charset=UTF-8" //设置邮件的内容
+////            //创建多重消息
+////            Multipart multipart = new MimeMultipart();
+////            //设置文本消息部分
+////            multipart.addBodyPart(messageBodyPart);
+//
+////            //附件部分
+////            //发送附件,总的邮件大小不超过15M,创建消息部分。
+//            //发送本地附件
+////            String[] fileList = new String[2];
+////            fileList[0] = "C:\\Users\\test1.txt";
+////            fileList[1] = "C:\\Users\\test2.txt";
+////            for (int index = 0; index < fileList.length; index++) {
+////                MimeBodyPart mimeBodyPart = new MimeBodyPart();
+////                //            //设置要发送附件的文件路径
+////                FileDataSource filesdata = new FileDataSource(fileList[index]);
+////                mimeBodyPart.setDataHandler(new DataHandler(filesdata));
+////                //处理附件名称中文(附带文件路径)乱码问题
+////                mimeBodyPart.setFileName(MimeUtility.encodeWord("自定义附件名.xlsx"));
+////                mimeBodyPart.addHeader("Content-Transfer-Encoding", "base64");
+////                multipart.addBodyPart(mimeBodyPart);
+////            }
+//
+//
+//            //发送URL附件
+////            String[] fileList = new String[2];
+////            fileList[0] = "https://example.oss-cn-shanghai.aliyuncs.com/xxxxxxxxxxx1.png";
+////            fileList[1] = "https://example.oss-cn-shanghai.aliyuncs.com/xxxxxxxxxxx2.png";
+////            for  (int index = 0; index < fileList.length; index++) {
+////                String encode = URLEncoder.encode(fileList[index], "UTF-8");
+////                MimeBodyPart mimeBodyPart = new MimeBodyPart();
+////                mimeBodyPart.setDataHandler(new DataHandler(new URLDataSource(new URL(encode.replace("%3A",":").replace("%2F","/")))));
+////                mimeBodyPart.setFileName(MimeUtility.encodeText("自定义附件名.xlsx"));
+////                multipart.addBodyPart(mimeBodyPart);
+////            }
+//
+//
+////            //发送含有附件的完整消息
+////            message.setContent(multipart);
+////            // 发送附件代码,结束
+//
+//            // 发送邮件
+//            Transport.send(message);
+//
+//        } catch (MessagingException e) {
+//            String err = e.getMessage();
+//            // 在这里处理message内容, 格式是固定的
+//            System.out.println(err);
+//        } catch (UnsupportedEncodingException e) {
+//            // TODO Auto-generated catch block
+//            e.printStackTrace();
+//        } //catch (MalformedURLException e) {
+//        //    e.printStackTrace();
+//        //}
+//    }
+}

+ 2 - 0
src/main/java/com/szwl/service/TMessageCodeService.java

@@ -24,5 +24,7 @@ public interface TMessageCodeService extends MyIService<TMessageCode> {
      * */
     String sentEmail(String type, String email);
 
+    String sendEmailAbroad(String type, String email);
+
     Date getLastSendTime(String phoneOrEmail);
 }

+ 19 - 1
src/main/java/com/szwl/service/impl/TMessageCodeServiceImpl.java

@@ -4,6 +4,7 @@ import com.alibaba.fastjson.JSONObject;
 import com.szwl.model.entity.TMessageCode;
 import com.szwl.mapper.TMessageCodeMapper;
 import com.szwl.model.utils.MailUtil;
+import com.szwl.model.utils.SampleMail;
 import com.szwl.model.utils.YunPianSms;
 import com.szwl.service.TMessageCodeService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -79,7 +80,24 @@ public class TMessageCodeServiceImpl extends ServiceImpl<TMessageCodeMapper, TMe
         tMessageCode.setCreateDate(new Date());
         tMessageCode.setStatus("0");
         tMessageCodeMapper.insert(tMessageCode);
-        return "发送成功Success";
+        return "发送成功";
+    }
+
+    @Override
+    public String sendEmailAbroad(String type, String email) {
+        String code = addCode();
+        String contnet = "";
+        contnet = getContnet(type,code);
+        new SampleMail().sendAuthCode(email, contnet);
+        TMessageCode tMessageCode = new TMessageCode();
+        tMessageCode.setType(type);
+        tMessageCode.setCode(code);
+        tMessageCode.setPhone(email);
+        tMessageCode.setModifyDate(new Date());
+        tMessageCode.setCreateDate(new Date());
+        tMessageCode.setStatus("0");
+        tMessageCodeMapper.insert(tMessageCode);
+        return "Send Success";
     }
 
     @Override