Tencent SDK
腾讯云文件上传至COS,短信发送
codesnapJava
8 views
#TencentCOSUploadFileUtil
public class TencentCOSUploadFileUtil {
// 访问域名
public static final String URL = "";
// 存储桶名称
private static final String BUCKET_NAME = "";
//secretId 秘钥id
private static final String SECRET_ID = "";
//SecretKey 秘钥
private static final String SECRET_KEY = "";
// 腾讯云 自定义文件夹名称
private static final String PREFIX = "";
// 地址
private static final String REGION = "";
// 创建COS 凭证
private static final COSCredentials credentials = new BasicCOSCredentials(SECRET_ID, SECRET_KEY);
// 配置 COS 区域
private static final ClientConfig clientConfig = new ClientConfig(new Region(REGION));
public static String uploadfile(MultipartFile file) {
// 创建 COS 客户端连接
COSClient cosClient = new COSClient(credentials, clientConfig);
String fileName = file.getOriginalFilename();
try {
assert fileName != null;
String substring = fileName.substring(fileName.lastIndexOf("."));
File localFile = File.createTempFile(String.valueOf(System.currentTimeMillis()), substring);
file.transferTo(localFile);
Random random = new Random();
fileName = PREFIX + random.nextInt(10000) + System.currentTimeMillis() + substring;
// 将 文件上传至 COS
PutObjectRequest objectRequest = new PutObjectRequest(BUCKET_NAME, fileName, localFile);
cosClient.putObject(objectRequest);
} catch (Exception e) {
e.printStackTrace();
} finally {
cosClient.shutdown();
}
return URL + fileName;
}
}
#SendSmsUtil
/**
* ClassName: SendSmsUtil
* date: 2022/6/1 15:38
*
* @author ayanamirei
*/
@Slf4j
@Component
public class SendSmsUtil
{
private SendSmsUtil()
{
}
private static final SendSmsUtil instance = new SendSmsUtil();
public SendSmsUtil getInstance()
{
return instance;
}
private static final String SECRET_ID = "";
private static final String SECRET_KEY = "";
private static final String SDK_APPID = "";
private static final String SIGN_NAME = "";
private static final String TEMPLATE_ID = "";
/**
* @param code 发送的验证码
* @param phoneNumber 手机号
* @return 发送成功返回true 失败返回false
*/
public String SendSMS(String code, String phoneNumber)
{
try
{
/* 必要步骤:
* 实例化一个认证对象,入参需要传入腾讯云账户密钥对secretId,secretKey。
* 这里采用的是从环境变量读取的方式,需要在环境变量中先设置这两个值。
* 你也可以直接在代码中写死密钥对,但是小心不要将代码复制、上传或者分享给他人,
* 以免泄露密钥对危及你的财产安全。
* SecretId、SecretKey 查询: https://console.cloud.tencent.com/cam/capi */
Credential cred = new Credential(SECRET_ID, SECRET_KEY);
// 实例化一个http选项,可选,没有特殊需求可以跳过
HttpProfile httpProfile = new HttpProfile();
// 设置代理(无需要直接忽略)
// httpProfile.setProxyHost("真实代理ip");
// httpProfile.setProxyPort(真实代理端口);
/* SDK默认使用POST方法。
* 如果你一定要使用GET方法,可以在这里设置。GET方法无法处理一些较大的请求 */
httpProfile.setReqMethod("POST");
/* SDK有默认的超时时间,非必要请不要进行调整
* 如有需要请在代码中查阅以获取最新的默认值 */
httpProfile.setConnTimeout(60);
/* 指定接入地域域名,默认就近地域接入域名为 sms.tencentcloudapi.com ,也支持指定地域域名访问,例如广州地域的域名为 sms.ap-guangzhou.tencentcloudapi.com */
httpProfile.setEndpoint("sms.tencentcloudapi.com");
/* 非必要步骤:
* 实例化一个客户端配置对象,可以指定超时时间等配置 */
ClientProfile clientProfile = new ClientProfile();
/* SDK默认用TC3-HMAC-SHA256进行签名
* 非必要请不要修改这个字段 */
clientProfile.setSignMethod("HmacSHA256");
clientProfile.setHttpProfile(httpProfile);
/* 实例化要请求产品(以sms为例)的client对象
* 第二个参数是地域信息,可以直接填写字符串ap-guangzhou,支持的地域列表参考 https://cloud.tencent.com/document/api/382/52071#.E5.9C.B0.E5.9F.9F.E5.88.97.E8.A1.A8 */
SmsClient client = new SmsClient(cred, "ap-guangzhou", clientProfile);
/* 实例化一个请求对象,根据调用的接口和实际情况,可以进一步设置请求参数
* 你可以直接查询SDK源码确定接口有哪些属性可以设置
* 属性可能是基本类型,也可能引用了另一个数据结构
* 推荐使用IDE进行开发,可以方便的跳转查阅各个接口和数据结构的文档说明 */
SendSmsRequest req = new SendSmsRequest();
/* 填充请求参数,这里request对象的成员变量即对应接口的入参
* 你可以通过官网接口文档或跳转到request对象的定义处查看请求参数的定义
* 基本类型的设置:
* 帮助链接:
* 短信控制台: https://console.cloud.tencent.com/smsv2
* 腾讯云短信小助手: https://cloud.tencent.com/document/product/382/3773#.E6.8A.80.E6.9C.AF.E4.BA.A4.E6.B5.81 */
/* 短信应用ID: 短信SdkAppId在 [短信控制台] 添加应用后生成的实际SdkAppId,示例如1400006666 */
// 应用 ID 可前往 [短信控制台](https://console.cloud.tencent.com/smsv2/app-manage) 查看
req.setSmsSdkAppid(SDK_APPID);
/* 短信签名内容: 使用 UTF-8 编码,必须填写已审核通过的签名 */
// 签名信息可前往 [国内短信](https://console.cloud.tencent.com/smsv2/csms-sign) 或 [国际/港澳台短信](https://console.cloud.tencent.com/smsv2/isms-sign) 的签名管理查看
req.setSign(SIGN_NAME);
/* 模板 ID: 必须填写已审核通过的模板 ID */
// 模板 ID 可前往 [国内短信](https://console.cloud.tencent.com/smsv2/csms-template) 或 [国际/港澳台短信](https://console.cloud.tencent.com/smsv2/isms-template) 的正文模板管理查看
req.setTemplateID(TEMPLATE_ID);
/* 模板参数: 模板参数的个数需要与 TemplateId 对应模板的变量个数保持一致,若无模板参数,则设置为空 */
req.setTemplateParamSet(new String[]{code});
/* 下发手机号码,采用 E.164 标准,+[国家或地区码][手机号]
* 示例如:+8613711112222, 其中前面有一个+号 ,86为国家码,13711112222为手机号,最多不要超过200个手机号 */
String phoneNumberSet = "+86" + phoneNumber;
req.setPhoneNumberSet(new String[]{phoneNumberSet});
/* 通过 client 对象调用 SendSms 方法发起请求。注意请求方法名与请求对象是对应的
* 返回的 res 是一个 SendSmsResponse 类的实例,与请求对象对应 */
SendSmsResponse res = client.SendSms(req);
// 输出json格式的字符串回包
// System.out.println(SendSmsResponse.toJsonString(res));
// 也可以取出单个值,你可以通过官网接口文档或跳转到response对象的定义处查看返回字段的定义
// System.out.println(res.getRequestId());
String s = SendSmsResponse.toJsonString(res);
JSONObject jo = JSON.parseObject(s);
JSONArray jsarr = jo.getJSONArray("SendStatusSet");
JSONObject ao = jsarr.getJSONObject(0);
String sendCode = ao.getString("Code");
log.warn("短信发送状态,{},{}", phoneNumber, sendCode);
return sendCode;
/* 当出现以下错误码时,快速解决方案参考
* [FailedOperation.SignatureIncorrectOrUnapproved](https://cloud.tencent.com/document/product/382/9558#.E7.9F.AD.E4.BF.A1.E5.8F.91.E9.80.81.E6.8F.90.E7.A4.BA.EF.BC.9Afailedoperation.signatureincorrectorunapproved-.E5.A6.82.E4.BD.95.E5.A4.84.E7.90.86.EF.BC.9F)
* [FailedOperation.TemplateIncorrectOrUnapproved](https://cloud.tencent.com/document/product/382/9558#.E7.9F.AD.E4.BF.A1.E5.8F.91.E9.80.81.E6.8F.90.E7.A4.BA.EF.BC.9Afailedoperation.templateincorrectorunapproved-.E5.A6.82.E4.BD.95.E5.A4.84.E7.90.86.EF.BC.9F)
* [UnauthorizedOperation.SmsSdkAppIdVerifyFail](https://cloud.tencent.com/document/product/382/9558#.E7.9F.AD.E4.BF.A1.E5.8F.91.E9.80.81.E6.8F.90.E7.A4.BA.EF.BC.9Aunauthorizedoperation.smssdkappidverifyfail-.E5.A6.82.E4.BD.95.E5.A4.84.E7.90.86.EF.BC.9F)
* [UnsupportedOperation.ContainDomesticAndInternationalPhoneNumber](https://cloud.tencent.com/document/product/382/9558#.E7.9F.AD.E4.BF.A1.E5.8F.91.E9.80.81.E6.8F.90.E7.A4.BA.EF.BC.9Aunsupportedoperation.containdomesticandinternationalphonenumber-.E5.A6.82.E4.BD.95.E5.A4.84.E7.90.86.EF.BC.9F)
* 更多错误,可咨询[腾讯云助手](https://tccc.qcloud.com/web/im/index.html#/chat?webAppId=8fa15978f85cb41f7e2ea36920cb3ae1&title=Sms)
*/
} catch (TencentCloudSDKException e) {
e.printStackTrace();
}
return null;
}
}
#SendEmailUtil
spring:
mail:
host: smtp.163.com
username: username
password: pwd
properties:
from: subject
@Component
@Slf4j
public class SendEmailUtil
{
private SendEmailUtil()
{
}
private static final SendEmailUtil instance = new SendEmailUtil();
public SendEmailUtil getInstance()
{
return instance;
}
@Resource
private JavaMailSender javaMailSender;
@Value("${spring.mail.username}")
private String from;
public void sendTextEmail(String to, String subject, String text)
{
SimpleMailMessage message = new SimpleMailMessage();
message.setFrom(from);
message.setTo(to);
message.setSubject(subject);
message.setText(text);
javaMailSender.send(message);
}
public void sendHtmlEmail(String to, String subject, String content) throws MessagingException
{
MimeMessage message = javaMailSender.createMimeMessage();
MimeMessageHelper mimeHelper = new MimeMessageHelper(message, true);
mimeHelper.setFrom(from);
mimeHelper.setTo(to);
mimeHelper.setSubject(subject);
mimeHelper.setText(content, true);
javaMailSender.send(message);
log.info("send to [{}], {}", to, content);
}
public void sendCodeEmail(String to, String code) throws MessagingException
{
String content = "<html>" +
"<body style='text-align:center;'>" +
"<div style='font-size: 24px; margin-bottom: 20px;'>Share Verification Code</div>" +
"<div style='font-size: 48px; color: #2c3e50; font-weight: bold; margin-bottom: 30px;'>" +
code +
"</div>" +
"<p style='font-size: 16px; color: #3498db;'>请妥善保管您的验证码,不要泄露给其他人。</p>" +
"</body>" +
"</html>";
sendHtmlEmail(to, "Share Verification Code", content);
}
public void sendArticlePublishNotifyEmail(String email, String typeStr, String userName, String articleUrl)
{
String content =
"<body style='text-align:center;'>" +
"<div style='font-size: 24px; margin-bottom: 50px;'>Share Notification</div>" +
"<div>" +
"the user " +
userName +
" has published a " +
typeStr +
", click on the link below to see the details;" +
"</div>" +
"<div style='font-size: 48px; color: #2c3e50; font-weight: bold; margin-bottom: 50px;margin-top: 50px'>" +
"<a href='" +
articleUrl +
"'>Link</a>" +
"</div>" +
"</body>";
try
{
sendHtmlEmail(email, "Share Notification", content);
} catch (MessagingException e)
{
e.printStackTrace();
}
}
public void sendCommentPublishNotifyEmail(String mail, String typeStr, String userName, String articleUrl, String content)
{
String contentHtml =
"<body style='text-align:center;'>" +
"<div style='font-size: 24px; margin-bottom: 50px;'>Share Notification</div>" +
"<div>" +
"the user " +
userName +
" has published a comment on your " +
typeStr +
", click on the link below to see the details;" +
"</div>" +
"<div style='font-size: 48px; color: #2c3e50; font-weight: bold; margin-bottom: 50px;margin-top: 50px'>" +
"<a href='" +
articleUrl +
"'>Link</a>" +
"</div>" +
"<div style='margin-bottom: 20px;'>Comment Content</div>" +
"<div style='font-size: 25px; color: #3498db;'>" +
content +
"</div>" +
"</body>";
try
{
sendHtmlEmail(mail, "Share Notification", contentHtml);
log.info("send comment notify email to [{}]", mail);
} catch (MessagingException e)
{
throw new RuntimeException(e);
}
}
}