Exemplo n.º 1
0
        public override void LogOut()
        {
            MailCommand command = Connection.CreateCommand();

            command.Command = Pop3.POP3_QUIT;
            command.ExecuteCommand();
        }
        public override void Open()
        {
            base.Open();
            MailConnection.EmailStreamReader = new StreamReader(MailConnection.TcpClient.GetStream());
            MailConnection.EmailStream       = MailConnection.TcpClient.GetStream();
            LoggerHolders.ConsoleLogger.Log(MailConnection.EmailStreamReader.ReadLine());
            MailCommand command = MailConnection.CreateCommand();

            command.Command = "STARTTLS";
            command.ExecuteCommand();

            LoggerHolders.ConsoleLogger.Log(command.Response);

            var sslStrm = new SslStream(MailConnection.TcpClient.GetStream(), false);

            try
            {
                sslStrm.AuthenticateAsClient(MailConnection.Host);
            }
            catch (AuthenticationException ex)
            {
                LoggerHolders.ConsoleLogger.Log("Exception", LogType.Critical, ex);
                if (ex.InnerException != null)
                {
                    LoggerHolders.ConsoleLogger.Log("Exception", LogType.Critical, ex.InnerException);
                }
                MailConnection.TcpClient.Close();
            }

            MailConnection.EmailStream       = sslStrm;
            MailConnection.EmailStreamReader = new StreamReader(sslStrm);
        }
Exemplo n.º 3
0
        public override void LogOut()
        {
            MailCommand command = Connection.CreateCommand();

            command.Command = Imap.IMAP_LOGOUT;
            command.ExecuteCommand();
            LoggerHolders.ConsoleLogger.Log(command.Response, LogType.Debug);
        }
Exemplo n.º 4
0
        public MailFromState(String host, MailCommand cmd, Connection connection) : base(connection)
        {
            this.host = host;

            this.mailFrom = cmd.MailFrom;
            this.mailSize = cmd.MailSize;

            this.NexCommands.Add(typeof(RcptCommand));
        }
Exemplo n.º 5
0
        public async Task InvalidDomainRejected()
        {
            var channel = new MockSmtpChannel();
            var builder = new MockMailBuilder();
            var user    = new MockUserStore(false);
            var command = new MailCommand(
                channel,
                builder,
                TestHelpers.MakeSettings(
                    "test.vaettir.net",
                    new[] { new SmtpAcceptDomain("test.vaettir.net") }),
                user);

            command.Initialize("FROM:!!!!");
            await command.ExecuteAsync(CancellationToken.None);

            SmtpTestHelper.AssertResponse(channel, SmtpReplyCode.InvalidArguments);
            Assert.Null(builder.PendingMail);
        }
Exemplo n.º 6
0
        public async Task VailToInternal()
        {
            var channel = new MockSmtpChannel();
            var builder = new MockMailBuilder();
            var user    = new MockUserStore(true);
            var command = new MailCommand(
                channel,
                builder,
                TestHelpers.MakeSettings(
                    "test.vaettir.net",
                    new[] { new SmtpAcceptDomain("test.vaettir.net") }),
                user);

            command.Initialize("FROM:<>");
            await command.ExecuteAsync(CancellationToken.None);

            SmtpTestHelper.AssertResponse(channel, SmtpReplyCode.Okay);
            Assert.NotNull(builder.PendingMail);
            Assert.Equal("", builder.PendingMail.FromPath.Mailbox);
        }
Exemplo n.º 7
0
        public async Task FromWrongMailboxRejected()
        {
            var channel = new MockSmtpChannel {
                AuthenticatedUser = new UserData("*****@*****.**")
            };
            var builder = new MockMailBuilder();
            var user    = new MockUserStore(false);
            var command = new MailCommand(
                channel,
                builder,
                TestHelpers.MakeSettings(
                    "test.vaettir.net",
                    new[] { new SmtpAcceptDomain("test.vaettir.net") }),
                user);

            command.Initialize("FROM:<*****@*****.**>");
            await command.ExecuteAsync(CancellationToken.None);

            SmtpTestHelper.AssertResponse(channel, SmtpReplyCode.MailboxUnavailable);
            Assert.Null(builder.PendingMail);
        }
Exemplo n.º 8
0
        public async Task VailMailWithUnknownRejected()
        {
            var channel = new MockSmtpChannel {
                AuthenticatedUser = new UserData("*****@*****.**")
            };
            var builder = new MockMailBuilder();
            var user    = new MockUserStore(true);
            var command = new MailCommand(
                channel,
                builder,
                TestHelpers.MakeSettings(
                    "test.vaettir.net",
                    new[] { new SmtpAcceptDomain("test.vaettir.net") }),
                user);

            command.Initialize("FROM:<*****@*****.**> EVIL=FAIL");
            await command.ExecuteAsync(CancellationToken.None);

            SmtpTestHelper.AssertResponse(channel, SmtpReplyCode.ParameterNotImplemented);
            Assert.Null(builder.PendingMail);
        }
Exemplo n.º 9
0
        public async Task VailMailAcceptedWithReturnPathRejected()
        {
            var channel = new MockSmtpChannel {
                AuthenticatedUser = new UserData("*****@*****.**")
            };
            var builder = new MockMailBuilder();
            var user    = new MockUserStore(true);
            var command = new MailCommand(
                channel,
                builder,
                TestHelpers.MakeSettings(
                    "test.vaettir.net",
                    new[] { new SmtpAcceptDomain("test.vaettir.net") }),
                user);

            command.Initialize("FROM:<@other:[email protected]>");
            await command.ExecuteAsync(CancellationToken.None);

            SmtpTestHelper.AssertResponse(channel, SmtpReplyCode.InvalidArguments);
            Assert.Null(builder.PendingMail);
        }
Exemplo n.º 10
0
        public async Task VailMailWithParametersAccepted()
        {
            var channel = new MockSmtpChannel {
                AuthenticatedUser = new UserData("*****@*****.**")
            };
            var builder = new MockMailBuilder();
            var user    = new MockUserStore(true);
            var command = new MailCommand(
                channel,
                builder,
                TestHelpers.MakeSettings(
                    "test.vaettir.net",
                    new[] { new SmtpAcceptDomain("test.vaettir.net") }),
                user);

            command.Initialize("FROM:<*****@*****.**> BODY=7BIT");
            await command.ExecuteAsync(CancellationToken.None);

            SmtpTestHelper.AssertResponse(channel, SmtpReplyCode.Okay);
            Assert.NotNull(builder.PendingMail);
            Assert.Equal("*****@*****.**", builder.PendingMail.FromPath.Mailbox);
        }
Exemplo n.º 11
0
        public async Task MailInProgressRejected()
        {
            var channel = new MockSmtpChannel();
            var message = new SmtpMailMessage(new SmtpPath(null));
            var builder = new MockMailBuilder
            {
                PendingMail = message
            };
            var user    = new MockUserStore(false);
            var command = new MailCommand(
                channel,
                builder,
                TestHelpers.MakeSettings(
                    "test.vaettir.net",
                    new[] { new SmtpAcceptDomain("test.vaettir.net") }),
                user);

            command.Initialize("FROM:<*****@*****.**>");
            await command.ExecuteAsync(CancellationToken.None);

            SmtpTestHelper.AssertResponse(channel, SmtpReplyCode.BadSequence);
            Assert.Same(message, builder.PendingMail);
        }
 /// <summary>
 /// Visit an MAIL command.
 /// </summary>
 /// <param name="command">The command that is being visited.</param>
 protected override void Visit(MailCommand command)
 {
     _output.WriteLine("MAIL: Address={0}", command.Address.AsAddress());
 }
Exemplo n.º 13
0
        static void Main(string[] args)
        {
            string        result = "";
            string        url    = @"http://*****:*****@gmail.com", Password = securePass });



            MailCommand command = client.Connection.CreateCommand();

            command.Command = "AUTHENTICATE XOAUTH DQAAAA0BAACM5VezEB1fG75L4oTHjEnfHS-YuSLBUe_OKL9QFCcgxqP7SLkk_6AFgCqFdNWnId_ohkmTShCeb5rkgdZR5zceaMoIPDyCY4rWkyMjY8S-2vmkXSgHLUTmhZyZLPT3j7rAnEou-QEdHxjKpqiZ8a04QiOqvhIOWmN9JEWBxSYqdM5eIH8xG4pz19c6TWUhq1PJCYCyNsU384uNyFanJ-tg0z9c1dF1mgqLscbYZz82RKsZAPyu9Um2VrWWSW9r_56_OW7JJT709cte1jx0h29HEhF5J_4LZ1Md5bGHUFJQPS7-gJBLJApaVxWZfhpc_r19sNzaqdZYsIuUxRM65jiYXPomvozXSK4ASonS1cXu3g";
            command.ExecuteCommand();
            LoggerHolders.ConsoleLogger.Log(command.Response);
            command.Command = "RETR 300";
            command.ExecuteCommand(true);
            LoggerHolders.ConsoleLogger.Log(command.Response);
            StreamWriter writer = new StreamWriter(@"C:\fetch.log");

            writer.Write(command.Response);
            writer.Close();



            //MailProviderFactory emailFactory = new ImapProviderFactory();
            //MailConnection connection = emailFactory.CreateConnection();
            ////connection.Host = config.Imap.Host;
            ////connection.IsSslAuthentication = config.Imap.IsSslAuthentication;
            ////connection.Port = config.Imap.Port;
            ////connection.SecureTypeConnection = new SslMailConnection();
            //connection.Host = "imap.mail.ru";
            //connection.IsSslAuthentication = true;
            //connection.Port = 143;
            //SecureMailConnectionDecorator sslMailConnection = new TlsMailConnectionDecorator();
            //sslMailConnection.MailConnection = connection;
            //sslMailConnection.Open();
            //MailClient client = emailFactory.CreateClient();
            //client.Authenticate(new MailUserInfo() { Email = "*****@*****.**", Password = securePass });

            //connection.Host = "imap.mail.ru";
            //connection.IsSslAuthentication = true;
            //connection.Port = 143;
            //connection.Open();
            //MailClient client = emailFactory.CreateClient();
            //MailCommand com = client.Connection.CreateCommand();
            //com.Command = "STARTTLS";
            //com.ExecuteCommand();

            //var ssl = client.Connection._tcpClient.GetStream();
            //client.Connection._emailStream = ssl;
            //client.Connection._emailsStreamReader = new StreamReader(ssl);
            //Console.WriteLine(client.Connection._emailsStreamReader.ReadLine());



            //Thread.Sleep(5000);

            //com.Command = "CAPABILITY";
            //com.ExecuteCommand();



            //LoggerHolders.ConsoleLogger.Log(com.Response, LogType.Debug);


            //client.Authenticate(new MailUserInfo() { Email = "*****@*****.**", Password = securePass });
            //com.Command = "AUTH PLAIN";
            //com.ExecuteCommand();

            //////MailCommand command = client.Connection.CreateCommand();
            ////////command.Command = "STATUS INBOX (messages)";
            ////////command.ExecuteCommand();
            ////////LoggerHolders.ConsoleLogger.Log(command.Response);

            //////command.Command = "SELECT INBOX";
            //////command.ExecuteCommand();
            //////LoggerHolders.ConsoleLogger.Log(command.Response);

            //////command.Command = "FETCH " + 5343 + " (body[header.fields (from subject date)])";
            //////command.ExecuteCommand();
            //////LoggerHolders.ConsoleLogger.Log(command.Response, LogType.Debug);
            ///
            ///
            ///



            //StreamReader readerHeader = new StreamReader(@"C:\header.txt");

            //string header = readerHeader.ReadToEnd();
            //readerHeader.Close();
            //LoggerHolders.ConsoleLogger.Log(header, LogType.Info);

            ////string pat =
            ////    @"Subject: (?<encodedName>(=\?[A-Za-z0-9-]+\?(B|Q|b|q)\?.+\?=[\s]*)+)";

            ////Regex regex = new Regex(pat);
            ////Match match = regex.Match(header);

            ////Console.WriteLine(match.Groups["encodedName"].Value);

            //IMailMessageBuilder builder = new ReceiveMailMessageBuilder(header);
            //MailMessageDirector director = new MailMessageDirector(builder);
            //director.ConstructMailMessage();
            //MailMessage messageHeader = builder.GetMailMessage();
            //LoggerHolders.ConsoleLogger.Log(string.Format("From: {0} <{1}>\nSubject: {2}\nDate: {3}\n{4}",
            //    messageHeader.FromName, messageHeader.From, messageHeader.Subject, messageHeader.Date,
            //    messageHeader.DateLocal), LogType.Debug);

            Console.ReadLine();
        }
Exemplo n.º 14
0
        private void LoadFirs100Messages()
        {
            StringBuilder builde  = new StringBuilder(100);
            MailCommand   command = _client.Connection.CreateCommand();

            command.Command = "STATUS INBOX (messages)";
            command.ExecuteCommand();
            LoggerHolders.ConsoleLogger.Log(command.Response);
            string res   = command.Response;
            Match  m     = Regex.Match(res, "[0-9]*[0-9]");
            int    count = Convert.ToInt32(m.ToString());


            command.Command = "SELECT INBOX";
            command.ExecuteCommand();
            LoggerHolders.ConsoleLogger.Log(command.Response);

            for (int i = count; i > count - 2000; i--)
            {
                command.Command = "FETCH " + i + " (body[header.fields (from subject date)])";
                command.ExecuteCommand();

                IMailMessageBuilder builder  = new ReceiveMailMessageBuilder(command.Response);
                MailMessageDirector director = new MailMessageDirector(builder);
                director.ConstructMailMessage();

                if (string.IsNullOrWhiteSpace(builder.GetMailMessage().Subject))
                {
                    builde.AppendLine(command.Response);
                    builde.AppendLine(Environment.NewLine);
                }
                else
                {
                    continue;
                }

                try
                {
                    Application.Current.Dispatcher.InvokeAsync(() =>
                    {
                        _mailMessages.Add(builder.GetMailMessage());
                    });
                }
                catch (Exception ex)
                {
                    LoggerHolders.ConsoleLogger.Log("Exception:", LogType.Error, ex);
                }
            }
            try
            {
                string       path   = @"C:\MAILdump.log";
                StreamWriter writer = new StreamWriter(path);
                writer.Write(builde.ToString());
                writer.Close();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString());
            }



            ////IMailMessageBuilder builder = new ReceiveMailMessageBuilder(header);
            ////MailMessageDirector director = new MailMessageDirector(builder);
            ////director.ConstructMailMessage();
            ////MailMessage messageHeader = builder.GetMailMessage();
            //LoggerHolders.ConsoleLogger.Log(string.Format("From: {0} <{1}>\n Subject: {2}\n Date: {3}\n{4}",
            //    messageHeader.FromName, messageHeader.From, messageHeader.Subject, messageHeader.Date,
            //    messageHeader.DateLocal));
        }
Exemplo n.º 15
0
        protected async Task <CommandBase> GetCommandAsync(String line, List <Type> possibleCommands)
        {
            if (String.IsNullOrEmpty(line))
            {
                return(null);
            }

            CommandBase cmd     = null;
            String      payload = null;

            if ((payload = this.GetPayloadByCommand(line, HeloCommand.Command)) != null)
            {
                cmd = new HeloCommand(payload);
            }
            else if ((payload = this.GetPayloadByCommand(line, EhloCommand.Command)) != null)
            {
                cmd = new EhloCommand(payload);
            }
            else if ((payload = this.GetPayloadByCommand(line, StartTlsCommand.Command)) != null)
            {
                cmd = new StartTlsCommand(payload);
            }
            else if ((payload = this.GetPayloadByCommand(line, MailCommand.Command)) != null)
            {
                cmd = new MailCommand(payload);
            }
            else if ((payload = this.GetPayloadByCommand(line, RcptCommand.Command)) != null)
            {
                cmd = new RcptCommand(payload);
            }
            else if ((payload = this.GetPayloadByCommand(line, DataCommand.Command)) != null)
            {
                cmd = new DataCommand(payload);
            }
            else if ((payload = this.GetPayloadByCommand(line, QuitCommand.Command)) != null)
            {
                cmd = new QuitCommand(payload);
            }
            else if ((payload = this.GetPayloadByCommand(line, RstCommand.Command)) != null)
            {
                cmd = new RstCommand(payload);
            }
            else if ((payload = this.GetPayloadByCommand(line, NoopCommand.Command)) != null)
            {
                cmd = new NoopCommand(payload);
            }

            if (cmd != null)
            {
                if (possibleCommands.Contains(cmd.GetType()))
                {
                    var error = cmd.ParseParameter();
                    if (error == null)
                    {
                        error = await cmd.ParseParameterAsync(this.Connection);
                    }

                    if (error != null)
                    {
                        await this.Connection.WriteLineAsync(error);

                        cmd = null;
                    }
                }
                else
                {
                    cmd = new InvalidCommand(payload);
                }
            }
            else
            {
                await this.Connection.WriteLineAsync("500 Unrecognized command");
            }

            return(cmd);
        }
Exemplo n.º 16
0
 /// <summary>
 /// Visit an MAIL command.
 /// </summary>
 /// <param name="command">The command that is being visited.</param>
 protected override void Visit(MailCommand command)
 {
     _output.WriteLine("MAIL: Address={0} Parameters={1}",
                       command.Address.AsAddress(),
                       String.Join(",", command.Parameters.Select(kvp => $"{kvp.Key}={kvp.Value}")));
 }