public static MailMessage CreateMailMessage(this MimeMessage message, int folder = 1, bool unread = false, string chainId = "", string streamId = "", ILogger log = null) { var mail = new MailMessage(); if (message == null) { throw new ArgumentNullException("message"); } log = log ?? new NullLogger(); mail.Date = MailUtil.IsDateCorrect(message.Date.UtcDateTime) ? message.Date.UtcDateTime : DateTime.UtcNow; mail.MimeMessageId = (string.IsNullOrEmpty(message.MessageId) ? MailUtil.CreateMessageId() : message.MessageId) .Trim(new[] { '<', '>' }); mail.ChainId = string.IsNullOrEmpty(chainId) ? mail.MimeMessageId : chainId; mail.MimeReplyToId = mail.ChainId.Equals(mail.MimeMessageId) ? null : message.InReplyTo.Trim('<', '>'); mail.ReplyTo = message.ReplyTo.ToString(); mail.From = message.From.ToString(); mail.FromEmail = message.From != null && message.From.Mailboxes != null && message.From.Mailboxes.Any() ? message.From.Mailboxes.First().Address : ""; mail.ToList = message.To.Mailboxes.Select(s => new MailAddress(s.Address, s.Name)).ToList(); mail.To = string.Join(", ", message.To.Mailboxes.Select(s => s.ToString())); mail.CcList = message.Cc.Mailboxes.Select(s => new MailAddress(s.Address, s.Name)).ToList(); mail.Cc = string.Join(", ", message.Cc.Mailboxes.Select(s => s.ToString())); mail.Bcc = string.Join(", ", message.Bcc.Mailboxes.Select(s => s.ToString())); mail.Subject = message.Subject ?? string.Empty; mail.Important = message.Importance == MessageImportance.High || message.Priority == MessagePriority.Urgent; mail.TextBodyOnly = false; mail.Introduction = ""; mail.Attachments = new List <MailAttachment>(); mail.HtmlBodyStream = new MemoryStream(); mail.ExtractMainParts(message); mail.Size = mail.HtmlBodyStream.Length > 0 ? mail.HtmlBodyStream.Length : mail.HtmlBody.Length; mail.HeaderFieldNames = new NameValueCollection(); message.Headers .ToList() .ForEach(h => mail.HeaderFieldNames.Add(h.Field, h.Value)); mail.Folder = folder; mail.IsNew = unread; mail.StreamId = string.IsNullOrEmpty(streamId) ? MailUtil.CreateStreamId() : streamId; mail.LoadCalendarInfo(message, log); return(mail); }
public MailMessage(MimeMessage message, int folder = 1, bool unread = false, string chainId = "", string streamId = "") { if (message == null) { throw new ArgumentNullException("message"); } Date = IsDateCorrect(message.Date.UtcDateTime) ? message.Date.UtcDateTime : DateTime.UtcNow; MimeMessageId = (string.IsNullOrEmpty(message.MessageId) ? MailUtil.CreateMessageId() : message.MessageId) .Trim(new[] { '<', '>' }); ChainId = string.IsNullOrEmpty(chainId) ? MimeMessageId : chainId; MimeReplyToId = ChainId.Equals(MimeMessageId) ? null : message.InReplyTo.Trim('<', '>'); ReplyTo = message.ReplyTo.ToString(); From = message.From.ToString(); FromEmail = message.From != null && message.From.Mailboxes != null && message.From.Mailboxes.Any() ? message.From.Mailboxes.First().Address : ""; ToList = message.To.Mailboxes.Select(s => new MailAddress(s.Address, s.Name)).ToList(); To = string.Join(", ", message.To.Mailboxes.Select(s => s.ToString())); CcList = message.Cc.Mailboxes.Select(s => new MailAddress(s.Address, s.Name)).ToList(); Cc = string.Join(", ", message.Cc.Mailboxes.Select(s => s.ToString())); Bcc = string.Join(", ", message.Bcc.Mailboxes.Select(s => s.ToString())); Subject = message.Subject ?? string.Empty; Important = message.Importance == MessageImportance.High || message.Priority == MessagePriority.Urgent; TextBodyOnly = false; Introduction = ""; Attachments = new List <MailAttachment>(); HtmlBodyStream = new MemoryStream(); ExtractMainParts(message); Size = HtmlBodyStream.Length > 0 ? HtmlBodyStream.Length : HtmlBody.Length; HeaderFieldNames = new NameValueCollection(); message.Headers .ToList() .ForEach(h => HeaderFieldNames.Add(h.Field, h.Value)); Folder = folder; IsNew = unread; StreamId = string.IsNullOrEmpty(streamId) ? MailUtil.CreateStreamId() : streamId; LoadCalendarInfo(message); }
public static MailMessage CreateCorruptedMesage(this MimeMessage message, int folder = 1, bool unread = false, string chainId = "", string streamId = "") { var mailMessage = new MailMessage { HasParseError = true }; MailUtil.SkipErrors(() => mailMessage.Date = MailUtil.IsDateCorrect(message.Date.UtcDateTime) ? message.Date.UtcDateTime : DateTime.UtcNow); MailUtil.SkipErrors(() => mailMessage.MimeMessageId = (string.IsNullOrEmpty(message.MessageId) ? MailUtil.CreateMessageId() : message.MessageId) .Trim('<', '>')); MailUtil.SkipErrors(() => mailMessage.ChainId = string.IsNullOrEmpty(chainId) ? mailMessage.MimeMessageId : chainId); MailUtil.SkipErrors(() => mailMessage.MimeReplyToId = mailMessage.ChainId.Equals(mailMessage.MimeMessageId) ? null : message.InReplyTo.Trim('<', '>')); MailUtil.SkipErrors(() => mailMessage.ReplyTo = message.ReplyTo.ToString()); MailUtil.SkipErrors(() => mailMessage.From = message.From.ToString()); MailUtil.SkipErrors(() => mailMessage.FromEmail = message.From != null && message.From.Mailboxes != null && message.From.Mailboxes.Any() ? message.From.Mailboxes.First().Address : ""); MailUtil.SkipErrors(() => mailMessage.ToList = message.To.Mailboxes.Select(s => MailUtil.ExecuteSafe(() => new MailAddress(s.Address, s.Name))).ToList()); MailUtil.SkipErrors(() => mailMessage.To = string.Join(", ", message.To.Mailboxes.Select(s => s.ToString()))); MailUtil.SkipErrors(() => mailMessage.CcList = message.Cc.Mailboxes.Select(s => MailUtil.ExecuteSafe(() => new MailAddress(s.Address, s.Name))).ToList()); MailUtil.SkipErrors(() => mailMessage.Cc = string.Join(", ", message.Cc.Mailboxes.Select(s => s.ToString()))); MailUtil.SkipErrors(() => mailMessage.Bcc = string.Join(", ", message.Bcc.Mailboxes.Select(s => s.ToString()))); MailUtil.SkipErrors(() => mailMessage.Subject = message.Subject ?? string.Empty); MailUtil.SkipErrors(() => mailMessage.Important = message.Importance == MessageImportance.High || message.Priority == MessagePriority.Urgent); mailMessage.HtmlBodyStream = new MemoryStream(); using (var sw = new StreamWriter(mailMessage.HtmlBodyStream, Encoding.UTF8, 1024, true)) { sw.Write("<body><pre> </pre></body>"); sw.Flush(); } mailMessage.Size = mailMessage.HtmlBodyStream.Length; mailMessage.HeaderFieldNames = new NameValueCollection(); message.Headers .ToList() .ForEach(h => MailUtil.SkipErrors(() => mailMessage.HeaderFieldNames.Add(h.Field, h.Value))); mailMessage.Folder = folder; mailMessage.IsNew = unread; mailMessage.StreamId = string.IsNullOrEmpty(streamId) ? MailUtil.CreateStreamId() : streamId; mailMessage.TextBodyOnly = true; mailMessage.Introduction = ""; mailMessage.Attachments = new List <MailAttachment>(); MailUtil.SkipErrors(() => { var mailAttach = new MailAttachment { contentId = null, fileName = "message.eml", contentType = "message/rfc822", contentLocation = null, dataStream = new MemoryStream() }; message.WriteTo(mailAttach.dataStream); mailAttach.size = mailAttach.dataStream.Length; mailMessage.Attachments.Add(mailAttach); }); return(mailMessage); }
public virtual MailMessage Save( int id, string from, List <string> to, List <string> cc, List <string> bcc, string mimeReplyToId, bool importance, string subject, List <int> tags, string body, List <MailAttachmentData> attachments, string calendarIcs, DeliveryFailureMessageTranslates translates = null) { var mailAddress = new MailAddress(from); var engine = new EngineFactory(Tenant, User); var accounts = engine.AccountEngine.GetAccountInfoList().ToAccountData(); var account = accounts.FirstOrDefault(a => a.Email.ToLower().Equals(mailAddress.Address)); if (account == null) { throw new ArgumentException("Mailbox not found"); } if (account.IsGroup) { throw new InvalidOperationException("Saving emails from a group address is forbidden"); } var mbox = engine.MailboxEngine.GetMailboxData( new СoncreteUserMailboxExp(account.MailboxId, Tenant, User)); if (mbox == null) { throw new ArgumentException("No such mailbox"); } string mimeMessageId, streamId; var previousMailboxId = mbox.MailBoxId; if (id > 0) { var message = engine.MessageEngine.GetMessage(id, new MailMessage.Options { LoadImages = false, LoadBody = true, NeedProxyHttp = Defines.NeedProxyHttp, NeedSanitizer = false }); if (message.Folder != FolderType.Draft) { throw new InvalidOperationException("Saving emails is permitted only in the Drafts folder"); } if (message.HtmlBody.Length > Defines.MaximumMessageBodySize) { throw new InvalidOperationException("Message body exceeded limit (" + Defines.MaximumMessageBodySize / 1024 + " KB)"); } mimeMessageId = message.MimeMessageId; streamId = message.StreamId; previousMailboxId = message.MailboxId; } else { mimeMessageId = MailUtil.CreateMessageId(); streamId = MailUtil.CreateStreamId(); } var fromAddress = MailUtil.CreateFullEmail(mbox.Name, mbox.EMail.Address); var compose = new MailDraftData(id, mbox, fromAddress, to, cc, bcc, subject, mimeMessageId, mimeReplyToId, importance, tags, body, streamId, attachments, calendarIcs) { PreviousMailboxId = previousMailboxId }; DaemonLabels = translates ?? DeliveryFailureMessageTranslates.Defauilt; return(Save(compose)); }
public MailMessage SaveMessage(int id, string from, List <string> to, List <string> cc, List <string> bcc, string mimeReplyToId, bool importance, string subject, List <int> tags, string body, List <MailAttachment> attachments, string calendarIcs) { if (id < 1) { id = 0; } if (string.IsNullOrEmpty(from)) { throw new ArgumentNullException("from"); } Thread.CurrentThread.CurrentCulture = CurrentCulture; Thread.CurrentThread.CurrentUICulture = CurrentCulture; var mailAddress = new MailAddress(from); var accounts = MailBoxManager.GetAccountInfo(TenantId, Username).ToAddressData(); var account = accounts.FirstOrDefault(a => a.Email.ToLower().Equals(mailAddress.Address)); if (account == null) { throw new ArgumentException("Mailbox not found"); } if (account.IsGroup) { throw new InvalidOperationException("Saving emails from a group address is forbidden"); } var mbox = MailBoxManager.GetUnremovedMailBox(account.MailboxId); if (mbox == null) { throw new ArgumentException("no such mailbox"); } string mimeMessageId, streamId; var previousMailboxId = mbox.MailBoxId; if (id > 0) { var message = GetMessage(id, false, false, false); if (message.Folder != MailFolder.Ids.drafts) { throw new InvalidOperationException("Saving emails is permitted only in the Drafts folder"); } mimeMessageId = message.MimeMessageId; streamId = message.StreamId; foreach (var attachment in attachments) { attachment.streamId = streamId; } previousMailboxId = message.MailboxId; } else { mimeMessageId = MailUtil.CreateMessageId(); streamId = MailUtil.CreateStreamId(); } var fromAddress = MailUtil.CreateFullEmail(mbox.Name, mbox.EMail.Address); var draft = new MailDraft(id, mbox, fromAddress, to, cc, bcc, subject, mimeMessageId, mimeReplyToId, importance, tags, body, streamId, attachments, calendarIcs) { PreviousMailboxId = previousMailboxId }; try { var draftsManager = new DraftManager(MailBoxManager, Logger); return(draftsManager.Save(draft)); } catch (DraftException ex) { string fieldName; switch (ex.FieldType) { case DraftFieldTypes.From: fieldName = MailApiResource.FieldNameFrom; break; default: fieldName = ""; break; } switch (ex.ErrorType) { case DraftException.ErrorTypes.IncorrectField: throw new ArgumentException(MailApiResource.ErrorIncorrectEmailAddress.Replace("%1", fieldName)); case DraftException.ErrorTypes.EmptyField: throw new ArgumentException(MailApiResource.ErrorEmptyField.Replace("%1", fieldName)); default: throw; } } }
public long SendMessage(int id, string from, List <string> to, List <string> cc, List <string> bcc, string mimeReplyToId, bool importance, string subject, List <int> tags, string body, List <MailAttachment> attachments, FileShare fileLinksShareMode, string calendarIcs, bool isAutoreply) { if (id < 1) { id = 0; } if (string.IsNullOrEmpty(from)) { throw new ArgumentNullException("from"); } if (!to.Any()) { throw new ArgumentNullException("to"); } var mailAddress = new MailAddress(from); var accounts = MailBoxManager.GetAccountInfo(TenantId, Username).ToAddressData(); var account = accounts.FirstOrDefault(a => a.Email.ToLower().Equals(mailAddress.Address)); if (account == null) { throw new ArgumentException("Mailbox not found"); } if (account.IsGroup) { throw new InvalidOperationException("Sending emails from a group address is forbidden"); } var mbox = MailBoxManager.GetUnremovedMailBox(account.MailboxId); if (mbox == null) { throw new ArgumentException("no such mailbox"); } if (!mbox.Enabled) { throw new InvalidOperationException("Sending emails from a disabled account is forbidden"); } string mimeMessageId, streamId; var previousMailboxId = mbox.MailBoxId; if (id > 0) { var message = GetMessage(id, false, false, false); if (message.Folder != MailFolder.Ids.drafts) { throw new InvalidOperationException("Sending emails is permitted only in the Drafts folder"); } mimeMessageId = message.MimeMessageId; streamId = message.StreamId; foreach (var attachment in attachments) { attachment.streamId = streamId; } previousMailboxId = message.MailboxId; } else { mimeMessageId = MailUtil.CreateMessageId(); streamId = MailUtil.CreateStreamId(); } var fromAddress = MailUtil.CreateFullEmail(mbox.Name, mailAddress.Address); var draft = new MailDraft(id, mbox, fromAddress, to, cc, bcc, subject, mimeMessageId, mimeReplyToId, importance, tags, body, streamId, attachments, calendarIcs) { FileLinksShareMode = fileLinksShareMode, PreviousMailboxId = previousMailboxId }; try { Thread.CurrentThread.CurrentCulture = CurrentCulture; Thread.CurrentThread.CurrentUICulture = CurrentCulture; var daemonLabels = new DraftManager.DeliveryFailureMessageTranslates( MailDaemonEmail, MailApiResource.DeliveryFailureSubject, MailApiResource.DeliveryFailureAutomaticMessage, MailApiResource.DeliveryFailureMessageIdentificator, MailApiResource.DeliveryFailureRecipients, MailApiResource.DeliveryFailureRecommendations, MailApiResource.DeliveryFailureBtn, MailApiResource.DeliveryFailureFAQInformation, MailApiResource.DeliveryFailureReason); var draftsManager = new DraftManager(MailBoxManager, Logger, daemonLabels, isAutoreply); return(draftsManager.Send(draft)); } catch (DraftException ex) { string fieldName; switch (ex.FieldType) { case DraftFieldTypes.From: fieldName = MailApiResource.FieldNameFrom; break; case DraftFieldTypes.To: fieldName = MailApiResource.FieldNameTo; break; case DraftFieldTypes.Cc: fieldName = MailApiResource.FieldNameCc; break; case DraftFieldTypes.Bcc: fieldName = MailApiResource.FieldNameBcc; break; default: fieldName = ""; break; } switch (ex.ErrorType) { case DraftException.ErrorTypes.IncorrectField: throw new ArgumentException(MailApiResource.ErrorIncorrectEmailAddress.Replace("%1", fieldName)); case DraftException.ErrorTypes.EmptyField: throw new ArgumentException(MailApiResource.ErrorEmptyField.Replace("%1", fieldName)); default: throw; } } }
public long Send(int id, string from, List <string> to, List <string> cc, List <string> bcc, string mimeReplyToId, bool importance, string subject, List <int> tags, string body, List <MailAttachmentData> attachments, Files.Core.Security.FileShare fileLinksShareMode, string calendarIcs, bool isAutoreply, bool requestReceipt, bool requestRead, DeliveryFailureMessageTranslates translates = null) { if (id < 1) { id = 0; } if (string.IsNullOrEmpty(from)) { throw new ArgumentNullException("from"); } if (!to.Any()) { throw new ArgumentNullException("to"); } var mailAddress = new MailAddress(from); var engine = new EngineFactory(Tenant, User); var accounts = engine.AccountEngine.GetAccountInfoList().ToAccountData(); var account = accounts.FirstOrDefault(a => a.Email.ToLower().Equals(mailAddress.Address)); if (account == null) { throw new ArgumentException("Mailbox not found"); } if (account.IsGroup) { throw new InvalidOperationException("Sending emails from a group address is forbidden"); } var mbox = engine.MailboxEngine.GetMailboxData( new СoncreteUserMailboxExp(account.MailboxId, Tenant, User)); if (mbox == null) { throw new ArgumentException("No such mailbox"); } if (!mbox.Enabled) { throw new InvalidOperationException("Sending emails from a disabled account is forbidden"); } string mimeMessageId, streamId; var previousMailboxId = mbox.MailBoxId; if (id > 0) { var message = engine.MessageEngine.GetMessage(id, new MailMessage.Options { LoadImages = false, LoadBody = true, NeedProxyHttp = Defines.NeedProxyHttp, NeedSanitizer = false }); if (message.Folder != FolderType.Draft && message.Folder != FolderType.Templates) { throw new InvalidOperationException("Sending emails is permitted only in the Drafts folder"); } if (message.HtmlBody.Length > Defines.MaximumMessageBodySize) { throw new InvalidOperationException("Message body exceeded limit (" + Defines.MaximumMessageBodySize / 1024 + " KB)"); } mimeMessageId = message.MimeMessageId; streamId = message.StreamId; foreach (var attachment in attachments) { attachment.streamId = streamId; } previousMailboxId = message.MailboxId; } else { mimeMessageId = MailUtil.CreateMessageId(); streamId = MailUtil.CreateStreamId(); } var fromAddress = MailUtil.CreateFullEmail(mbox.Name, mailAddress.Address); var draft = new MailDraftData(id, mbox, fromAddress, to, cc, bcc, subject, mimeMessageId, mimeReplyToId, importance, tags, body, streamId, attachments, calendarIcs) { FileLinksShareMode = fileLinksShareMode, PreviousMailboxId = previousMailboxId, RequestReceipt = requestReceipt, RequestRead = requestRead, IsAutogenerated = !string.IsNullOrEmpty(calendarIcs), IsAutoreplied = isAutoreply }; DaemonLabels = translates ?? DeliveryFailureMessageTranslates.Defauilt; return(Send(draft)); }
public MailMessage(MimeMessage message, int folder = 1, bool unread = false, string chainId = "", string streamId = "") { if (message == null) { throw new ArgumentNullException("message"); } Date = IsDateCorrect(message.Date.UtcDateTime) ? message.Date.UtcDateTime : DateTime.UtcNow; MimeMessageId = (string.IsNullOrEmpty(message.MessageId) ? MailUtil.CreateMessageId() : message.MessageId) .Trim(new[] { '<', '>' }); ChainId = string.IsNullOrEmpty(chainId) ? MimeMessageId : chainId; MimeReplyToId = ChainId.Equals(MimeMessageId) ? null : message.InReplyTo.Trim(new[] { '<', '>' }); ReplyTo = message.ReplyTo.ToString(); From = message.From.ToString(); FromEmail = message.From != null && message.From.Mailboxes != null && message.From.Mailboxes.Any() ? message.From.Mailboxes.First().Address : ""; ToList = message.To.Mailboxes.Select(s => new MailAddress(s.Address, s.Name)).ToList(); To = string.Join(", ", message.To.Mailboxes.Select(s => s.ToString())); CcList = message.Cc.Mailboxes.Select(s => new MailAddress(s.Address, s.Name)).ToList(); Cc = string.Join(", ", message.Cc.Mailboxes.Select(s => s.ToString())); Bcc = string.Join(", ", message.Bcc.Mailboxes.Select(s => s.ToString())); Subject = message.Subject ?? string.Empty; Important = message.Importance == MessageImportance.High || message.Priority == MessagePriority.Urgent; TextBodyOnly = false; if (message.HtmlBody == null && message.TextBody == null) { HtmlBody = ""; Introduction = ""; IsBodyCorrupted = true; var messagePart = new MessagePart { Message = message, ContentDisposition = new ContentDisposition { FileName = "message.eml" } }; LoadAttachments(new List <MimeEntity> { messagePart }); } else { SetHtmlBodyAndIntroduction(message); } Size = HtmlBody.Length; HeaderFieldNames = new NameValueCollection(); if (message.Headers.Any()) { foreach (var header in message.Headers) { HeaderFieldNames.Add(header.Field, header.Value); } } Folder = folder; IsNew = unread; StreamId = string.IsNullOrEmpty(streamId) ? MailUtil.CreateStreamId() : streamId; LoadAttachments(message.Attachments); LoadEmbeddedAttachments(message); LoadCalendarInfo(message); }
public int CreateSampleMessage( int?folderId, int?mailboxId, List <string> to, List <string> cc, List <string> bcc, bool importance, bool unread, string subject, string body, string calendarUid = null, DateTime?date = null, List <int> tagIds = null, string fromAddress = null, bool add2Index = false, string mimeMessageId = null, uint?userFolderId = null) { var folder = folderId.HasValue ? (FolderType)folderId.Value : FolderType.Inbox; if (!MailFolder.IsIdOk(folder)) { throw new ArgumentException(@"Invalid folder id", "folderId"); } if (!mailboxId.HasValue) { throw new ArgumentException(@"Invalid mailbox id", "mailboxId"); } var accounts = _engineFactory.AccountEngine.GetAccountInfoList().ToAccountData().ToList(); 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 = _engineFactory.MailboxEngine.GetMailboxData( new СoncreteUserMailboxExp(account.MailboxId, TenantId, Username)); if (mbox == null) { throw new ArgumentException("no such mailbox"); } var internalId = string.IsNullOrEmpty(mimeMessageId) ? MailUtil.CreateMessageId() : mimeMessageId; var restoreFolder = folder == FolderType.Spam || folder == FolderType.Trash ? FolderType.Inbox : folder; string sampleBody; string sampleIntro; if (!to.Any()) { to = new List <string> { mbox.EMail.Address }; } if (!string.IsNullOrEmpty(body)) { sampleBody = body; sampleIntro = MailUtil.GetIntroduction(body); } else { sampleBody = LOREM_IPSUM_BODY; sampleIntro = LOREM_IPSUM_INTRO; } var sampleMessage = new MailMessage { Date = date ?? DateTime.UtcNow, MimeMessageId = internalId, MimeReplyToId = null, ChainId = internalId, ReplyTo = "", To = string.Join(", ", to.ToArray()), Cc = cc.Any() ? string.Join(", ", cc.ToArray()) : "", Bcc = bcc.Any() ? string.Join(", ", bcc.ToArray()) : "", Subject = string.IsNullOrEmpty(subject) ? LOREM_IPSUM_SUBJECT : subject, Important = importance, TextBodyOnly = false, Attachments = new List <MailAttachmentData>(), Size = sampleBody.Length, MailboxId = mbox.MailBoxId, HtmlBody = sampleBody, Introduction = sampleIntro, Folder = folder, RestoreFolderId = restoreFolder, IsNew = unread, StreamId = MailUtil.CreateStreamId(), CalendarUid = calendarUid }; if (!string.IsNullOrEmpty(fromAddress)) { var from = Parser.ParseAddress(fromAddress); sampleMessage.From = from.ToString(); sampleMessage.FromEmail = from.Email; } else { sampleMessage.From = MailUtil.CreateFullEmail(mbox.Name, mbox.EMail.Address); sampleMessage.FromEmail = mbox.EMail.Address; } if (tagIds != null && tagIds.Any()) { sampleMessage.TagIds = tagIds; } MessageEngine.StoreMailBody(mbox, sampleMessage, Log); var id = _engineFactory.MessageEngine.MailSave(mbox, sampleMessage, 0, folder, restoreFolder, userFolderId, SAMPLE_UIDL, "", false); if (!add2Index) { return(id); } var message = _engineFactory.MessageEngine.GetMessage(id, new MailMessageData.Options()); message.IsNew = unread; var wrapper = message.ToMailWrapper(mbox.TenantId, new Guid(mbox.UserId)); _engineFactory.IndexEngine.Add(wrapper); return(id); }
public int CreateReplyToSampleMessage(int id, string body, bool add2Index = false) { var message = _engineFactory.MessageEngine.GetMessage(id, new MailMessage.Options()); if (message == null) { throw new ArgumentException("Message with id not found"); } var mbox = _engineFactory.MailboxEngine.GetMailboxData( new СoncreteUserMailboxExp(message.MailboxId, TenantId, Username)); if (mbox == null) { throw new ArgumentException("Mailbox not found"); } var mimeMessageId = MailUtil.CreateMessageId(); var sampleMessage = new MailMessage { Date = DateTime.UtcNow, MimeMessageId = mimeMessageId, MimeReplyToId = message.MimeMessageId, ChainId = message.MimeMessageId, ReplyTo = message.FromEmail, To = message.FromEmail, Cc = "", Bcc = "", Subject = "Re: " + message.Subject, Important = message.Important, TextBodyOnly = false, Attachments = new List <MailAttachmentData>(), Size = body.Length, MailboxId = mbox.MailBoxId, HtmlBody = body, Introduction = body, Folder = FolderType.Sent, RestoreFolderId = FolderType.Sent, IsNew = false, StreamId = MailUtil.CreateStreamId(), From = MailUtil.CreateFullEmail(mbox.Name, mbox.EMail.Address), FromEmail = mbox.EMail.Address }; MessageEngine.StoreMailBody(mbox, sampleMessage, Log); var replyId = _engineFactory.MessageEngine.MailSave(mbox, sampleMessage, 0, FolderType.Sent, FolderType.Sent, null, SAMPLE_REPLY_UIDL, "", false); if (!add2Index) { return(replyId); } var replyMessage = _engineFactory.MessageEngine.GetMessage(replyId, new MailMessageData.Options()); var wrapper = replyMessage.ToMailWrapper(mbox.TenantId, new Guid(mbox.UserId)); _engineFactory.IndexEngine.Add(wrapper); return(replyId); }
public int CreateSampleMessage(int?folderId, int?mailboxId) { 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 < 0) { 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 mimeMessageId = MailUtil.CreateMessageId(); var restoreFolderId = folderId.Value == MailFolder.Ids.spam || folderId.Value == MailFolder.Ids.trash ? MailFolder.Ids.inbox : folderId.Value; var sampleMessage = new MailMessage { Date = DateTime.UtcNow, MimeMessageId = mimeMessageId, MimeReplyToId = null, ChainId = mimeMessageId, ReplyTo = "", From = mbox.EMail.ToString(), FromEmail = mbox.EMail.Address, ToList = new List <MailAddress> { mbox.EMail }, To = mbox.EMail.ToString(), CcList = new List <MailAddress>(), Cc = "", Bcc = "", Subject = LOREM_IPSUM_SUBJECT, Important = false, TextBodyOnly = false, Introduction = LOREM_IPSUM_INTRO, Attachments = new List <MailAttachment>(), HtmlBodyStream = new MemoryStream(), Size = LOREM_IPSUM_BODY.Length, MailboxId = mbox.MailBoxId, HeaderFieldNames = new NameValueCollection(), HtmlBody = LOREM_IPSUM_BODY, Folder = folderId.Value, RestoreFolderId = restoreFolderId, IsNew = true, StreamId = MailUtil.CreateStreamId() }; MailBoxManager.StoreMailBody(mbox, sampleMessage); var id = MailBoxManager.MailSave(mbox, sampleMessage, 0, folderId.Value, restoreFolderId, "api sample", "", false); return(id); }
public int CreateSampleMessage( int?folderId, int?mailboxId, List <string> to, List <string> cc, List <string> bcc, bool importance, bool unread, string subject, string body) { 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 mimeMessageId = MailUtil.CreateMessageId(); var restoreFolderId = folderId.Value == MailFolder.Ids.spam || folderId.Value == MailFolder.Ids.trash ? MailFolder.Ids.inbox : folderId.Value; string sampleBody; string sampleIntro; if (!to.Any()) { to = new List <string> { mbox.EMail.Address }; } if (!string.IsNullOrEmpty(body)) { sampleBody = body; sampleIntro = MailUtil.GetIntroduction(body); } else { sampleBody = LOREM_IPSUM_BODY; sampleIntro = LOREM_IPSUM_INTRO; } var sampleMessage = new MailMessage { Date = DateTime.UtcNow, MimeMessageId = mimeMessageId, MimeReplyToId = null, ChainId = mimeMessageId, ReplyTo = "", From = MailUtil.CreateFullEmail(mbox.Name, mbox.EMail.Address), FromEmail = mbox.EMail.Address, To = string.Join(", ", to.ToArray()), Cc = cc.Any() ? string.Join(", ", cc.ToArray()) : "", Bcc = bcc.Any() ? string.Join(", ", bcc.ToArray()) : "", Subject = string.IsNullOrEmpty(subject) ? LOREM_IPSUM_SUBJECT : subject, Important = importance, TextBodyOnly = false, Attachments = new List <MailAttachment>(), Size = sampleBody.Length, MailboxId = mbox.MailBoxId, HtmlBody = sampleBody, Introduction = sampleIntro, Folder = folderId.Value, RestoreFolderId = restoreFolderId, IsNew = unread, StreamId = MailUtil.CreateStreamId() }; MailBoxManager.StoreMailBody(mbox, sampleMessage); var id = MailBoxManager.MailSave(mbox, sampleMessage, 0, folderId.Value, restoreFolderId, SAMPLE_UIDL, "", false); return(id); }
public bool SimpleSend( string from, List <string> to, string subject, string body, bool isReceipt, DeliveryFailureMessageTranslates translates = null) { if (!to.Any()) { throw new ArgumentNullException("to"); } if (string.IsNullOrEmpty(from)) { throw new ArgumentNullException("from"); } var mailAddress = new MailAddress(from); var engine = new EngineFactory(Tenant, User); var accounts = engine.AccountEngine.GetAccountInfoList().ToAccountData(); var account = accounts.FirstOrDefault(a => a.Email.ToLower().Equals(mailAddress.Address)); if (account == null) { throw new ArgumentException("Mailbox not found"); } if (account.IsGroup) { throw new InvalidOperationException("Sending emails from a group address is forbidden"); } var mbox = engine.MailboxEngine.GetMailboxData( new СoncreteUserMailboxExp(account.MailboxId, Tenant, User)); if (mbox == null) { throw new ArgumentException("No such mailbox"); } if (!mbox.Enabled) { throw new InvalidOperationException("Sending emails from a disabled account is forbidden"); } var previousMailboxId = mbox.MailBoxId; var mimeMessageId = MailUtil.CreateMessageId(); var streamId = MailUtil.CreateStreamId(); var fromAddress = MailUtil.CreateFullEmail(mbox.Name, mailAddress.Address); var draft = new MailDraftData(0, mbox, fromAddress, to, new List <string>(), new List <string>(), subject, mimeMessageId, string.Empty, false, new List <int>(), body, streamId, new List <MailAttachmentData>(), string.Empty) { FileLinksShareMode = (Files.Core.Security.FileShare)FileShare.None, PreviousMailboxId = previousMailboxId, RequestReceipt = false, RequestRead = false, IsAutogenerated = false, IsAutoreplied = false, IsReceipt = isReceipt }; DaemonLabels = translates ?? DeliveryFailureMessageTranslates.Defauilt; var scheme = HttpContext.Current == null ? Uri.UriSchemeHttp : HttpContext.Current.Request.GetUrlRewriter().Scheme; var currentUrl = HttpContext.Current != null?HttpContext.Current.Request.GetUrlRewriter().ToString() : null; Task.Run(() => { try { if (HttpContext.Current == null && !WorkContext.IsMono) { HttpContext.Current = new HttpContext( new HttpRequest("hack", currentUrl, string.Empty), new HttpResponse(new StringWriter())); } CoreContext.TenantManager.SetCurrentTenant(draft.Mailbox.TenantId); SecurityContext.CurrentUser = new Guid(draft.Mailbox.UserId); draft.ChangeEmbeddedAttachmentLinks(Log); var mimeMessage = draft.ToMimeMessage(); using (var mc = new MailClient(draft.Mailbox, CancellationToken.None, certificatePermit: draft.Mailbox.IsTeamlab || _sslCertificatePermit, log: Log, enableDsn: draft.RequestReceipt)) { mc.Send(mimeMessage, false); } Log.Info($"User {draft.Mailbox.UserId} sent a read confirmation to {string.Join(",", draft.To)} from {draft.From}"); SendMailNotification(draft); } catch (Exception ex) { Log.ErrorFormat("Mail->Send failed: Exception: {0}", ex.ToString()); SendMailErrorNotification(draft, MailNotificationState.SendReceiptError); } }); return(true); }