public int LoadSampleMessage( int?folderId, int?mailboxId, bool unread, Stream emlStream) { if (!folderId.HasValue) { folderId = MailFolder.Ids.inbox; } if (folderId < MailFolder.Ids.inbox || folderId > MailFolder.Ids.spam) { throw new ArgumentException(@"Invalid folder id", "folderId"); } if (!mailboxId.HasValue) { throw new ArgumentException(@"Invalid mailbox id", "mailboxId"); } var accounts = MailBoxManager.GetAccountInfo(TenantId, Username).ToAddressData(); var account = mailboxId.HasValue ? accounts.FirstOrDefault(a => a.MailboxId == mailboxId) : accounts.FirstOrDefault(a => a.IsDefault) ?? accounts.FirstOrDefault(); if (account == null) { throw new ArgumentException("Mailbox not found"); } var mbox = MailBoxManager.GetUnremovedMailBox(account.MailboxId); if (mbox == null) { throw new ArgumentException("no such mailbox"); } var mimeMessage = MailClient.ParseMimeMessage(emlStream); var message = MailRepository.Save(mbox, mimeMessage, SAMPLE_UIDL, new MailFolder(folderId.Value, ""), unread, _log); if (message == null) { return(-1); } return((int)message.Id); }
private void ClientOnGetMessage(object sender, MailClientMessageEventArgs mailClientMessageEventArgs) { var log = _log; Stopwatch watch = null; if (_tasksConfig.CollectStatistics) { watch = new Stopwatch(); watch.Start(); } var failed = false; var mailbox = mailClientMessageEventArgs.Mailbox; try { var mimeMessage = mailClientMessageEventArgs.Message; var uid = mailClientMessageEventArgs.MessageUid; var folder = mailClientMessageEventArgs.Folder; var unread = mailClientMessageEventArgs.Unread; log = mailClientMessageEventArgs.Logger; log.Debug("ClientOnGetMessage MailboxId = {0}, Address = '{1}'", mailbox.MailBoxId, mailbox.EMail); CoreContext.TenantManager.SetCurrentTenant(mailbox.TenantId); SecurityContext.AuthenticateMe(new Guid(mailbox.UserId)); var uidl = mailbox.Imap ? string.Format("{0}-{1}", uid, folder.FolderId) : uid; var message = MailRepository.Save(mailbox, mimeMessage, uidl, folder, unread, log); if (message != null && message.Id > 0) { log.Debug("DoOptionalOperations->START"); List <int> tagsIds = null; if (folder.Tags.Any()) { log.Debug("GetOrCreateTags()"); var manager = new MailBoxManager(log); tagsIds = manager.GetOrCreateTags(mailbox.TenantId, mailbox.UserId, folder.Tags); } DoOptionalOperations(message, mimeMessage, mailbox, tagsIds, log); } } catch (Exception ex) { log.Error("[ClientOnGetMessage] Exception:\r\n{0}\r\n", ex.ToString()); failed = true; } finally { if (_tasksConfig.CollectStatistics && watch != null) { watch.Stop(); LogStat(PROCESS_MESSAGE, mailbox, watch.Elapsed, failed); } } }