Ejemplo n.º 1
0
        public virtual bool ScriptTask1Execute(ProcessExecutingContext context)
        {
                        #if !NETSTANDARD2_0 // TODO CRM-42546
            var secureText          = UserConnection.DataValueTypeManager.GetInstanceByName("SecureText") as SecureTextDataValueType;
            var currentUserId       = CurrentUserId != Guid.Empty ? CurrentUserId : UserConnection.CurrentUser.Id;
            EntitySchemaQuery query = new EntitySchemaQuery(UserConnection.EntitySchemaManager,
                                                            "MailboxSyncSettings");
            query.AddColumn("UserName");
            query.AddColumn("UserPassword");
            query.AddColumn("MailServer.Address");
            query.AddColumn("MailServer.Port");
            query.AddColumn("MailServer.UseSSL");
            query.AddColumn("MailServer.IsStartTls");
            query.AddColumn("SenderEmailAddress");
            query.Filters.Add(query.CreateFilterWithParameters(FilterComparisonType.Equal,
                                                               "SysAdminUnit.Id", currentUserId));
            query.Filters.Add(query.CreateFilterWithParameters(FilterComparisonType.Equal,
                                                               "MailServer.AllowEmailDownloading", true));
            query.Filters.Add(query.CreateFilterWithParameters(FilterComparisonType.Equal,
                                                               "EnableMailSynhronization", true));
            query.Filters.Add(query.CreateFilterWithParameters(FilterComparisonType.Equal,
                                                               "SenderEmailAddress", SenderEmailAddress));
            var select = query.GetSelectQuery(UserConnection);

            MailCredentials credentials = new MailCredentials();
            using (var dbExecutor = UserConnection.EnsureDBConnection()) {
                using (var reader = select.ExecuteReader(dbExecutor)) {
                    if (!reader.Read())
                    {
                        var parameters = new Dictionary <string, object> {
                            { "SenderEmailAddress", SenderEmailAddress },
                            { "CurrentUserId", currentUserId }
                        };
                        MailSynchronizer.RemoveSyncJob(UserConnection, parameters);
                        throw new ArgumentException("user does not have mail account");
                    }
                    credentials.UserName = reader.GetColumnValue <string>(reader.GetName(0));
                    string rawPassword = reader.GetColumnValue <string>(reader.GetName(1));
                    if (!rawPassword.IsNullOrEmpty())
                    {
                        credentials.UserPassword = secureText.GetValueForLoad(UserConnection, rawPassword).ToString();
                    }
                    credentials.Host               = reader.GetColumnValue <string>(reader.GetName(2));
                    credentials.Port               = reader.GetColumnValue <int>(reader.GetName(3));
                    credentials.UseSsl             = reader.GetColumnValue <bool>(reader.GetName(4));
                    credentials.StartTls           = reader.GetColumnValue <bool>(reader.GetName(5));
                    credentials.SenderEmailAddress = reader.GetColumnValue <string>(reader.GetName(6));
                }
            }
            using (var mailSynchronizer = new MailSynchronizer(UserConnection, credentials)) {
                mailSynchronizer.ValidateImapClient();
                mailSynchronizer.SyncImapMail();
            }
                        #endif
            return(true);
        }