예제 #1
0
        public IEnumerable <MailMessagePreviewDTO> GetMailInbox()
        {
            List <MailMessagePreviewDTO> list = new List <MailMessagePreviewDTO>();

            using (ImapClient client = new ImapClient())
            {
                // For demo-purposes, accept all SSL certificates
                client.ServerCertificateValidationCallback = (s, c, h, e) => true;

                client.Connect("imap.gmail.com", 993, true);

                client.Authenticate("*****@*****.**", "V3@pu166@@!!");

                // The Inbox folder is always available on all IMAP servers...
                IMailFolder inbox = client.Inbox;
                inbox.Open(FolderAccess.ReadOnly);
                int index = Math.Max(inbox.Count - 10, 0);
                IList <IMessageSummary> items = inbox.Fetch(index, -1, MessageSummaryItems.UniqueId);

                foreach (IMessageSummary item in items)
                {
                    MimeKit.MimeMessage message = inbox.GetMessage(item.UniqueId);
                    list.Add(new MailMessagePreviewDTO
                    {
                        Date    = message.Date.DateTime.ToUniversalTime(),
                        Sender  = message.From[0].Name,
                        Subject = message.Subject
                    });
                }
            }
            return(list);
        }
예제 #2
0
        public ArrayImpl Get(bool deleteMessages, ArrayImpl ids, bool markAsRead)
        {
            var result            = new ArrayImpl();
            var processedMessages = GetMessagesList(ids);

            foreach (var i in processedMessages)
            {
                var mimeMessage = _currentFolder.GetMessage(i);
                var iMessage    = new InternetMailMessage(mimeMessage, UniqueIdToInternalId(i));
                result.Add(iMessage);
            }

            if (processedMessages.Count > 0)
            {
                if (deleteMessages)
                {
                    _currentFolder.AddFlags(processedMessages, MessageFlags.Deleted, silent: true);
                }
                else if (markAsRead)
                {
                    _currentFolder.AddFlags(processedMessages, MessageFlags.Seen, silent: true);
                }
            }

            return(result);
        }
예제 #3
0
        private void datagridOnSelected(object sender, RoutedEventArgs e)
        {
            if (!imapClient.IsAuthenticated)
            {
                login();
            }
            readMail rM = new readMail();

            MessageBox.Show("ww" + dataGrid.SelectedItem.ToString().Split('=')[5].Substring(1, dataGrid.SelectedItem.ToString().Split('=')[5].Length - 3) + "ww");
            string[] x = { dataGrid.SelectedItem.ToString().Split('=')[5].Substring(1, dataGrid.SelectedItem.ToString().Split('=')[5].Length - 3) };
            intializeFolder();
            var temp = fol.GetMessage(UniqueId.Parse(x[0]));

            rM.Title        = temp.Subject;
            rM.lb1.Content += temp.Date.ToString();
            rM.lb2.Content += temp.Subject;
            rM.lb3.Content += temp.From.ToString();
            Uri uri;

            if (temp.HtmlBody != null)
            {
                StreamWriter sw = new StreamWriter("d:\\temp.html", false); sw.Write(temp.HtmlBody); sw.Close();
                uri = new Uri(@"d:\temp.html", UriKind.Absolute);
            }
            else
            {
                uri = new Uri("data:text/plain," + temp.TextBody, UriKind.Absolute);
            }
            rM.wb.Source = uri;
            rM.Show();
        }
예제 #4
0
        public void CopyFolder(IMailFolder folder, Folder sqlEntity, bool update, string password)
        {
            try
            {
                folder.Open(FolderAccess.ReadOnly);
            }
            catch (Exception)
            {
                return;
            }

            Random           rng   = AzusaContext.GetInstance().RandomNumberGenerator;
            IList <UniqueId> uuids = folder.Search(FolderService.GetSearchQuery(sqlEntity));

            foreach (UniqueId uuid in uuids)
            {
                if (MessageService.TestForMessage((int)uuid.Id))
                {
                    continue;
                }

                var message = folder.GetMessage(uuid);

                byte[] saltBuffer = new byte[16];
                rng.NextBytes(saltBuffer);
                Array.Copy(azusaString, 0, saltBuffer, 0, azusaString.Length);
                int iterations = rng.Next(1000, short.MaxValue);
                Rfc2898DeriveBytes deriveBytes = new Rfc2898DeriveBytes(password, saltBuffer, iterations);
                Aes aes = Aes.Create();
                aes.Key = deriveBytes.GetBytes(32);
                aes.IV  = deriveBytes.GetBytes(16);
                MemoryStream ms           = new MemoryStream();
                CryptoStream cryptoStream = new CryptoStream(ms, aes.CreateEncryptor(), CryptoStreamMode.Write);
                message.WriteTo(cryptoStream);
                cryptoStream.Flush();

                Mail child = new Mail();
                child.Uid          = (int)uuid.Id;
                child.MessageUtime = message.Date.DateTime.ToUnixTime();
                child.Folder       = sqlEntity.id;
                child.From         = message.From[0].ToString();
                if (message.To.Count > 0)
                {
                    child.To = message.To[0].ToString();
                }
                else
                {
                    child.To = null;
                }
                child.Subject    = message.Subject;
                child.Salt       = saltBuffer;
                child.Iterations = (short)iterations;
                child.Data       = new byte[ms.Position];
                Array.Copy(ms.GetBuffer(), 0, child.Data, 0, ms.Position);

                MessageService.StoreMessage(child);
            }

            folder.Close(false);
        }
예제 #5
0
파일: PopHelper.cs 프로젝트: zzxulong/study
 /// <summary>
 /// 根据唯一标识和文件夹名,获取单个邮件
 /// </summary>
 /// <param name="folderName"></param>
 /// <returns></returns>
 public EmailViewM GetEmailByUid(uint uniqueid, string folderName = null)
 {
     try
     {
         using (ImapClient client = ConnectIMAP())
         {
             if (folderName == null)
             {
                 folderName = client.Inbox.Name;
             }
             IMailFolder folder = client.GetFolder(folderName);
             folder.Open(FolderAccess.ReadOnly);
             var email  = folder.GetMessage(new UniqueId(uniqueid));
             var entity = FillEntity(null, email);
             //
             folder.Close();
             client.Disconnect(true);
             //
             return(entity);
         }
     }
     catch (Exception e)
     {
         ErrMsg = $"获取单个邮件异常:{e.ToString()} [{e.Message}]";
         return(null);
     }
 }
예제 #6
0
        private UniqueId GetUniqueId(MimeMessage mailMessage, string folder)
        {
            UniqueId    id         = new UniqueId();
            IMailFolder mailFolder = GetFolder(folder);
            bool        open       = mailFolder.IsOpen;

            if (!open)
            {
                mailFolder.Open(FolderAccess.ReadOnly);
            }
            var items = mailFolder.Fetch(0, -1, MessageSummaryItems.UniqueId | MessageSummaryItems.Size | MessageSummaryItems.Flags);

            foreach (var item in items)
            {
                var message = mailFolder.GetMessage(item.UniqueId);
                if (message.MessageId == mailMessage.MessageId)
                {
                    id = item.UniqueId;
                    break;
                }
            }
            if (!open)
            {
                mailFolder.Close();
            }
            return(id);
        }
        // GET api/<controller>
        public IEnumerable <long> Get(string IMAP, int Port, string Login, string Password)
        {
            List <long> list = new List <long>();

            using (ImapClient client = new ImapClient())
            {
                var context = new ELMA3Entities();
                client.Connect(IMAP, Port, SecureSocketOptions.SslOnConnect);
                client.Authenticate(Login, Password);
                IMailFolder inbox = client.Inbox;
                inbox.Open(FolderAccess.ReadOnly);
                var uids = inbox.Search(SearchQuery.NotSeen);
                foreach (var item in uids)
                {
                    var    message = inbox.GetMessage(item);
                    string a;
                    if (message.HtmlBody != null)
                    {
                        a = message.HtmlBody;
                    }
                    else
                    {
                        a = message.TextBody;
                    }
                    var b = context.CreateEmailMessageI(DateTime.Now.ToString(), DateTime.Now, message.Subject, a, message.Date.UtcDateTime, message.From.FirstOrDefault().Name);
                    list.Add(b.FirstOrDefault().Id);
                }
            }
            return(list.AsEnumerable());
        }
예제 #8
0
        private void CheckImapMail()
        {
            try
            {
                using (ImapClient imapClient = new ImapClient())
                {
                    imapClient.Connect(_configuration.ServerName, _configuration.Port, _configuration.SSL);
                    imapClient.AuthenticationMechanisms.Remove("XOAUTH2");

                    imapClient.Authenticate(_configuration.UserName, _configuration.Password);

                    IMailFolder inbox = imapClient.Inbox;
                    inbox.Open(FolderAccess.ReadWrite);
                    foreach (UniqueId msgUid in inbox.Search(SearchQuery.NotSeen))
                    {
                        MimeMessage msg = inbox.GetMessage(msgUid);
                        ProcessMail(msg);
                        inbox.SetFlags(msgUid, MessageFlags.Seen, true);
                    }
                }
            }
            catch (Exception ex)
            {
                // Sometimes an error occures, e.g. if the network was disconected or a timeout occured.
                Logger.Instance.LogException(this, ex);
            }
        }
예제 #9
0
 IEnumerable <MimeMessage> Fetch(IMailFolder inbox)
 {
     for (int i = 0; i < inbox.Count; i++)
     {
         yield return(inbox.GetMessage(i));
     }
 }
예제 #10
0
        public List <string> ReceivedFileImap(string SaveToDirectory)
        {
            List <string> file_names = new List <string>();

            using (ImapClient client = new ImapClient())
            {
                client.Connect(IMAPGmailServer, IMAPGmailPort, true);
                client.Authenticate(mailAddress, mailPassword);
                IMailFolder inbox = client.Inbox;
                inbox.Open(FolderAccess.ReadOnly);
                for (int i = 0; i < inbox.Count; i++)
                {
                    MimeMessage message = inbox.GetMessage(i);
                    if (message.Date.Month == DateTime.Now.Month && message.Date.Day == DateTime.Now.Day && message.Date.Year == DateTime.Now.Year)
                    {
                        IEnumerable <MimeEntity> attachments = message.Attachments;
                        foreach (MimeEntity file in attachments)
                        {
                            file_names.Add(SaveToDirectory + file.ContentType.Name);
                            GetFileImap(file, SaveToDirectory);
                        }
                    }
                }
            }
            logger.WriteLog("Get archives from email", LogLevel.Mail);
            return(file_names);
        }
예제 #11
0
파일: EmailDriver.cs 프로젝트: Magenic/MAQS
        /// <summary>
        /// Get the list of emails for a search
        /// </summary>
        /// <param name="condition">The search condition</param>
        /// <param name="headersOnly">True if you only want header information</param>
        /// <param name="markRead">True if you want the emails marked as read</param>
        /// <returns>The list of mail message that match the search</returns>
        private List <MimeMessage> GetSearchResults(SearchQuery condition, bool headersOnly, bool markRead)
        {
            List <MimeMessage> messageList = new List <MimeMessage>();
            IMailFolder        folder      = this.GetCurrentFolder();

            foreach (UniqueId uid in folder.Search(condition, default))
            {
                if (markRead)
                {
                    folder.AddFlags(uid, MessageFlags.Seen, true);
                }

                MimeMessage message;

                if (headersOnly)
                {
                    HeaderList headers   = folder.GetHeaders(uid);
                    var        messageId = headers[HeaderId.MessageId];

                    message = new MimeMessage(headers)
                    {
                        MessageId = messageId
                    };
                }
                else
                {
                    message = folder.GetMessage(uid);
                }

                messageList.Add(message);
            }

            return(messageList);
        }
예제 #12
0
파일: Extensions.cs 프로젝트: trentet/JAM
 public static void DownloadEmail(this Email email, IMailFolder mailFolder)
 {
     try
     {
         Console.WriteLine("[Downloading Email] {0:D2} ", email.Id);
         var savePath = AppConfig.EmailSaveDirectory + email.Id + ".eml";
         if (!File.Exists(savePath))
         {
             lock (mailFolder.SyncRoot)
             {
                 File.WriteAllText(savePath, mailFolder.GetMessage(email.Id).ToString());
                 Console.WriteLine("[Email Downloaded] {0:D2}: {1}", email.Id, savePath);
             }
         }
         else
         {
             Console.WriteLine("[Download Cancelled] EML {0:D2} Already Exists: {1}", email.Id, savePath);
         }
     }
     catch (Exception e)
     {
         Console.WriteLine("Failed to download email of ID {" + email.Id + "}.");
         Console.WriteLine(e.StackTrace);
         throw;
         //return null;
     }
 }
예제 #13
0
        public void GetAllMails(IProgress <MailInfo> progress, [Optional] IMailFolder folder)
        {
            using (ImapClient client = new ImapClient())
            {
                client.Connect(mailServer, port, ssl);
                client.AuthenticationMechanisms.Remove("XOAUTH2");
                client.Authenticate(UserData.Email, UserData.Password);

                if (folder == null)
                {
                    folder = client.Inbox;
                }
                else
                {
                    folder = client.GetFolder(folder.FullName);
                }

                folder.Open(FolderAccess.ReadOnly);
                SearchResults results = folder.Search(SearchOptions.All, SearchQuery.DeliveredAfter(DateFrom));

                if (results.UniqueIds.Count < MaxEmails)
                {
                    MaxEmails = results.UniqueIds.Count;
                }

                for (int i = MaxEmails - 1; i >= 0; i--)
                {
                    MailInfo message = new MailInfo(folder.GetMessage(results.UniqueIds[i]), results.UniqueIds[i], folder);
                    progress.Report(message);
                }

                folder.Close();
                client.Disconnect(true);
            }
        }
예제 #14
0
        /// <summary>
        /// Get the list of emails for a search
        /// </summary>
        /// <param name="args">The search condition followed by the header only and set as seen booleans</param>
        /// <returns>The list of mail message that match the search</returns>
        private List <MimeMessage> GetSearchResults(params object[] args)
        {
            List <MimeMessage> messageList = new List <MimeMessage>();
            IMailFolder        folder      = this.GetCurrentFolder();

            foreach (UniqueId uid in folder.Search((SearchQuery)args[0], default(CancellationToken)))
            {
                if ((bool)args[2])
                {
                    folder.AddFlags(uid, MessageFlags.Seen, true);
                }

                MimeMessage message = null;

                if ((bool)args[1])
                {
                    HeaderList headers = folder.GetHeaders(uid);
                    message = new MimeMessage(headers);
                }
                else
                {
                    message = folder.GetMessage(uid);
                }

                messageList.Add(message);
            }

            return(messageList);
        }
        public IEnumerable <IEMailMessageI> GetReadMailMessages(IMailRequestI mailRequest)
        {
            var mailMessages = new List <IEMailMessageI>();

            using (ImapClient client = new ImapClient())
            {
                client.Connect(MailReadersSettingsModule.Settings.IMAP, MailReadersSettingsModule.Settings.IMAPport, SecureSocketOptions.SslOnConnect);
                client.Authenticate(MailReadersSettingsModule.Settings.Login, MailReadersSettingsModule.Settings.Password);
                IMailFolder inbox = client.Inbox;
                inbox.Open(FolderAccess.ReadOnly);
                var uids = inbox.Search(SearchQuery.Seen);
                foreach (var item in uids)
                {
                    var message     = inbox.GetMessage(item);
                    var mailMessage = EntityManager <IEMailMessageI> .Instance.Create();

                    mailMessage.Name                 = DateTime.Now.ToString();
                    mailMessage.CreationDate         = DateTime.Now;
                    mailMessage.Tema                 = message.Subject;
                    mailMessage.Soobschenie          = message.HtmlBody;
                    mailMessage.DataPolucheniePisjma = message.Date.UtcDateTime;
                    mailMessage.OtKogo               = message.From.FirstOrDefault().Name;
                    mailMessage.Save();
                    mailMessages.Add(mailMessage);
                }
            }
            return(mailMessages.AsEnumerable());
        }
예제 #16
0
        /// <summary>
        /// Reads all the messages.
        /// </summary>
        private static void ReadMessage()
        {
            using (ImapClient client = new ImapClient())
            {
                client.ServerCertificateValidationCallback = (s, c, h, e) => true;
                client.Connect("imap.gmail.com", 993, true);
                client.Authenticate(from.Address, password);

                IMailFolder inbox = client.Inbox;
                inbox.Open(FolderAccess.ReadOnly);

                Console.WriteLine("Total messages: {0}", inbox.Count);
                Console.WriteLine("Recent messages: {0}", inbox.Recent);

                for (int i = 0; i < inbox.Count; i++)
                {
                    MimeMessage message = inbox.GetMessage(i);
                    Console.WriteLine("\n-------------------- messsage " + i + 1 + ", size=" + inbox.Fetch(0, -1, MessageSummaryItems.Size).ElementAt(i).Size + " --------------------");
                    Console.WriteLine("From: {0}", message.From[0]);
                    Console.WriteLine("Subject: {0}", message.Subject);
                    Console.WriteLine("Text: {0}", message.TextBody);
                    Console.WriteLine("-------------------- end of message " + i + 1 + " --------------------");
                }

                Console.WriteLine("Press a key to continue");
                Console.ReadKey();
                client.Disconnect(true);
            }
        }
예제 #17
0
 private static void GetMessagesWithAttachments(IMailFolder inbox)
 {
     for (int i = 0; i < inbox.Count; i++)
     {
         var message = inbox.GetMessage(i);
         GetAttachments(message);
     }
 }
        private async Task <MimeMessage> GetMessage(IMailFolder mailFolder, UniqueId uid)
        {
            var tollerantGetMessage = new TolerantFunction <UniqueId, MimeMessage>(new TolerantFunctionConfig <UniqueId, MimeMessage>()
            {
                Func = id => mailFolder.GetMessage(id)
            });

            return(await tollerantGetMessage.Execute(uid));
        }
예제 #19
0
 public List <MimeMessage> LoadMessages()
 {
     foreach (var item in Fetch(inbox))
     {
         unSorted.Add(item);
     }
     foreach (var uid in inbox.Search(SearchQuery.NotSeen))
     {
         var message = inbox.GetMessage(uid);
         notseen.Add(message);
     }
     foreach (var uid in inbox.Search(SearchQuery.Seen))
     {
         var message = inbox.GetMessage(uid);
         seen.Add(message);
     }
     msg = unSorted;
     return(new List <MimeMessage>(msg));
 }
예제 #20
0
        public IList <MimeMessage> GetMessages(IMailFolder folder)
        {
            folder.Open(FolderAccess.ReadOnly);
            List <MimeMessage> mimeMessages = new List <MimeMessage>(folder.Count);

            for (int i = 0; i < folder.Count; i++)
            {
                mimeMessages.Add(folder.GetMessage(i));
            }
            return(mimeMessages);
        }
        /// <summary>
        /// Uses the given indices to extract messages from provided inbox, returning a list of messages
        /// </summary>
        /// <param name="emails">Mail folder of emails</param>
        /// <param name="ids">List of unique ids of emails to be extracted</param>
        /// <returns></returns>
        public static List <MimeMessage> ExtractMessages(IMailFolder emails, IList <UniqueId> ids)
        {
            List <MimeMessage> messages = new List <MimeMessage>();

            foreach (UniqueId id in ids)
            {
                messages.Add(emails.GetMessage(id));
            }

            return(messages);
        }
예제 #22
0
        public Tuple <IList <Mail>, HttpStatusCode> GetMailsFromFolder(string folder, int page, int pageSize, string sortOrder)
        {
            if (!IsAuthenticated())
            {
                return(new Tuple <IList <Mail>, HttpStatusCode>(null, HttpStatusCode.ExpectationFailed));
            }
            if (folder != _currentFolder)
            {
                reloadMessages(folder);
            }
            List <Mail> Mails = new List <Mail>();

            if (_currentFolderSummary == null)
            {
                _currentFolderSummary = new List <IMessageSummary>();
            }
            switch (sortOrder)
            {
            case "dateAsc":
                _currentFolderSummary = _currentFolderSummary.OrderBy(mail => mail.Date.DateTime);
                break;

            case "subjectDesc":
                _currentFolderSummary = _currentFolderSummary.OrderByDescending(mail => mail.NormalizedSubject);
                break;

            case "subjectAsc":
                _currentFolderSummary = _currentFolderSummary.OrderBy(mail => mail.NormalizedSubject);
                break;

            case "senderDesc":
                _currentFolderSummary = _currentFolderSummary.OrderByDescending(mail => mail.Envelope.From[0]);
                break;

            case "senderAsc":
                _currentFolderSummary = _currentFolderSummary.OrderBy(mail => mail.Envelope.From[0]);
                break;

            default:
                _currentFolderSummary = _currentFolderSummary.OrderByDescending(mail => mail.Date.DateTime);
                break;
            }
            IMailFolder mailFolder = GetFolder(folder);

            mailFolder.Open(FolderAccess.ReadWrite);
            foreach (var mail in _currentFolderSummary.Skip((page - 1) * pageSize).Take(pageSize))
            {
                Mails.Add(new Mail((MessageSummary)mail, mailFolder.GetMessage(mail.UniqueId), folder));
            }

            mailFolder.Close();
            return(new Tuple <IList <Mail>, HttpStatusCode>(Mails, HttpStatusCode.OK));
        }
예제 #23
0
파일: Mail.cs 프로젝트: Bitz/OwO_Bot
        private static string CheckMail(long postId, IMailFolder inbox, UniqueIdRange range,
                                        BinarySearchQuery query)
        {
            string result = string.Empty;

            foreach (UniqueId uid in inbox.Search(range, query))
            {
                var message = inbox.GetMessage(uid);
                result = message.TextBody.Split('\r', '\n').FirstOrDefault();

                if (!string.IsNullOrEmpty(result))
                {
                    inbox.AddFlags(uid, MessageFlags.Seen, true);
                }

                if (result != null && result.ToLower().ToLower() == "cancel")
                {
                    C.WriteLine("We won't be proceeding with this post...");
                    DbBlackList dbBlackList = new DbBlackList();
                    Blacklist   item        = new Blacklist
                    {
                        Subreddit   = WorkingSub,
                        PostId      = postId,
                        CreatedDate = DateTime.Now
                    };
                    dbBlackList.AddToBlacklist(item);
                    Environment.Exit(0);
                }
                else if (result != null && result.ToLower().ToLower() == "next")
                {
                    C.WriteLine("We won't be proceeding with this post...");
                    DbBlackList dbBlackList = new DbBlackList();
                    Blacklist   item        = new Blacklist
                    {
                        Subreddit   = WorkingSub,
                        PostId      = postId,
                        CreatedDate = DateTime.Now
                    };

                    dbBlackList.AddToBlacklist(item);
                    Process.Start(Assembly.GetExecutingAssembly().Location, Args.FirstOrDefault());
                    Environment.Exit(0);
                }
                else
                {
                    C.WriteLineNoTime("We got a title!");
                }
                break;
            }

            return(result);
        }
        public static void Analyze(IMailFolder folder, LearningDataSet result) {
            var messages = folder.Search(SearchQuery.All);

            if (messages.Count > 0) {
                foreach (var messageUid in messages) {
                    var message = folder.GetMessage(messageUid);

                    AnalyzeMessage(message, result);
                }
            }

            result.LastUpdate = DateTime.Now;
        }
예제 #25
0
        public void GetAllMailsByFolder(IProgress <MimeMessage> progress, String selectedFolder)
        {
            var messages = new List <MimeMessage>();

            using (var client = new ImapClient())
            {
                try
                {
                    client.Connect(mailServer, port, ssl);
                    client.AuthenticationMechanisms.Remove("XOAUTH2");
                    client.Authenticate(login, password);

                    var mainEmailFolder = client.GetFolder(client.PersonalNamespaces[0]);
                    emailFolders = mainEmailFolder.GetSubfolders().ToList();
                    IMailFolder inbox = null;

                    foreach (var folder in emailFolders)
                    {
                        if (folder.FullName == selectedFolder)
                        {
                            inbox = folder;
                        }
                    }
                    inbox.Open(FolderAccess.ReadOnly);
                    var results      = inbox.Search(SearchOptions.All, SearchQuery.All);
                    int emailCounter = results.UniqueIds.Count;
                    if (emailCounter > 50)
                    {
                        emailCount = 50;
                    }
                    else
                    {
                        emailCount = results.UniqueIds.Count;
                    }

                    for (int i = emailCounter - 1; i >= emailCounter - emailCount; i--)
                    {
                        var message = inbox.GetMessage(results.UniqueIds[i]);
                        progress.Report(message);
                        messages.Add(message);
                    }

                    client.Disconnect(true);
                }
                catch (AuthenticationException)
                {
                    MessageBox.Show("Wrong username or password.");
                }
            }
        }
예제 #26
0
        static void fetch_incoming_messages()
        {
            using (var client = new ImapClient())
            {
                try
                {
                    bd_util.log("fetch_incoming_messages Connecting to Imap");
                    client.Connect(
                        bd_config.get(bd_config.ImapHost),
                        bd_config.get(bd_config.ImapPort),
                        true); // ssl

                    client.Authenticate(
                        bd_config.get(bd_config.ImapUser),
                        bd_config.get(bd_config.ImapPassword)
                        );

                    // The Inbox folder is always available on all IMAP servers...
                    IMailFolder inbox = client.Inbox;
                    inbox.Open(FolderAccess.ReadWrite);

                    bd_util.log("Total messages: " + inbox.Count.ToString());
                    bd_util.log("Recent messages: " + inbox.Recent.ToString());

                    for (int index = 0; index < inbox.Count; index++)
                    {
                        var  message   = inbox.GetMessage(index);
                        bool processed = process_incoming_message(message);
                        if (processed)
                        {
                            // delete it
                            if (bd_config.get(bd_config.DebugSkipDeleteOfIncomingEmails) == 0)
                            {
                                bd_util.log("Actually deleting: " + message.Subject);
                                inbox.AddFlags(index, MessageFlags.Deleted, true);
                                client.Inbox.Expunge();
                            }
                        }
                    }

                    client.Disconnect(true);
                    bd_util.log("Disconnecting from Imap");
                }
                catch (Exception exception)
                {
                    bd_util.log(exception.Message);
                    bd_util.log(exception.StackTrace);
                }
            }
        }
예제 #27
0
        protected override void Execute(CodeActivityContext context)
        {
            string      username        = Email.Get(context);          //发送端账号
            string      password        = Password.Get(context);       //发送端密码(这个客户端重置后的密码)
            string      server          = Server.Get(context);         //邮件服务器
            Int32       port            = Port.Get(context);           //端口号
            string      mailFolderTo    = MailFolderTo.Get(context);   //目标文件夹
            string      mailFolderFrom  = MailFolderFrom.Get(context); //源文件夹
            MimeMessage mailMoveMessage = MailMoveMessage.Get(context);

            ImapClient  client = new ImapClient();
            SearchQuery query;

            try
            {
                client.Connect(server, port, SecureConnection);
                client.Authenticate(username, password);

                if (EnableSSL)
                {
                    client.SslProtocols = System.Security.Authentication.SslProtocols.Ssl3;
                }

                query = SearchQuery.All;
                List <IMailFolder> mailFolderList = client.GetFolders(client.PersonalNamespaces[0]).ToList();
                IMailFolder        fromFolder     = client.GetFolder(mailFolderFrom);
                IMailFolder        toFolder       = client.GetFolder(mailFolderTo);
                fromFolder.Open(FolderAccess.ReadWrite);
                IList <UniqueId>   uidss  = fromFolder.Search(query);
                List <MailMessage> emails = new List <MailMessage>();
                for (int i = uidss.Count - 1; i >= 0; i--)
                {
                    MimeMessage message = fromFolder.GetMessage(new UniqueId(uidss[i].Id));
                    if (message.Date == mailMoveMessage.Date &&
                        message.MessageId == mailMoveMessage.MessageId &&
                        message.Subject == mailMoveMessage.Subject)
                    {
                        fromFolder.MoveTo(new UniqueId(uidss[i].Id), toFolder);
                        break;
                    }
                }
                client.Disconnect(true);
            }
            catch (Exception e)
            {
                client.Disconnect(true);
                SharedObject.Instance.Output(SharedObject.enOutputType.Error, "IMAP移动邮件失败", e.Message);
            }
        }
예제 #28
0
        public List <MailItem> ExtractMailItems(IMailFolder folder, int pageSize, int page, List <uint> existingUids)
        {
            try
            {
                using (var client = new ImapClient())
                {
                    Connect(client);
                    if (!folder.IsOpen)
                    {
                        logger.LogTrace("Open Folder");
                        folder.Open(FolderAccess.ReadOnly);
                    }

                    logger.LogInformation($"Fetch summaries [{folder.FullName}] - \tPage: {page} - Page Size: {pageSize}");
                    var summaries = folder.Fetch(page * pageSize, (page + 1) * pageSize - 1, MessageSummaryItems.UniqueId);
                    logger.LogInformation($"Got summaries [{folder.FullName}] - Count: {summaries.Count}");

                    if (summaries.Count == 0)
                    {
                        return(null);
                    }

                    var result = new List <MailItem>();
                    logger.LogTrace("Extract Mail Addresses");

                    foreach (var summary in summaries)
                    {
                        if (!existingUids.Contains(summary.UniqueId.Id))
                        {
                            var message = folder.GetMessage(summary.UniqueId);
                            result.AddRange(CreateMailItems(logger, message, this, folder, summary.UniqueId));
                        }
                    }

                    if (folder.IsOpen)
                    {
                        logger.LogTrace("Close Folder");
                        folder.Close(false);
                    }

                    return(result);
                }
            }
            catch (Exception e)
            {
                logger.LogError(e, $"Error in folder: {folder.FullName} \r\n {e.Message}");
                return(null);
            }
        }
예제 #29
0
        private void button1_Click(object sender, EventArgs e)
        {
            ImapClient client   = new ImapClient();
            string     account  = "*****@*****.**";
            string     passWord = "******";


            client.Connect("imap.qiye.163.com", 993, true);
            //client.Authenticate("*****@*****.**", "TNL7EtuUVJ5mRNcw");

            client.Authenticate(account, passWord);

            IMailFolder inbox = client.Inbox;

            inbox.Open(FolderAccess.ReadWrite);


            IList <UniqueId> mail_list = inbox.Search(SearchQuery.New);

            foreach (UniqueId item in mail_list)
            {
                //得到邮件的内容
                MimeMessage message = inbox.GetMessage(item);

                foreach (MimeEntity attachment in message.Attachments)
                {
                    MimePart mime = (MimePart)attachment;

                    Console.WriteLine(mime.FileName);
                    string fileName = mime.FileName;
                    if (mime.FileName.Contains(".xls"))
                    {
                        try
                        {
                            using (FileStream stream = File.Create(fileName))
                            {
                                mime.Content.DecodeTo(stream);
                            }
                        }
                        catch
                        {
                            continue;
                        }
                    }

                    // client.Inbox.SetFlags(item, MessageFlags.Seen,false);
                }
            }
        }
예제 #30
0
        /// <summary>
        /// download a mail's attachments
        /// </summary>
        /// <param name="folder">file folder</param>
        /// <param name="id">mail uid</param>
        /// <returns>file's stream</returns>
        private Stream Download(IMailFolder folder, UniqueId id)
        {
            Stream      stream  = new MemoryStream();
            MimeMessage message = folder.GetMessage(id);

            foreach (MimePart attachment in message.Attachments)
            {
                //下载附件
                using (var cancel = new CancellationTokenSource())
                {
                    attachment.Content.DecodeTo(stream, cancel.Token);
                    return(stream);
                }
            }
            return(stream);
        }
예제 #31
0
        public WrappedMessage(ImapClient client, IMailFolder inbox, int index, List <string> filters)
        {
            this.Client  = client;
            this.Inbox   = inbox;
            this.Index   = index;
            this.Filters = filters;

            Message = inbox.GetMessage(index);

            SenderAddress = Message.From.Mailboxes.FirstOrDefault()?.Address;
            SenderName    = Message.From.Mailboxes.FirstOrDefault()?.Name;

            MailAddress senderAddressObj = new MailAddress(SenderAddress ?? string.Empty);

            Host = senderAddressObj.Host;
        }
        private void ProcessRules(IMailFolder inbox) {
            inbox.Open(FolderAccess.ReadWrite);
            inbox.Status(StatusItems.Unread);

            if (inbox.Unread > 0) {
                var unreadMessageUids = inbox.Search(SearchQuery.NotSeen);
                var toMove = new Dictionary<string, List<UniqueId>>();
                var markAsRead = new List<UniqueId>();

                // process unread messages
                foreach (var unreadMessageUid in unreadMessageUids) {
                    var message = inbox.GetMessage(unreadMessageUid);

                    var matchingRule = GetMatchingRule(message);
                    if (matchingRule != null) {
                        if (!toMove.ContainsKey(matchingRule.Destination)) {
                            toMove.Add(matchingRule.Destination, new List<UniqueId>());
                        }

                        toMove[matchingRule.Destination].Add(unreadMessageUid);

                        if (matchingRule.MarkAsRead) {
                            markAsRead.Add(unreadMessageUid);
                        }
                    }
                }

                // mark as read
                if (markAsRead.Any()) {
                    inbox.AddFlags(markAsRead, MessageFlags.Seen, true);
                }

                // move to destination
                if (toMove.Any()) {
                    foreach (var destination in toMove.Keys) {
                        inbox.MoveTo(toMove[destination], inbox.GetSubfolder(destination));
                    }
                }
            }
        }