发表于: 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的格式再放入htmlbodytextbody,若编码不一致则会被当成垃圾邮件。
           //注意:文本邮件的大小限制为3M,过大的文本会导致连接超时或413错误
           request.setHtmlBody(emailBean.getHtmlBody());
           //SDK 采用的是http协议的发信方式, 默认是GET方法,有一定的长度限制。
           //textBodyhtmlBodycontent的大小不确定,建议采用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 



返回列表 返回列表
评论

    分享到