/// <summary> /// 接收简历 /// </summary> public async void ReceiveResume(IEnumerable <RcrtMail> mails) { foreach (var mail in mails) { await ReceiveFromMailBox(mail.Pop3Server, mail.Pop3Port, mail.Account, mail.Password, mail.UseSSL == 1?true : false, MailProtocolEnum.Pop3).ConfigureAwait(false); } async Task ReceiveFromMailBox(string host, int port, string account, string pwd, bool useSSL, MailProtocolEnum protocol) { DynamicParameters param = new DynamicParameters(); param.Add("EmpUid", _applicationContext.EmpUid); var seenUids = _dbContext.QueryWhere <RcrtMailReadRecord>("EmpUid=@EmpUid", param).Select(s => s.MessageUid); MailKitOptions moptions = new MailKitOptions() { Server = host, Port = port, Account = account, Password = pwd, Security = useSSL, SenderEmail = account, SenderName = account }; IEmailService mailService = new EmailService(new MailKitProvider(moptions)); if (protocol == MailProtocolEnum.Pop3) { List <MimeMessage> mimeMsg = await mailService.RecieveEmailByPop3Async(seenUids).ConfigureAwait(false); if (mimeMsg.Any()) { var newUids = mimeMsg.Select(m => m.MessageId).ToList(); AddResumeByMail(mimeMsg); AddReadRecord(newUids); } } else if (protocol == MailProtocolEnum.Imap) { //默认收取前一天至今 List <MimeMessage> mimeMsg = await mailService.RecieveEmailByImapAsync(seenUids).ConfigureAwait(false); if (mimeMsg.Any()) { var newUids = mimeMsg.Select(m => m.MessageId).ToList(); AddResumeByMail(mimeMsg); AddReadRecord(newUids); } } } void AddReadRecord(IEnumerable <string> newUids) { List <RcrtMailReadRecord> list = new List <RcrtMailReadRecord>(); foreach (var uid in newUids) { RcrtMailReadRecord model = new RcrtMailReadRecord(); model.EmpUid = _applicationContext.EmpUid; model.MessageUid = uid; list.Add(model); } if (list.Any()) { _dbContext.InsertBatchSql(list); } } void AddResumeByMail(IEnumerable <MimeMessage> messages) { var list = _dbContext.QueryAll <RcrtWebsite>(); List <IParseEmailService> parseMailServiceList = new List <IParseEmailService>(); foreach (var website in list) { if (website.EmailAnalysisPlugin.IsPresent()) { //解析插件 IParseEmailService analysis = ParseEmailService(website.EmailAnalysisPlugin); if (analysis != null) { parseMailServiceList.Add(analysis); } } } //获取黑名单 var blackList = _dbContext.Query <RcrtResume>($"select {nameof(RcrtResume.Mobile)} from {nameof(RcrtResume)} where {nameof(RcrtResume.ResumeStatus)}='{RcrtResumeStatus.BlackList}'"); if (parseMailServiceList.Any()) { foreach (var message in messages) { foreach (var service in parseMailServiceList) { var result = service.Analysis(message, blackList); if (result) { break; } } } } } IParseEmailService ParseEmailService(string parseEmailServiceClass) { IParseEmailService dataInterceptor = null; if (parseEmailServiceClass.IsPresent()) { //此处不能缓存,容易使session丢失,若要缓存的话需要重新赋值session try { Type type = Sys.Type.GetType(parseEmailServiceClass); if (type != null && type.GetInterface("IParseEmailService") != null) { //dataInterceptor = (IDataInterceptor)Activator.CreateInstance(type, new object[] { _serviceProvider, this }); dataInterceptor = (IParseEmailService)ActivatorUtilities.GetServiceOrCreateInstance(_serviceProvider, type); } } catch (Exception ex) { _logger.LogError(ex.Message); return(null); } } return(dataInterceptor); } }
public EmailRepository(IParseEmailService parseEmailService, ISaveEmailService saveEmailService, ISmtpManager smtpManager) { _parseEmailService = parseEmailService; _saveEmailService = saveEmailService; _smtpManager = smtpManager; }