参考文档:

如何在 DNS 服务器上配置域名:https://help.aliyun.com/knowledge_detail/39397.html?spm=5176.2020520150.102.d6.12837528Fc1Cy5

开通邮件服务:https://www.aliyun.com/product/directmail?spm=a2c4g.11186623.2.13.62122b31hNdHdL

API:https://help.aliyun.com/document_detail/29435.html

1. 首先得有个域名

2. 开通 邮件服务后,进入管理台,新增 发件域名,在弹出框中输入 域名,例如我的是  memory-back.club,然后点击配置

 

3. 拷贝配置到 域名解析配置处:

 

具体操作步骤:

(1)在解析设置页面添加 4条记录

 

 

 

第一条: 类型为 MX 的:

 

 

 对应 收信配置中的 MX验证,类型、记录值一定要对应

 

 

第二条:类型为 TXT 的:

 

对应 发件设置中的 所有权验证,类型、主机记录、记录值一定要对应 

 

 

第三条:类型为 TXT的:

 

 

对应 发信配置 中的 spf验证,类型、记录值 一定要对应

 

 

 

 第四条:类型为 CNAME 的:

 

 对应 跟踪配置中 的CNAME验证

 

 

 

 

 4. 返回,点击 验证,点击确定

 

 

 除了 spf验证 要慢点,其他的几乎秒级验证

当看到 状态 不为 待验证 时,即可使用

 

5. 添加 发件地址:

同时添加一下回信地址(就是用户 回复邮件了,发到哪个地址,如果不配置,用户回复了就无法收到),添加完后,点击验证回信地址,即确保回信邮箱是正常的

然后去回信邮箱点击 验证链接 即可验证成功

 

6. 服务端开发:

如果其他模块已经引入   

aliyun-java-sdk-core 
的其他版本,建议 邮件服务放入单独的模块,因为 该依赖版本较低,如果放一起,会造成依赖冲突

(1)引入依赖:

<?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">
<parent>
<artifactId>amazingcenter</artifactId>
<groupId>com.team.amazingcenter</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>

<artifactId>amazingcenter-email</artifactId>
<packaging>jar</packaging>

<name>amazingcenter-email</name>
<url>http://maven.apache.org</url>

<dependencies>
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-core</artifactId>
<version>3.0.0</version>
</dependency>
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-dm</artifactId>
<version>3.1.0</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.70</version>
</dependency>
<dependency>
<groupId>com.team.amazingcenter</groupId>
<artifactId>amazingcenter-common</artifactId>
</dependency>
</dependencies>
</project>

  

 (2)实体类

package com.team.amazingcenter.email.vo;

import lombok.Data;

import java.util.Date;

/**
 * @version DataEmailVO.java v2.0
 * @description:
 * @author: wenze
 * @create: 2020/9/10 17:47
 **/
@Data
public class DataEmailVO {

    private String toAddress;

    private String subject;

    private String textBody;

    private String attachUrl;

    private Byte emailBusinessType;

    private Byte sended;

    private Date sendTime;

    private String ip;

    private String regionId;

    private Integer addressType;

    private Byte replyToAddress;

    private String htmlBody;
}

 (3)EmailUtils:

package com.team.amazingcenter.email.utils;

import com.alibaba.fastjson.JSON;
import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.dm.model.v20151123.BatchSendMailRequest;
import com.aliyuncs.dm.model.v20151123.BatchSendMailResponse;
import com.aliyuncs.dm.model.v20151123.SingleSendMailRequest;
import com.aliyuncs.dm.model.v20151123.SingleSendMailResponse;
import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.exceptions.ServerException;
import com.aliyuncs.profile.DefaultProfile;
import com.team.amazingcenter.common.enumerate.AcceptLanguageEnum;
import com.team.amazingcenter.common.enumerate.locale.LocaleEnum;
import com.team.amazingcenter.common.utils.PropertiesUtil;
import com.team.amazingcenter.email.vo.DataEmailVO;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.util.ObjectUtils;

import java.util.Objects;

/**
 * @version EmailUtils.java v2.0
 * @description: 邮箱服务
 * @author: wenze
 * @create: 2020/9/9 21:44
 * doc: https://help.aliyun.com/document_detail/29435.html
 **/
@Slf4j
public class EmailUtils {

    /**
     * key
     */
    private static final String ACCESS_KEY_ID = PropertiesUtil.getProperty("api_access_key_id");
    /**
     * secret
     */
    private static final String ACCESS_SECRET = PropertiesUtil.getProperty("api_access_key_secret");
    /**
     * 管理控制台中配置的发信地址 - 单个
     */
    private static final String ACCOUNT_NAME_SINGLE = PropertiesUtil.getProperty("email_account_name_single");
    /**
     * 管理控制台中配置的发信地址 - 批量
     */
    private static final String ACCOUNT_NAME_BATCH = PropertiesUtil.getProperty("email_account_name_batch");
    /**
     * 区域id - 国内
     */
    private static final String EMAIL_REGION_ID_CN = PropertiesUtil.getProperty("email_region_id_cn", "");
    /**
     * 区域id - 新加坡
     */
    private static final String EMAIL_REGION_ID_1 = PropertiesUtil.getProperty("email_region_id_1");
    /**
     * 区域id - 澳大利亚
     */
    private static final String EMAIL_REGION_ID_2 = PropertiesUtil.getProperty("email_region_id_2");
    /**
     * 地址类型。取值:0:为随机账号 1:为发信地址
     */
    private static final Integer ADDRESS_TYPE = 1;


    /**
     * 发送邮件
     */
    public static DataEmailVO singleSendMail(SingleSendMailRequest request, String key) {

        DataEmailVO emailVO = new DataEmailVO();

        String regionId = EMAIL_REGION_ID_CN;
        if (StringUtils.isNotBlank(key) && StringUtils.equals(key, AcceptLanguageEnum.LANGUAGE_EN_US.getLanguage())) {
            regionId = EMAIL_REGION_ID_1;
        }

        DefaultProfile profile = DefaultProfile.getProfile(regionId, ACCESS_KEY_ID, ACCESS_SECRET);
        IAcsClient client = new DefaultAcsClient(profile);

        request.setAccountName(ACCOUNT_NAME_SINGLE);
        request.setAddressType(ADDRESS_TYPE);
        request.setRegionId(regionId);

        BeanUtils.copyProperties(request, emailVO);
        emailVO.setReplyToAddress(request.getReplyToAddress() ? (byte) 1 : (byte) 0);

        emailVO.setSended((byte) 2);
        try {
            SingleSendMailResponse response = client.getAcsResponse(request);
            if (Objects.isNull(response) || ObjectUtils.isEmpty(response)) {
                emailVO.setSended((byte) 1);
            }
        } catch (ServerException e) {
            log.info("ServerException,ErrCode:{},ErrMsg:{},RequestId:{}", e.getErrCode(), e.getErrMsg(), e.getRequestId());
            return new DataEmailVO();
        } catch (ClientException e) {
            log.info("ClientException,ErrCode:{},ErrMsg:{},RequestId:{}", e.getErrCode(), e.getErrMsg(), e.getRequestId());
            return new DataEmailVO();
        } catch (Exception e) {
            log.info("OtherException,ErrCode:{},ErrMsg:{},RequestId:{}", e);
            return new DataEmailVO();
        }
        return emailVO;
    }

    /**
     * 批量发送邮件
     */
    public void batchSendMail(BatchSendMailRequest request, String key) {
        String regionId = EMAIL_REGION_ID_CN;
        if (StringUtils.isNotBlank(key) && StringUtils.equals(key, LocaleEnum.ENG.getKey())) {
            regionId = EMAIL_REGION_ID_1;
        }

        DefaultProfile profile = DefaultProfile.getProfile(regionId, ACCESS_KEY_ID, ACCESS_SECRET);
        IAcsClient client = new DefaultAcsClient(profile);

        request.setRegionId(regionId);

        try {
            BatchSendMailResponse response = client.getAcsResponse(request);
            System.out.println(JSON.toJSONString(response));
        } catch (ServerException e) {
            e.printStackTrace();
        } catch (ClientException e) {
            System.out.println("ErrCode:" + e.getErrCode());
            System.out.println("ErrMsg:" + e.getErrMsg());
            System.out.println("RequestId:" + e.getRequestId());
        }

    }
}

 (4)PropertiesUtil

package com.team.amazingcenter.common.utils;

import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

/**
 * 读取公共配置文件
 * 
 * @author juluo
 *
 */
public class PropertiesUtil {

	/** 默认的properties */
	private static final Properties DEFAULT_PROPERTIES;
	static {
		DEFAULT_PROPERTIES = getPropertiesByFileName("common.properties");
	}

	/**
	 * 获取属性对应的值
	 * 
	 * @param property
	 *            属性
	 * @param defaultValue
	 *            没找到值返回的默认值
	 * @return property 对应的值
	 */
	public static String getProperty(String property, String defaultValue) {
		return DEFAULT_PROPERTIES.getProperty(property, defaultValue);
	}

	/**
	 * 获取属性对应的值
	 * 
	 * @param property
	 *            属性
	 * @return property 对应的值 ,or {@code null}
	 */
	public static String getProperty(String property) {
		return DEFAULT_PROPERTIES.getProperty(property);
	}

	/**
	 * 通过文件路径载入数据
	 * 
	 * @param fileName
	 *            文件路径
	 * @return {@link Properties}
	 */
	public static Properties getPropertiesByFileName(String fileName) {
		InputStream inputStream = PropertiesUtil.class.getClassLoader().getResourceAsStream(fileName);
		Properties p = new Properties();
		if (inputStream == null) {
			return p;
		}
		try {
			p.load(inputStream);
		} catch (IOException ex) {
			throw new RuntimeException(ex);
		} finally {
			if (inputStream != null) {
				try {
					inputStream.close();
				} catch (IOException e) {
					throw new RuntimeException(e);
				}
			}
		}
		return p;
	}

	/**
	 * 通过属性获取指定文件的值
	 * 
	 * @param fileName
	 *            文件名
	 * @param propertie
	 *            属性
	 * @param defaultValue
	 *            默认值
	 * @return 属性对应的值
	 */
	public static String getProperty(String fileName, String propertie, String defaultValue) {
		Properties p = getPropertiesByFileName(fileName);
		return p.getProperty(propertie, defaultValue);
	}
	
	public static void main(String[] args) {
		System.out.println(PropertiesUtil.getProperty("file_oss_storage_path", ""));
	}


}

  其他模块需要使用时,直接通过 依赖引入的方式即可使用 邮箱服务

 <dependency>
      <groupId>com.team.amazingcenter</groupId>
      <artifactId>amazingcenter-email</artifactId>
      <version>1.0-SNAPSHOT</version>
    </dependency>

 (5)业务层:

    SingleSendMailRequest request = new SingleSendMailRequest();
       request.setToAddress(email);
       request.setSubject(I18nMessageUtil.getMessage(acceptLanguage, VerCodeTypeEnum.getDescByDesc(type), ""));
       request.setTextBody(I18nMessageUtil.getMessage(acceptLanguage, I18nCodeEnum.PIN.getMsg(), "").replace("code", code));
       request.setReplyToAddress(true);

       DataEmailVO vo = EmailUtils.singleSendMail(request, acceptLanguage);

  

 

posted on 2020-09-18 11:45  文泽9527  阅读(749)  评论(0编辑  收藏  举报