281 lines
11 KiB
C#
281 lines
11 KiB
C#
using IRaCIS.Core.Infra.EFCore;
|
|
using IRaCIS.Core.Domain.Models;
|
|
using MailKit.Security;
|
|
using MimeKit;
|
|
|
|
namespace IRaCIS.Application.Services
|
|
{
|
|
public interface IMailVerificationService
|
|
{
|
|
Task SendMail(Guid userId, string userName, string emailAddress, int verificationCode);
|
|
|
|
Task AnolymousSendEmail(string emailAddress, int verificationCode);
|
|
|
|
Task SendMailEditEmail(Guid userId, string userName, string emailAddress, int verificationCode);
|
|
|
|
Task AnolymousSendEmailForResetAccount(string emailAddress, int verificationCode);
|
|
}
|
|
|
|
public class MailVerificationService : IMailVerificationService
|
|
{
|
|
private readonly IRepository<VerificationCode> _verificationCodeRepository;
|
|
|
|
private readonly IRepository<SystemBasicData> _systemBasicDatarepository;
|
|
|
|
|
|
public MailVerificationService(IRepository<VerificationCode> verificationCodeRepository, IRepository<SystemBasicData> systemBasicDatarepository)
|
|
{
|
|
_verificationCodeRepository = verificationCodeRepository;
|
|
_systemBasicDatarepository = systemBasicDatarepository;
|
|
|
|
}
|
|
|
|
|
|
public async Task SendMailEditEmail(Guid userId, string userName, string emailAddress, int verificationCode)
|
|
{
|
|
|
|
|
|
var messageToSend = new MimeMessage();
|
|
//发件地址
|
|
messageToSend.From.Add(new MailboxAddress("GRR", "iracis_grr@163.com"));
|
|
//收件地址
|
|
messageToSend.To.Add(new MailboxAddress(userName, emailAddress));
|
|
//主题
|
|
messageToSend.Subject = "Reset email (Verification Code)";
|
|
|
|
messageToSend.Body = new TextPart("plain")
|
|
{
|
|
Text = $@"Hey {userName},you are modify your email . The verification code is: {verificationCode}, which is valid within 3 minutes. If it is not your own operation, please ignore it!
|
|
|
|
-- GRR"
|
|
};
|
|
using (var smtp = new MailKit.Net.Smtp.SmtpClient())
|
|
{
|
|
smtp.MessageSent += (sender, args) =>
|
|
{
|
|
// args.Response
|
|
var code = verificationCode.ToString();
|
|
_ = _verificationCodeRepository.AddAsync(new VerificationCode()
|
|
{
|
|
CodeType = 0,
|
|
HasSend = true,
|
|
Code = code,
|
|
UserId = userId,
|
|
ExpirationTime = DateTime.Now.AddMinutes(3)
|
|
}).Result;
|
|
_ = _verificationCodeRepository.SaveChangesAsync().Result;
|
|
|
|
};
|
|
|
|
smtp.ServerCertificateValidationCallback = (s, c, h, e) => true;
|
|
|
|
await smtp.ConnectAsync("smtp.163.com", 25, SecureSocketOptions.StartTls);
|
|
|
|
await smtp.AuthenticateAsync("iracis_grr@163.com", "XLWVQKZAEKLDWOAH");
|
|
|
|
await smtp.SendAsync(messageToSend);
|
|
|
|
await smtp.DisconnectAsync(true);
|
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
public async Task SendMail(Guid userId, string userName, string emailAddress, int verificationCode)
|
|
{
|
|
|
|
|
|
var messageToSend = new MimeMessage();
|
|
//发件地址
|
|
messageToSend.From.Add(new MailboxAddress("GRR", "iracis_grr@163.com"));
|
|
//收件地址
|
|
messageToSend.To.Add(new MailboxAddress(userName, emailAddress));
|
|
//主题
|
|
messageToSend.Subject = "Reset PassWord (Verification Code)";
|
|
|
|
messageToSend.Body = new TextPart("plain")
|
|
{
|
|
Text = $@"Hey {userName},you are resetting your password via email. The verification code is: {verificationCode}, which is valid within 3 minutes. If it is not your own operation, please ignore it!
|
|
|
|
-- GRR"
|
|
};
|
|
using (var smtp = new MailKit.Net.Smtp.SmtpClient())
|
|
{
|
|
smtp.MessageSent += (sender, args) =>
|
|
{
|
|
// args.Response
|
|
var code = verificationCode.ToString();
|
|
_ = _verificationCodeRepository.AddAsync(new VerificationCode()
|
|
{
|
|
CodeType = 0,
|
|
HasSend = true,
|
|
Code = code,
|
|
UserId = userId,
|
|
ExpirationTime = DateTime.Now.AddMinutes(3)
|
|
}).Result;
|
|
_ = _verificationCodeRepository.SaveChangesAsync().Result;
|
|
|
|
};
|
|
|
|
smtp.ServerCertificateValidationCallback = (s, c, h, e) => true;
|
|
|
|
await smtp.ConnectAsync("smtp.163.com", 25, SecureSocketOptions.StartTls);
|
|
|
|
await smtp.AuthenticateAsync("iracis_grr@163.com", "XLWVQKZAEKLDWOAH");
|
|
|
|
await smtp.SendAsync(messageToSend);
|
|
|
|
await smtp.DisconnectAsync(true);
|
|
|
|
}
|
|
}
|
|
|
|
|
|
public async Task AnolymousSendEmailForResetAccount(string emailAddress, int verificationCode)
|
|
{
|
|
var messageToSend = new MimeMessage();
|
|
//发件地址
|
|
messageToSend.From.Add(new MailboxAddress("GRR", "iracis_grr@163.com"));
|
|
//收件地址
|
|
messageToSend.To.Add(new MailboxAddress(String.Empty, emailAddress));
|
|
//主题
|
|
messageToSend.Subject = "Reset Password (Verification Code)";
|
|
|
|
messageToSend.Body = new TextPart("plain")
|
|
{
|
|
Text = $@"Hey ,you are reset passwoed. The verification code is: {verificationCode}, If it is not your own operation, please ignore it!
|
|
|
|
-- GRR"
|
|
};
|
|
using (var smtp = new MailKit.Net.Smtp.SmtpClient())
|
|
{
|
|
smtp.MessageSent += (sender, args) =>
|
|
{
|
|
// args.Response
|
|
var code = verificationCode.ToString();
|
|
_ = _verificationCodeRepository.AddAsync(new VerificationCode()
|
|
{
|
|
CodeType = Core.Domain.Share.VerifyType.Email,
|
|
HasSend = true,
|
|
Code = code,
|
|
UserId = Guid.Empty,//此时不知道用户
|
|
EmailOrPhone = emailAddress,
|
|
ExpirationTime = DateTime.Now.AddMinutes(3)
|
|
}).Result;
|
|
_ = _verificationCodeRepository.SaveChangesAsync().Result;
|
|
|
|
};
|
|
|
|
smtp.ServerCertificateValidationCallback = (s, c, h, e) => true;
|
|
|
|
await smtp.ConnectAsync("smtp.163.com", 25, SecureSocketOptions.StartTls);
|
|
|
|
await smtp.AuthenticateAsync("iracis_grr@163.com", "XLWVQKZAEKLDWOAH");
|
|
|
|
await smtp.SendAsync(messageToSend);
|
|
|
|
await smtp.DisconnectAsync(true);
|
|
}
|
|
}
|
|
|
|
|
|
public async Task AnolymousSendEmail(string emailAddress, int verificationCode)
|
|
{
|
|
|
|
|
|
|
|
var messageToSend = new MimeMessage();
|
|
//发件地址
|
|
messageToSend.From.Add(new MailboxAddress("GRR", "iracis_grr@163.com"));
|
|
//收件地址
|
|
messageToSend.To.Add(new MailboxAddress(String.Empty, emailAddress));
|
|
//主题
|
|
messageToSend.Subject = "GRR Site survey (Verification Code)";
|
|
|
|
messageToSend.Body = new TextPart("plain")
|
|
{
|
|
Text = $@"Hey ,you are login for site survey via email. The verification code is: {verificationCode}, which is valid within 3 minutes. If it is not your own operation, please ignore it!
|
|
|
|
-- GRR"
|
|
};
|
|
using (var smtp = new MailKit.Net.Smtp.SmtpClient())
|
|
{
|
|
smtp.MessageSent += (sender, args) =>
|
|
{
|
|
// args.Response
|
|
var code = verificationCode.ToString();
|
|
_ = _verificationCodeRepository.AddAsync(new VerificationCode()
|
|
{
|
|
CodeType = 0,
|
|
HasSend = true,
|
|
Code = code,
|
|
UserId = Guid.Empty,//此时不知道用户
|
|
EmailOrPhone = emailAddress,
|
|
ExpirationTime = DateTime.Now.AddMinutes(3)
|
|
}).Result;
|
|
_ = _verificationCodeRepository.SaveChangesAsync().Result;
|
|
|
|
};
|
|
|
|
smtp.ServerCertificateValidationCallback = (s, c, h, e) => true;
|
|
|
|
await smtp.ConnectAsync("smtp.163.com", 25, SecureSocketOptions.StartTls);
|
|
|
|
await smtp.AuthenticateAsync("iracis_grr@163.com", "XLWVQKZAEKLDWOAH");
|
|
|
|
await smtp.SendAsync(messageToSend);
|
|
|
|
await smtp.DisconnectAsync(true);
|
|
}
|
|
}
|
|
|
|
public async Task SendEmailForExternalUser(string emailAddress, string verificationCode)
|
|
{
|
|
var messageToSend = new MimeMessage();
|
|
//发件地址
|
|
messageToSend.From.Add(new MailboxAddress("GRR", "iracis_grr@163.com"));
|
|
//收件地址
|
|
messageToSend.To.Add(new MailboxAddress(String.Empty, emailAddress));
|
|
//主题
|
|
messageToSend.Subject = "GRR External User survey (Verification Code)";
|
|
|
|
messageToSend.Body = new TextPart("plain")
|
|
{
|
|
Text = $@"Hey ,you are login for site survey via email. The verification code is: {verificationCode}, If it is not your own operation, please ignore it!
|
|
|
|
-- GRR"
|
|
};
|
|
using (var smtp = new MailKit.Net.Smtp.SmtpClient())
|
|
{
|
|
smtp.MessageSent += (sender, args) =>
|
|
{
|
|
// args.Response
|
|
var code = verificationCode.ToString();
|
|
_ = _verificationCodeRepository.AddAsync(new VerificationCode()
|
|
{
|
|
CodeType = 0,
|
|
HasSend = true,
|
|
Code = code,
|
|
UserId = Guid.Empty,//此时不知道用户
|
|
EmailOrPhone = emailAddress,
|
|
ExpirationTime = DateTime.Now.AddMinutes(3)
|
|
}).Result;
|
|
_ = _verificationCodeRepository.SaveChangesAsync().Result;
|
|
|
|
};
|
|
|
|
smtp.ServerCertificateValidationCallback = (s, c, h, e) => true;
|
|
|
|
await smtp.ConnectAsync("smtp.163.com", 25, SecureSocketOptions.StartTls);
|
|
|
|
await smtp.AuthenticateAsync("iracis_grr@163.com", "XLWVQKZAEKLDWOAH");
|
|
|
|
await smtp.SendAsync(messageToSend);
|
|
|
|
await smtp.DisconnectAsync(true);
|
|
}
|
|
}
|
|
|
|
}
|
|
} |