예제 #1
0
        /// <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());
        }
예제 #2
0
파일: ENVELOPE.cs 프로젝트: xhute/Kooboo
        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();
        }
예제 #3
0
        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);
        }