/// <summary> /// /// </summary> public void CheckInactive() { var userDb = new ApplicationDbContext(); var lastDate = DateTime.Today.AddDays(-180); var approvedDate = DateTime.Today.AddDays(14); // alle die sich 180 Tage nicht angemeldet haben // und die noch noch nicht benachrichtigt wurden // d.h. kein Approved-Datum haben // (das ist das Datum, an dem sie abgeschaltet werden) // nur Studenten var inactiveUsers = userDb.Users.Where(x => x.LastLogin.HasValue && x.LastLogin.Value < lastDate && !x.Approved.HasValue && x.MemberState == MemberState.Student).ToList(); var email = new InactivityReportEmail() { To = "*****@*****.**", Count = inactiveUsers.Count }; var viewsPath = Path.GetFullPath(HostingEnvironment.MapPath(@"~/Views/Emails")); var engines = new ViewEngineCollection(); var engine = new FileSystemRazorViewEngine(viewsPath); engines.Add(engine); var emailService = new Postal.EmailService(engines); // Rendern und senden emailService.Send(email); }
protected BaseMailService() { Logger = LogManager.GetLogger("Mail"); UserService = new UserInfoService(); var viewsPath = Path.GetFullPath(HostingEnvironment.MapPath(@"~/Views/Emails")); var engines = new ViewEngineCollection(); var engine = new FileSystemRazorViewEngine(viewsPath); engines.Add(engine); EmailService = new Postal.EmailService(engines); }
protected BaseMailService() { /* * var smtpSection = (SmtpSection)ConfigurationManager.GetSection("system.net/mailSettings/smtp"); * FromEMailAdress = $"{topic} <{smtpSection.From}>"; */ Logger = LogManager.GetLogger("Mail"); UserService = new UserInfoService(); var viewsPath = Path.GetFullPath(HostingEnvironment.MapPath(@"~/Views/Emails")); var engines = new ViewEngineCollection(); var engine = new FileSystemRazorViewEngine(viewsPath); engines.Add(engine); EmailService = new Postal.EmailService(engines); }
static void Main(string[] args) { bool quietMode = false; foreach (var arg in args) { if (arg.ToUpperInvariant().Contains("Q")) { quietMode = true; } } try { Console.WriteLine("Program starting" + (quietMode ? " in quiet mode" : "") + "...."); DateTime lastDate = DateTime.Now.AddDays(-Convert.ToInt32(ConfigurationManager.AppSettings["days"])); var storedDate = DataAccess.GetKeyValue("lastemail").Value; if (!string.IsNullOrEmpty(storedDate)) { lastDate = Convert.ToDateTime(storedDate); } Console.WriteLine("Last Run: {0:M/d/yyyy h:mm tt}", lastDate); Console.WriteLine("Looking for verses...."); var verses = DataAccess.GetRecentVerses(lastDate); Console.WriteLine("Looking for terms...."); var terms = DataAccess.GetRecentTerms(lastDate); Console.WriteLine("Looking for files...."); var files = FileUtility.Recent(lastDate); Console.WriteLine("Looking for email addresses...."); var emails = DataAccess.GetEmails(); verses = (verses != null ? verses.Take(50) : new List <ScriptureItem>()); terms = (terms != null ? terms.Take(50) : new List <GlossaryItem>()); files = (files != null ? files.Take(50) : new List <FileInfoResult>()); bool sendEmail = ((verses.Count() > 0 || terms.Count() > 0 || files.Count() > 0) && emails != null && emails.Count() > 0); if (!sendEmail) { Console.WriteLine(); if (!quietMode) { Console.WriteLine("Nothing new. Not sending email. Press any key to exit."); Console.Read(); } else { Console.WriteLine("Nothing new. Not sending email."); } Environment.Exit(0); } Console.WriteLine("Preparing email...."); var viewsPath = ConfigurationManager.AppSettings["TemplatePath"]; var engines = new ViewEngineCollection(); var razorEngine = new FileSystemRazorViewEngine(viewsPath); engines.Add(razorEngine); var service = new EmailService(engines); NotifyEmail email = new NotifyEmail("Notification"); var webroot = ConfigurationManager.AppSettings["AbsoluteRoot"]; email.AbsoluteRoot = webroot.EndsWith("/") ? webroot.Substring(0, webroot.Length - 1) : webroot; email.To = string.Join(", ", emails.Select(x => x.Email).ToArray()); email.Verses = verses; email.Terms = terms; email.Files = files; bool withAttachments = false; if (files != null) { long limit = Convert.ToInt64(ConfigurationManager.AppSettings["AttachmentLimitInMB"]) * 1000 * 1024; if (files.Sum(x => x.Length) <= limit) { withAttachments = true; foreach (var file in files) { var root = ConfigurationManager.AppSettings["FilesRoot"]; if (root.EndsWith("/")) { root = root.Remove(root.Length - 1); } var fullName = file.Path.Replace("/", @"\"); if (!fullName.StartsWith(@"\")) { fullName = @"\" + fullName; } fullName = root + fullName; email.Attach(new Attachment(fullName)); } } } email.HasAttachments = withAttachments; service.Send(email); var newDate = DateTime.Now.ToString("M/d/yyyy h:mm tt"); DataAccess.UpdateKeyValue("lastemail", newDate); Console.WriteLine(); Console.WriteLine("Sent an email to {0} addresses with {1} verses, {2} terms, {3} files ({4}) and updated the date for next time.", emails.Count(), verses.Count(), terms.Count(), files.Count(), withAttachments ? "with attachments" : "no attachments"); Console.WriteLine(); if (!quietMode) { Console.WriteLine("Press any key to exit."); Console.Read(); } } catch (Exception ex) { Console.WriteLine(ex.Message); if (!quietMode) { Console.WriteLine("Press any key to exit."); Console.Read(); } } }
/// <summary> /// /// </summary> /// <param name="receiverList"></param> /// <param name="sender"></param> /// <param name="model"></param> public void SendMail(ICollection <ApplicationUser> receiverList, ApplicationUser sender, MailJobModel model) { var viewsPath = Path.GetFullPath(HostingEnvironment.MapPath(@"~/Views/Emails")); var engines = new ViewEngineCollection(); var engine = new FileSystemRazorViewEngine(viewsPath); engines.Add(engine); var emailService = new Postal.EmailService(engines); // Das Mail-Model aufbauen var mailModel = new CustomBodyEmail() { From = sender.Email, Subject = model.Subject, Body = model.Body, IsImportant = model.IsImportant, IsDistributionList = model.IsDistributionList, ListName = model.ListName }; foreach (var attachment in model.Files) { MemoryStream ms = new MemoryStream(attachment.Bytes); var a = new System.Net.Mail.Attachment(ms, attachment.FileName); mailModel.Attachments.Add(a); } // 1 Mail für jeden var deliveryModel = new MailDeliverSummaryReportModel(); var errorCount = 0; foreach (var user in receiverList) { // Mails werden nur versendet, wenn die Mail Adresse bestätigt ist if (!user.EmailConfirmed) { // In den Bericht aufnehmen errorCount++; deliveryModel.Deliveries.Add(new MailDeliveryReportModel { User = user, DeliverySuccessful = false, ErrorMessage = "Mailadresse nicht bestätigt. Grund: " + user.AccountErrorMessage }); } else { // hier erst auf Like E-Mail überprüfen // wenn die E-Mail unwichtig ist und der benutzer keine E-Mail erhalten möchte // dann bekommt er auch keine - es wird aber im Versandprotokoll vermerkt if (!model.IsImportant && !user.LikeEMails) { errorCount++; deliveryModel.Deliveries.Add(new MailDeliveryReportModel { User = user, DeliverySuccessful = false, ErrorMessage = "Benutzer möchte keine E-Mails erhalten" }); } else { mailModel.To = user.Email; // Versand versuchen try { emailService.Send(mailModel); deliveryModel.Deliveries.Add(new MailDeliveryReportModel { User = user, DeliverySuccessful = true, }); } catch (Exception ex) { errorCount++; var strError = string.Format("Fehler bei Versand. Grund: {0}. Mailadresse wird auf ungültig gesetzt.", ex.Message); deliveryModel.Deliveries.Add(new MailDeliveryReportModel { User = user, DeliverySuccessful = false, ErrorMessage = strError }); /* * user.EmailConfirmed = false; * // Ein Expiry ist nicht sinnvoll / möglich, da E-Mail Adresse ja ohnehin nicht erreichbar * user.Remark = strError; * user.Submitted = DateTime.Now; * UserManager.Update(user); */ } } } } // Kopie an Absender mailModel.To = sender.Email; // Versandbericht nur an Staff if (sender.MemberState == MemberState.Staff) { var ms = new MemoryStream(); var writer = new StreamWriter(ms, Encoding.Default); writer.Write( "Name;Vorname;E-Mail;Versand;Bemerkung"); writer.Write(Environment.NewLine); foreach (var delivery in deliveryModel.Deliveries) { writer.Write("{0};{1};{2};{3};{4}", delivery.User.LastName, delivery.User.FirstName, delivery.User.Email, delivery.DeliverySuccessful ? "OK" : "FEHLER", delivery.ErrorMessage); writer.Write(Environment.NewLine); } writer.Flush(); writer.Dispose(); var sb = new StringBuilder(); sb.Append("Versandbericht"); sb.Append(".csv"); var bytes = ms.GetBuffer(); var ms2 = new MemoryStream(bytes); var a = new System.Net.Mail.Attachment(ms2, sb.ToString()); mailModel.Attachments.Add(a); } try { emailService.Send(mailModel); } finally { } }