发表于: 2020-07-07 21:37:03
1 1183
今天完成的事情:任务七短信服务,邮件推送 部分OSS
短信
POJO类
public class SmsBean {
private String product ;//阿里云配置
private String domain;//阿里云配置
private String accessKeyId ;//短信accesskeyId
private String accessKeySecret;//短信accesskey密码
private String templateCode;//短信模板
private String signName;//短信签名
业务层
@Service
public class SmsService {
@Resource
private SmsBean smsBean;
/**
* 发送短信
* @param phoneNumber
* @return
* @throws ClientException
*/
public SendSmsResponse sendSms(String phoneNumber) throws ClientException {
//可自助调整超时时间
System.setProperty("sun.net.client.defaultConnectTimeout", "10000");
System.setProperty("sun.net.client.defaultReadTimeout", "10000");
//初始化acsClient,暂不支持region化
IClientProfile profile = DefaultProfile.getProfile("cn-zhengzhou",smsBean.getAccessKeyId(), smsBean.getAccessKeySecret());
DefaultProfile.addEndpoint("cn-zhengzhou", "cn-zhengzhou", smsBean.getProduct(), smsBean.getDomain());
IAcsClient acsClient = new DefaultAcsClient(profile);
//组装请求对象-具体描述见控制台-文档部分内容
SendSmsRequest request = new SendSmsRequest();
//使用post提交
request.setMethod(MethodType.POST);
//必填:待发送手机号
request.setPhoneNumbers(phoneNumber);
//必填:短信签名-可在短信控制台中找到
request.setSignName("芸生培训");
//必填:短信模板-可在短信控制台中找到,验证码模板,您的验证码为${code}
request.setTemplateCode(smsBean.getTemplateCode());
//可选:模板中的变量替换JSON串,如模板内容为"亲爱的${name},您的验证码为${code}"时,此处的值为
String verifiedCode = String.valueOf(new Random().nextInt(899999)+100000); //生成6位数字验证码
Map<String,Object> map = new HashMap<>();
map.put("code",verifiedCode);
request.setTemplateParam(JSON.toJSONString(map));
//选填-上行短信扩展码(无特殊需求用户请忽略此字段)
//request.setSmsUpExtendCode("90997");
//可选:outId为提供给业务方扩展字段,最终在短信回执消息中将此值带回给调用者
request.setOutId("yourOutId");
//hint 此处可能会抛出异常,注意catch
return acsClient.getAcsResponse(request);
}
public QuerySendDetailsResponse querySendDetails(String phoneNumber) throws ClientException {
//可自助调整超时时间
System.setProperty("sun.net.client.defaultConnectTimeout", "10000");
System.setProperty("sun.net.client.defaultReadTimeout", "10000");
//初始化acsClient,暂不支持region化
IClientProfile profile = DefaultProfile.getProfile("cn-zhengzhou",smsBean.getAccessKeyId(), smsBean.getAccessKeySecret());
DefaultProfile.addEndpoint("cn-zhengzhou", "cn-zhengzhou", smsBean.getProduct(), smsBean.getDomain());
IAcsClient acsClient = new DefaultAcsClient(profile);
//组装请求对象
QuerySendDetailsRequest request = new QuerySendDetailsRequest();
//必填-号码
request.setPhoneNumber(phoneNumber);
//可选-流水号
request.setBizId(sendSms(phoneNumber).getBizId());
//必填-发送日期 支持30天内记录查询,格式yyyyMMdd
SimpleDateFormat ft = new SimpleDateFormat("yyyyMMdd");
request.setSendDate(ft.format(new Date()));
//必填-页大小
request.setPageSize(10L);
//必填-当前页码从1开始计数
request.setCurrentPage(1L);
//hint 此处可能会抛出异常,注意catch
return acsClient.getAcsResponse(request);
}
}
今天在阿里的官方发现新人活动,可以免费领取100条短信,美滋滋
然后测试了之前的工具类 很成功的发送了邮件
但是通过配置文件的方式来运行缺报错了。。。
说是什么 短信签名 不合法或者被拉黑...
然后我就直接把我的短信签名填上了,是可以正常运行的
//必填:短信签名-可在短信控制台中找到
request.setSignName("芸生培训");
控制台信息
邮件推送服务
阿里云服务的依赖
POM
<!--阿里云短信验证服务-->
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-core</artifactId>
<version>3.7.1</version>
</dependency>
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-dysmsapi</artifactId>
<version>1.1.0</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.62</version>
</dependency>
<!--阿里云邮件推送-->
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-dm</artifactId>
<version>3.1.0</version>
</dependency>
<!--阿里云OSS云存储-->
<dependency>
<groupId>com.aliyun.oss</groupId>
<artifactId>aliyun-sdk-oss</artifactId>
<version>3.10.2</version>
</dependency>
POJO
private String region;//城市
private String accessKeyId ;//跟短信的数值一样
private String accessKeySecret;//同上
private String accountName; //控制台创建的发信地址
private String fromAlias; //发信人昵称
private String tagName; //控制台创建的标签
private String subject; //邮件主题
private String htmlBody; //邮件正文
email.properties
email.region=cn-zhengzhou
#accessKeyId 也可以换
email.accessKeyId=****************
#accessKeySecret 也能换
email.accessKeySecret=****************
#控制台创建的发信地址
email.accountName=************
#发信人昵称
email.fromAlias=珈百璃
#控制台创建的标签
email.tagName=emil
#邮件主题
email.subject=萨塔妮娅
#邮件正文
email.htmlBody=哼哼哼哼~哼哼哼哈哈~哈哈哈哈哈~啊啊哈哈哈哈哈~
applicationContext.xml
<!--配置阿里云邮件服务-->
<context:property-placeholder location="classpath:properties/email.properties" ignore-unresolvable="true"/>
<bean id="emailBean" class="com.pojo.EmailBean">
<property name="region" value="${email.region}"/>
<property name="accessKeyId" value="${email.accessKeyId}"/>
<property name="accessKeySecret" value="${email.accessKeySecret}"/>
<property name="accountName" value="${email.accountName}"/>
<property name="fromAlias" value="${email.fromAlias}"/>
<property name="tagName" value="${email.tagName}"/>
<property name="subject" value="${email.subject}"/>
<property name="htmlBody" value="${email.htmlBody}"/>
</bean>
Service
@Service
public class EmailService {
@Autowired
private EmailBean emailBean;
public void sample(String address) {
// 如果是除杭州region外的其它region(如新加坡、澳洲Region),需要将下面的”cn-hangzhou”替换为”ap-southeast-1”、或”ap-southeast-2”。
IClientProfile profile = DefaultProfile.getProfile(emailBean.getRegion(), emailBean.getAccessKeyId(), emailBean.getAccessKeySecret());
// 如果是除杭州region外的其它region(如新加坡region), 需要做如下处理
//try {
//DefaultProfile.addEndpoint("dm.ap-southeast-1.aliyuncs.com”, "ap-southeast-1”, "Dm”, "dm.ap-southeast-1.aliyuncs.com”);
//} catch (ClientException e) {
//e.printStackTrace();
//}
IAcsClient client = new DefaultAcsClient(profile);
SingleSendMailRequest request = new SingleSendMailRequest();
try {
//request.setVersion("2017-06-22”);// 如果是除杭州region外的其它region(如新加坡region),必须指定为2017-06-22
request.setAccountName(emailBean.getAccountName());
request.setFromAlias(emailBean.getFromAlias());
request.setAddressType(1);
request.setTagName(emailBean.getTagName());
request.setReplyToAddress(true);
request.setToAddress(address);
//可以给多个收件人发送邮件,收件人之间用逗号分开,批量发信建议使用BatchSendMailRequest方式
//request.setToAddress("邮箱1,邮箱2”);
request.setSubject(emailBean.getSubject());
//如果采用byte[].toString的方式的话请确保最终转换成utf-8的格式再放入htmlbody和textbody,若编码不一致则会被当成垃圾邮件。
//注意:文本邮件的大小限制为3M,过大的文本会导致连接超时或413错误
request.setHtmlBody(emailBean.getHtmlBody());
//SDK 采用的是http协议的发信方式, 默认是GET方法,有一定的长度限制。
//若textBody、htmlBody或content的大小不确定,建议采用POST方式提交,避免出现uri is not valid异常
request.setMethod(MethodType.POST);
//开启需要备案,0关闭,1开启
//request.setClickTrace("0”);
//如果调用成功,正常返回httpResponse;如果调用失败则抛出异常,需要在异常中捕获错误异常码;错误异常码请参考对应的API文档;
SingleSendMailResponse httpResponse = client.getAcsResponse(request);
System.out.println("发送邮件");
} catch (ServerException e) {
//捕获错误异常码
System.out.println("ErrCode : " + e.getErrCode());
e.printStackTrace();
} catch (ClientException e) {
//捕获错误异常码
System.out.println("ErrCode : " + e.getErrCode());
e.printStackTrace();
}
}
邮件推送需要一个域名,我买了一个域名,但是不能域名解析...还在身份审核中...难顶 只能等待审核通过
OSS存储只进行了一部分还没有全部弄完,就不贴了
关于短信签名 我注意到一件事情,中文的时候字体都变了,那就是编码格式问题。
然后我在IDEA设置中改变了设置
全部改为UTF-8之后就乱码了....不知道该咋办,目前还只能用GBK
明天计划的事情:OSS
评论