public bool SetMailBoxSettings(clientConfig config) { try { if (string.IsNullOrEmpty(config.emailProvider.id) || config.emailProvider.incomingServer == null || !config.emailProvider.incomingServer.Any() || config.emailProvider.outgoingServer == null || !config.emailProvider.outgoingServer.Any()) throw new Exception("Incorrect config"); using (var db = GetDb()) { using (var tx = db.BeginTransaction()) { var id_provider = db.ExecuteScalar<int>( new SqlQuery(MAIL_MAILBOX_PROVIDER) .Select(MailBoxProviderFields.id) .Where(MailBoxProviderFields.name, config.emailProvider.id)); if (id_provider < 1) { id_provider = db.ExecuteScalar<int>( new SqlInsert(MAIL_MAILBOX_PROVIDER) .InColumnValue(MailBoxProviderFields.id, 0) .InColumnValue(MailBoxProviderFields.name, config.emailProvider.id) .InColumnValue(MailBoxProviderFields.display_name, config.emailProvider.displayName) .InColumnValue(MailBoxProviderFields.display_short_name, config.emailProvider.displayShortName) .InColumnValue(MailBoxProviderFields.documentation, config.emailProvider.documentation.url) .Identity(0, 0, true)); if (id_provider < 1) throw new Exception("id_provider not saved in DB"); } var insert_query = new SqlInsert(MAIL_MAILBOX_DOMAIN) .IgnoreExists(true) .InColumns(MailBoxDomainFields.id_provider, MailBoxDomainFields.name); config.emailProvider.domain .ForEach(domain => insert_query .Values(id_provider, domain)); db.ExecuteNonQuery(insert_query); insert_query = new SqlInsert(MAIL_MAILBOX_SERVER) .IgnoreExists(true) .InColumns( MailBoxServerFields.id_provider, MailBoxServerFields.type, MailBoxServerFields.hostname, MailBoxServerFields.port, MailBoxServerFields.socket_type, MailBoxServerFields.username, MailBoxServerFields.authentication ); config.emailProvider.incomingServer .ForEach(server => insert_query .Values(id_provider, server.type, server.hostname, server.port, server.socketType, server.username, server.authentication)); config.emailProvider.outgoingServer .ForEach(server => insert_query .Values(id_provider, server.type, server.hostname, server.port, server.socketType, server.username, server.authentication)); db.ExecuteNonQuery(insert_query); tx.Commit(); } } } catch (Exception) { return false; } return true; }
public clientConfig GetMailBoxSettings(string host) { using (var db = GetDb()) { var id_provider = db.ExecuteScalar<int>( new SqlQuery(MAIL_MAILBOX_DOMAIN) .Select(MailBoxDomainFields.id_provider) .Where(MailBoxDomainFields.name, host)); if (id_provider < 1) return null; var config = new clientConfig(); config.emailProvider.domain.Add(host); var provider = db.ExecuteList( new SqlQuery(MAIL_MAILBOX_PROVIDER) .Select(MailBoxProviderFields.name, MailBoxProviderFields.display_name, MailBoxProviderFields.display_short_name, MailBoxProviderFields.documentation) .Where(MailBoxProviderFields.id, id_provider)) .FirstOrDefault(); if (provider == null) return null; config.emailProvider.id = Convert.ToString(provider[0]); config.emailProvider.displayName = Convert.ToString(provider[1]); config.emailProvider.displayShortName = Convert.ToString(provider[2]); config.emailProvider.documentation.url = Convert.ToString(provider[3]); var servers = db.ExecuteList( new SqlQuery(MAIL_MAILBOX_SERVER) .Select(MailBoxServerFields.hostname, MailBoxServerFields.port, MailBoxServerFields.type, MailBoxServerFields.socket_type, MailBoxServerFields.username, MailBoxServerFields.authentication) .Where(MailBoxServerFields.id_provider, id_provider) .Where(MailBoxServerFields.is_user_data, false)); //This condition excludes new data from mail_mailbox_server. That needed for resolving security issues. if (servers.Count == 0) return null; servers.ForEach(serv => { var hostname = Convert.ToString(serv[0]); var port = Convert.ToInt32(serv[1]); var type = Convert.ToString(serv[2]); var socket_type = Convert.ToString(serv[3]); var username = Convert.ToString(serv[4]); var authentication = Convert.ToString(serv[5]); if (type == "smtp") { config.emailProvider.outgoingServer.Add(new clientConfigEmailProviderOutgoingServer { type = type, socketType = socket_type, hostname = hostname, port = port, username = username, authentication = authentication }); } else { config.emailProvider.incomingServer.Add(new clientConfigEmailProviderIncomingServer { type = type, socketType = socket_type, hostname = hostname, port = port, username = username, authentication = authentication }); } }); return config; } }
private static List<MailServerSettings> GetImapSettingsVariants(string email, string password, MailBox mbox, clientConfig config) { var temp_list = new List<MailServerSettings>(); if (config != null && config.emailProvider.incomingServer != null) { var address = new MailAddress(email); foreach (var imap_server in config.emailProvider.incomingServer.Where(x => x.type == "imap")) { if(imap_server.hostname == null) continue; temp_list.Add(new MailServerSettings { Url = FormatServerFromDb(imap_server.hostname, address.Host.ToLowerInvariant()), Port = imap_server.port, AccountName = FormatLoginFromDb(imap_server.username, address), AccountPass = password, AuthenticationType = ConvertToSaslMechanism(imap_server.authentication), EncryptionType = ConvertToEncryptionType(imap_server.socketType) }); } if (temp_list.Any()) { //if settings was founded in db then we will finish settings tuning. return temp_list; } } temp_list.Add(new MailServerSettings { Url = mbox.Server, Port = 143, AccountName = email, AccountPass = password, AuthenticationType = SaslMechanism.Login, EncryptionType = EncryptionType.StartTLS }); temp_list.Add(new MailServerSettings { Url = mbox.Server, Port = 993, AccountName = email, AccountPass = password, AuthenticationType = SaslMechanism.Login, EncryptionType = EncryptionType.SSL }); temp_list.Add(new MailServerSettings { Url = mbox.Server, Port = 143, AccountName = email, AccountPass = password, AuthenticationType = SaslMechanism.CramMd5, EncryptionType = EncryptionType.None }); temp_list.Add(new MailServerSettings { Url = mbox.Server, Port = 143, AccountName = email, AccountPass = password, AuthenticationType = SaslMechanism.Login, EncryptionType = EncryptionType.None }); return temp_list; }
private static List<MailServerSettings> GetSmtpSettingsVariants(string email, string password, MailBox mbox, clientConfig config) { var temp_list = new List<MailServerSettings>(); if (config != null && config.emailProvider.outgoingServer != null) { var address = new MailAddress(email); foreach (var mail_server_settingse in config.emailProvider.outgoingServer) { temp_list.Add(new MailServerSettings { Url = FormatServerFromDb(mail_server_settingse.hostname, address.Host.ToLowerInvariant()), Port = mail_server_settingse.port, AccountName = FormatLoginFromDb(mail_server_settingse.username, address), AccountPass = password, AuthenticationType = ConvertToSaslMechanism(mail_server_settingse.authentication), EncryptionType = ConvertToEncryptionType(mail_server_settingse.socketType) }); } if (temp_list.Any()) { //if settings was founded in db then we will finish settings tuning. return temp_list; } } temp_list.Add(new MailServerSettings { Url = mbox.SmtpServer, Port = 587, AccountName = email, AccountPass = password, AuthenticationType = SaslMechanism.Login, EncryptionType = EncryptionType.StartTLS }); temp_list.Add(new MailServerSettings { Url = mbox.SmtpServer, Port = 465, AccountName = email, AccountPass = password, AuthenticationType = SaslMechanism.Login, EncryptionType = EncryptionType.SSL }); temp_list.Add(new MailServerSettings { Url = mbox.SmtpServer, Port = 25, AccountName = email, AccountPass = password, AuthenticationType = SaslMechanism.CramMd5, EncryptionType = EncryptionType.None }); temp_list.Add(new MailServerSettings { Url = mbox.SmtpServer, Port = 587, AccountName = email, AccountPass = password, AuthenticationType = SaslMechanism.CramMd5, EncryptionType = EncryptionType.None }); temp_list.Add(new MailServerSettings { Url = mbox.SmtpServer, Port = 25, AccountName = email, AccountPass = password, AuthenticationType = SaslMechanism.Login, EncryptionType = EncryptionType.None }); temp_list.Add(new MailServerSettings { Url = mbox.SmtpServer, Port = 587, AccountName = email, AccountPass = password, AuthenticationType = SaslMechanism.Login, EncryptionType = EncryptionType.None }); return temp_list; }
static bool ParseXml(string filepath, out clientConfig obj) { obj = null; try { obj = clientConfig.LoadFromFile(filepath); } catch (Exception) { return false; } return true; }