예제 #1
0
        private MailMessageItem SaveToDraft(MailSendItem original_message, int mail_id, MailBox mbox)
        {
            original_message.DisplayName = mbox.Name;
            var embeded_attachments_for_saving = original_message.ChangeEmbededAttachmentLinksForStoring(mbox.TenantId, mbox.UserId, mail_id, manager);
            var message_item = original_message.ToMailMessageItem(mbox.TenantId, mbox.UserId);

            message_item.IsNew  = false;
            message_item.Folder = MailFolder.Ids.drafts;

            message_item.ChainId = message_item.MimeMessageId;

            var need_to_restore_attachments_from_fck_location = mail_id == 0 && message_item.Attachments.Any();

            if (need_to_restore_attachments_from_fck_location)
            {
                message_item.Attachments.ForEach(attachment => manager.StoreAttachmentCopy(mbox.TenantId, mbox.UserId, attachment, original_message.StreamId));
            }

            manager.StoreMailBody(mbox.TenantId, mbox.UserId, message_item);

            var previous_mailbox_id = mail_id == 0
                                          ? mbox.MailBoxId
                                          : manager.GetMailInfo(mbox.TenantId, mbox.UserId, mail_id, false, false).MailboxId;

            mail_id         = manager.MailSave(mbox, message_item, mail_id, message_item.Folder, message_item.Folder, string.Empty, string.Empty, false);
            message_item.Id = mail_id;

            if (previous_mailbox_id != mbox.MailBoxId)
            {
                manager.UpdateChain(message_item.ChainId, message_item.Folder, previous_mailbox_id, mbox.TenantId, mbox.UserId);
            }

            if (mail_id > 0 && need_to_restore_attachments_from_fck_location)
            {
                foreach (var attachment in message_item.Attachments)
                {
                    var new_id = manager.SaveAttachment(mbox.TenantId, mail_id, attachment);
                    attachment.fileId = new_id;
                }
            }

            if (mail_id > 0 && embeded_attachments_for_saving.Any())
            {
                manager.SaveAttachments(mbox.TenantId, mail_id, embeded_attachments_for_saving);
            }

            manager.UpdateChain(message_item.ChainId, message_item.Folder, mbox.MailBoxId, mbox.TenantId, mbox.UserId);

            if (previous_mailbox_id != mbox.MailBoxId)
            {
                manager.UpdateCrmLinkedMailboxId(message_item.ChainId, mbox.TenantId, previous_mailbox_id, mbox.MailBoxId);
            }

            return(message_item);
        }
예제 #2
0
        private MailMessageItem SaveToDraft(int tenant_id, string username, MailSendItem item, int mail_id,
                                            out string mime_message_id, out string in_reply_to, MailBox mbox)
        {
            item.DisplayName = mbox.Name;
            var embeded_attachments_for_saving = item.ChangeEmbededAttachmentLinksForStoring(tenant_id, username, mail_id, _manager);
            var message_item = item.ToMailMessageItem(tenant_id, username);

            message_item.IsNew  = false;
            message_item.Folder = MailFolder.Ids.drafts;

            mime_message_id = mail_id == 0 ? _manager.CreateMessageId() : _manager.GetMimeMessageIdByMessageId(mail_id);
            in_reply_to     = item.ReplyToId != 0 ? _manager.GetMimeMessageIdByMessageId(item.ReplyToId) : "";

            if (!string.IsNullOrEmpty(mime_message_id))
            {
                message_item.MessageId = mime_message_id;
            }
            if (!string.IsNullOrEmpty(in_reply_to))
            {
                message_item.InReplyTo = in_reply_to;
            }

            message_item.ChainId = _manager.DetectChainId(mbox, message_item);

            var need_to_restore_attachments_from_fck_location = mail_id == 0 && message_item.Attachments.Any();

            if (need_to_restore_attachments_from_fck_location)
            {
                message_item.Attachments.ForEach(attachment => _manager.StoreAttachmentCopy(tenant_id, username, attachment, item.StreamId));
            }

            _manager.StoreMailBody(mbox.TenantId, mbox.UserId, message_item);

            var previous_mailbox_id = mail_id == 0
                                          ? mbox.MailBoxId
                                          : _manager.GetMailInfo(tenant_id, username, mail_id, false, false).MailboxId;

            var previous_chain_id = message_item.ChainId;

            if (previous_mailbox_id != mbox.MailBoxId)
            {
                var prev_mbox = new MailBox();
                prev_mbox.TenantId  = tenant_id;
                prev_mbox.UserId    = username;
                prev_mbox.MailBoxId = previous_mailbox_id;
                previous_chain_id   = _manager.DetectChainId(prev_mbox, message_item);
            }

            mail_id         = _manager.MailSave(mbox, message_item, mail_id, message_item.Folder, message_item.Folder, string.Empty, string.Empty, false);
            message_item.Id = mail_id;

            if (previous_mailbox_id != mbox.MailBoxId)
            {
                _manager.UpdateChain(previous_chain_id, message_item.Folder, previous_mailbox_id, tenant_id, username);
            }

            if (mail_id > 0 && need_to_restore_attachments_from_fck_location)
            {
                foreach (var attachment in message_item.Attachments)
                {
                    var new_id = _manager.SaveAttachment(tenant_id, mail_id, attachment);
                    attachment.fileId = new_id;
                }
            }

            if (mail_id > 0 && embeded_attachments_for_saving.Any())
            {
                _manager.SaveAttachments(tenant_id, mail_id, embeded_attachments_for_saving);
            }

            _manager.UpdateChain(message_item.ChainId, message_item.Folder, mbox.MailBoxId, mbox.TenantId, mbox.UserId);

            return(message_item);
        }