示例#1
0
        public IActionResult Register(
            int userId, int groupId, string authToken,
            string email, string server, int port, bool ssl, string login, string password)
        {
            _context.Add(new Account
            {
                VKAccount = new VKAccount()
                {
                    Id          = userId,
                    GroupId     = groupId,
                    AccessToken = authToken
                },
                EmailAccount = new EmailAccount
                {
                    Email                 = email,
                    ServerUri             = server,
                    ServerPort            = port,
                    ServerUseSSL          = ssl,
                    UserName              = login,
                    Password              = password,
                    InternalWhileListFrom = "*"
                },
                TelegramAccounts = new List <TelegramAccount>()
            });
            _context.SaveChanges();

            return(View());
        }
示例#2
0
        private bool doSubscribe(TelegramAccount follower, string guid)
        {
            int accountId;

            if (Int32.TryParse(guid, out accountId))
            {
                var account = _context.Accounts.Include(a => a.TelegramAccounts).FirstOrDefault(a => a.Id == accountId);
                if (account != null && !account.TelegramAccounts.Contains(follower))
                {
                    account.TelegramAccounts.Add(follower);
                    _context.SaveChanges();
                    return(true);
                }
            }
            return(false);
        }
示例#3
0
        public IList <EmailMessage> GetNewMessages(int accountId)
        {
            var account     = _context.Accounts.Include(a => a.EmailAccount).FirstOrDefault(a => a.Id == accountId);
            var newMessages = new List <EmailMessage>();

            if (account != null)
            {
                EmailAccount eAcc = account.EmailAccount;

                using (var client = new ImapClient())
                {
                    var credentials = new NetworkCredential(eAcc.UserName, eAcc.Password);

                    client.Connect(eAcc.ServerUri, eAcc.ServerPort, eAcc.ServerUseSSL);

                    client.AuthenticationMechanisms.Remove("XOAUTH2");
                    client.Authenticate(credentials);

                    client.Inbox.Open(FolderAccess.ReadOnly);

                    // Обрабатываем сами письма

                    foreach (var summary in client.Inbox.Fetch((int)eAcc.LastMessageUid, -1, MessageSummaryItems.UniqueId))
                    {
                        MimeMessage iMessage = client.Inbox.GetMessage(summary.UniqueId);

                        // Если в белом списке есть запись "*", то принимаем письма от всех отправителей
                        if (eAcc.WhileListFrom.Contains("*") || eAcc.WhileListFrom.Contains(iMessage.From.Mailboxes.First().Address))
                        {
                            // Текстовое содержимое

                            var message = new EmailMessage
                            {
                                Id           = (int)summary.UniqueId.Id,
                                From         = iMessage.From.Mailboxes.First().Name,
                                Subject      = iMessage.Subject,
                                Body         = iMessage.TextBody,
                                ReceivedDate = iMessage.Date.LocalDateTime
                            };

                            // Вложения

                            var multiparts  = new List <Multipart>();
                            var attachments = new List <MimePart>();
                            using (var iter = new MimeIterator(iMessage))
                            {
                                while (iter.MoveNext())
                                {
                                    var multipart = iter.Parent as Multipart;
                                    var part      = iter.Current as MimePart;

                                    if (multipart != null && part != null && part.IsAttachment)
                                    {
                                        multiparts.Add(multipart);
                                        attachments.Add(part);
                                    }
                                }
                            }

                            for (int i = 0; i < attachments.Count; i++)
                            {
                                multiparts[i].Remove(attachments[i]);
                            }

                            foreach (var attachment in attachments)
                            {
                                using (var ms = new MemoryStream())
                                {
                                    attachment.ContentObject.DecodeTo(ms);

                                    message.Attachments.Add(new Attachment
                                    {
                                        Title    = attachment.FileName,
                                        Contents = ms.ToArray()
                                    });
                                }
                            }

                            newMessages.Add(message);
                        }

                        eAcc.LastMessageUid = (int)summary.UniqueId.Id; // Учитываем Id сообщения, даже если оно не подошло
                    }
                }

                _context.SaveChanges();
            }

            return(newMessages);
        }