using BS.Shared.AppSender; using System; using System.Collections.Generic; using System.Configuration; using System.Linq; using System.Net; using System.Net.Mail; using System.Text; using System.Text.RegularExpressions; using System.Threading.Tasks; using BS.Shared.Core; using BS.Shared.Extensions; namespace BeWo.ServerUtils.Core { public static class MailUtils { private static readonly Module _GKV_Module = new Module("Gkv", "GKV/EDI/EDAT"); private static readonly Module _AI_Module = new Module("Ai", "AI"); private static readonly Dictionary _serverMap = new Dictionary() { ["WIN-FDL8EJ28T7E"] = "app1.bewoplaner.de", ["WIN-E38DS2VNNPE"] = "app2.bewoplaner.de", ["WIN-40R404TI9J0"] = "app3.bewoplaner.de", ["OWNEROR-8BGG3AK"] = "app4.bewoplaner.de", ["OWNEROR-K9VRMQT"] = "app5.bewoplaner.de", ["WIN-1288MG5M1RE"] = "app6.bewoplaner.de", ["WIN-5H6NO5J7OAT"] = "app7.bewoplaner.de", ["WIN-A27H847STS6"] = "app8.bewoplaner.de", }; public static bool SendAiModuleErrorMail(string title, string body, string tenant) => SendModuleErrorMail(_AI_Module, title, body, tenant); public static bool SendGkvModuleErrorMail(string title, Exception e, string tenant) => SendGkvModuleErrorMail(title, "Exception gefunden: " + e.ToString(), tenant); public static bool SendGkvModuleErrorMail(string title, string body, string tenant) { return SendModuleErrorMail(_GKV_Module, title, body, tenant); } private static bool SendModuleErrorMail(Module module, string title, string body, string tenant) { var conn = AppSettingReader.GetSmtpConnectionInfo(module); if (!conn.Enabled) return false; var subject = $"ownSoft Module Error {module.Name}: {title}"; var toAddress = conn.MailReceiver; var senderName = conn.MailSender; var senderEMail = conn.MailSender; var smtpServer = conn.SmtpServer; var smtpUser = conn.SmtpUser; var smtpPassword = conn.SmtpPassword; var sendAsync = false; string tenant_str = "Kunde: " + (tenant ?? "unknown"); body += "\n\n" + tenant_str; string server = AppRequestSender.GetServerFromTenant(tenant); string server_str = "Kundenserver: " + (server ?? "unkown"); body += "\n" + server_str; string hostname = Dns.GetHostName(); string hostname_str = "MachineName: " + (hostname ?? "unknown"); body += "\n\n" + hostname_str; string server2 = _serverMap.GetValueOrDefault(hostname, "unknown"); string server2_str = "ServerMap: " + (server2); body += "\n" + server2_str; return SendEmail(subject, body, toAddress, senderName, senderEMail, smtpServer, smtpUser, smtpPassword, sendAsync); } private static bool SendEmail(string subject, string body, string toAddress, string fromName, string fromAddress, string smtpServer, string smtpUser, string smtpPassword, bool sendAsync) { try { if (!IsValidEmail(toAddress) || !IsValidEmail(fromAddress)) { return false; } MailMessage message = new MailMessage(fromAddress, toAddress, subject, body); if (toAddress != fromAddress) { message.ReplyToList.Add(new MailAddress(fromAddress, fromName)); } message.BodyEncoding = Encoding.UTF8; message.IsBodyHtml = false; var mailClient = new SmtpClient(smtpServer, 587) { Credentials = new NetworkCredential(smtpUser, smtpPassword) }; mailClient.EnableSsl = true; if (sendAsync) { mailClient.SendAsync(message, null); } else { mailClient.Send(message); } return true; } catch (Exception e) { return false; } } public static bool IsValidEmail(string email) { //return Regex.IsMatch(email, @"^([\w-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([\w-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$"); return Regex.IsMatch(email, @"^(?("")("".+?(?