/// <summary> /// Constructs ENVELOPE address structure. /// </summary> /// <param name="address">Mailbox address.</param> /// <param name="wordEncoder">Unicode words encoder.</param> /// <returns></returns> private static string ConstructAddress(Mail_t_Mailbox address, MIME_Encoding_EncodedWord wordEncoder) { /* An address structure is a parenthesized list that describes an * electronic mail address. The fields of an address structure * are in the following order: personal name, [SMTP] * at-domain-list (source route), mailbox name, and host name. */ // NOTE: all header fields and parameters must in ENCODED form !!! StringBuilder retVal = new StringBuilder(); retVal.Append("("); // personal name if (address.DisplayName != null) { retVal.Append(TextUtils.QuoteString(wordEncoder.Encode(RemoveCrlf(address.DisplayName)))); } else { retVal.Append("NIL"); } // source route, always NIL (not used nowdays) retVal.Append(" NIL"); // mailbox name retVal.Append(" " + TextUtils.QuoteString(wordEncoder.Encode(RemoveCrlf(address.LocalPart)))); // host name if (address.Domain != null) { retVal.Append(" " + TextUtils.QuoteString(wordEncoder.Encode(RemoveCrlf(address.Domain)))); } else { retVal.Append(" NIL"); } retVal.Append(")"); return(retVal.ToString()); }
public static void ConstructAddress(StructureBuilder builder, Mail_t_Mailbox address, MIME_Encoding_EncodedWord wordEncoder) { /* An address structure is a parenthesized list that describes an * electronic mail address. The fields of an address structure * are in the following order: personal name, [SMTP] * at-domain-list (source route), mailbox name, and host name. */ // NOTE: all header fields and parameters must in ENCODED form !!! builder.StartBracket(); // personal name if (address.DisplayName != null) { builder.Append(TextUtils.QuoteString(wordEncoder.Encode(RemoveCrlf(address.DisplayName)))); } else { builder.Append("NIL"); } // source route, always NIL (not used nowdays) builder.AppendNil(); // mailbox name builder.Append(" ").Append(TextUtils.QuoteString(wordEncoder.Encode(RemoveCrlf(address.LocalPart)))); // host name if (address.Domain != null) { builder.Append(" ").Append(TextUtils.QuoteString(wordEncoder.Encode(RemoveCrlf(address.Domain)))); } else { builder.AppendNil(); } builder.EndBracket(); }
public async Task <List <ImapResponse> > Execute(ImapSession session, string args) { var appendArgs = ParseArgs(args); if (appendArgs == null) { throw new CommandException("BAD", "Error in arguments"); } await session.Stream.WriteLineAsync("+ Continue"); var bytes = await session.Stream.ReadAsync(appendArgs.Size); var content = SmtpUtility.GetString(bytes); await session.Stream.ReadLineAsync(); var message = MessageUtility.ParseMeta(content); message.FolderId = session.SelectFolder.FolderId; message.UserId = session.MailDb.UserId; var folderName = session.SelectFolder.Folder.ToLower(); if (folderName == "sent" || folderName == "drafts") { var user = Data.GlobalDb.Users.Get(session.MailDb.UserId); var orgDb = Kooboo.Mail.Factory.DBFactory.OrgDb(user.CurrentOrgId); var address = orgDb.EmailAddress.Get(Mail_t_Mailbox.Parse(message.From).Address); if (address != null) { message.AddressId = address.Id; } } session.MailDb.Messages.Add(message, content); return(null); }