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; } } }