using MailKit.Net.Smtp; using MimeKit; using Newtonsoft.Json; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Text.RegularExpressions; using System.Threading.Tasks; using System.Xml.Linq; namespace JiaZhiQuan.Common { public class MailInfo { public string Account { get; set; } public string AuthCode { get; set; } /// /// Key为Address,Value为Name /// public Dictionary MailToDic { get; set; } public string MailFromName { get; set; } public string MailFromAddr { get; set; } public string Subject { get; set; } public string Content { get; set; } } public class CommunityTextSegment { /// /// 类型:0 纯文本 1 @的用户编号(content为通过逗号分隔,前段为id,后段为昵称) /// public int type { get; set; } public string content { get; set; } } public static class CommonUtils { /// /// 将dateTime格式转换为Unix时间戳 /// public static long DateTimeToUnixTime(DateTime dateTime) { return (long)(dateTime - TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1))).TotalSeconds; } public async static Task SendEmail(MailInfo info) { var message = new MimeMessage(); message.From.Add(new MailboxAddress(info.MailFromName, info.MailFromAddr)); message.To.AddRange(info.MailToDic.ToList().Select(e => new MailboxAddress(e.Key, e.Value))); message.Subject = info.Subject; message.Body = new TextPart("plain") { Text = info.Content }; using var client = new SmtpClient(); client.Connect("smtp.exmail.qq.com", 465, true); await client.AuthenticateAsync(info.Account, info.AuthCode); await client.SendAsync(message); client.Disconnect(true); } public static string GetFirstOrDefaultImage(string imgs) { if (string.IsNullOrEmpty(imgs)) { return null; } return imgs.Split(',', StringSplitOptions.RemoveEmptyEntries).FirstOrDefault(); } /// /// Mock用户的数据中心Id为21 /// public static bool IsMockUser(long userId) { var dataCenterId = userId >> 17 & 31; return dataCenterId == 21; } /// /// 取字符串右边多少个字符,前面的字符使用*号。rightCharCount如果<=0,则默认为1 /// public static string TakeRightSubString(string original, int rightCharCount) { if (string.IsNullOrEmpty(original)) { return string.Empty; } if (rightCharCount <= 0) rightCharCount = 1; StringBuilder sb = new StringBuilder(); for (var i = 0; i < original.Length; i++) { sb.Append(i + rightCharCount >= original.Length ? original[i] : '*'); } return sb.ToString(); } /// /// 取字符串左边多少个字符,后面的字符使用*号。leftCharCount如果<=0,则默认为1 /// public static string TakeLeftSubString(string original, int leftCharCount) { if (string.IsNullOrEmpty(original)) { return string.Empty; } if (leftCharCount <= 0) leftCharCount = 1; StringBuilder sb = new StringBuilder(); for (var i = 0; i < original.Length; i++) { sb.Append(leftCharCount + i >= original.Length ? '*' : original[i]); } return sb.ToString(); } public static string Md5Encrypt(string strSource) { byte[] result = Encoding.Default.GetBytes(strSource); var md5 = new System.Security.Cryptography.MD5CryptoServiceProvider(); byte[] output = md5.ComputeHash(result); return BitConverter.ToString(output).Replace("-", ""); } /// /// 比较版本号,版本号如:v3.2.2 或 3.2.2 /// public static int CompareVersion(string version1, string version2) { try { var chars = new char[] { 'v', 'V' }; var nums1 = (version1 ?? string.Empty).Trim(chars).Split('.').Select(e => int.Parse(e)).ToList(); var nums2 = (version2 ?? string.Empty).Trim(chars).Split('.').Select(e => int.Parse(e)).ToList(); var maxLen = Math.Max(nums1.Count, nums2.Count); for (var i = 0; i < maxLen; i++) { var val1 = nums1.Count > i ? nums1[i] : 0; var val2 = nums2.Count > i ? nums2[i] : 0; if (val1 > val2) { return 1; } else if (val1 < val2) { return -1; } } return 0; } catch { return string.Compare(version1, version2); } } #region 动态评论相关 /// /// 解析社区文本,并返回纯文本表示 /// public static string GetPlainTextByCommunityText(string content) { if (string.IsNullOrWhiteSpace(content)) return string.Empty; try { var sb = new StringBuilder(); var segList = TransformCommunityText(content); if (segList != null && segList.Count > 0) { return GetPlainTextByCommunityTextSegments(segList); } else { return string.Empty; } } catch { return content; } } /// /// 通过社区文本对象,获取纯文本表示 /// /// /// public static string GetPlainTextByCommunityTextSegments(IList segList) { try { var sb = new StringBuilder(); foreach (var item in segList) { if (item.type == 0) { sb.Append(item.content); } else if (item.type == 1) { sb.Append("@" + item.content.Split(',')[0]); } } return sb.ToString(); } catch { return string.Empty; } } /// /// 解析社区文本,返回社区文本对象 /// public static IList TransformCommunityText(string content) { try { return JsonConvert.DeserializeObject>(content); } catch { return null; } } #endregion public static string GetIdCardDisplayName(string name) { if (string.IsNullOrEmpty(name)) return ""; var str = ""; var i = 0; name.ForEach(e => { if (i == 0) { str += e; } else { str += "*"; } i++; }); return str; } public static string GetIdCardDisplayCode(string code) { if (string.IsNullOrEmpty(code)) return ""; var str = ""; var i = 0; code.ForEach(e => { if (i == 0 || i == code.Length - 1) { str += e; } else { str += "*"; } i++; }); return str; } private static Regex ProvinceOrCityEndReg = new Regex("(市)|(省)|(自治区)|(特别行政区)|(盟)|(自治州)|(地区)|(蒙古自治州)|(柯尔克孜自治州)|(哈萨克自治州)$"); private static Regex ProvinceOrCityReplaceReg = new Regex("(壮族)|(回族)|(维吾尔)|(朝鲜族)|(土家族)|(苗族)|(藏族)|(羌族)|(彝族)|(布依族)|(侗族)|(哈尼族)|(傣族)|(白族)|(景颇族)|(傈僳族)|(蒙古族)"); /// /// 获取省或市简要名称 /// public static string GetShortNameOfProvinceAndCity(string provinceOrCityName) { return ProvinceOrCityEndReg.Replace(ProvinceOrCityReplaceReg.Replace(provinceOrCityName, ""), ""); } /// /// 计算金额 /// /// /// /// public static decimal DivideAndRound(int numerator, int denominator) { decimal result = (decimal)numerator / denominator; return Math.Round(result, 2, MidpointRounding.AwayFromZero); } } }