예제 #1
0
        public void CanMakeAtom()
        {
            // arrange
            var    parser = new SmtpParser();
            string atom;

            // act
            var made = parser.TryMakeAtom(new TokenEnumerator(new StringTokenReader("hello")), out atom);

            // assert
            Assert.True(made);
            Assert.Equal("hello", atom);
        }
예제 #2
0
        public void CanMakeDotString()
        {
            // arrange
            var    parser = new SmtpParser();
            string dotString;

            // act
            var made = parser.TryMakeDotString(new TokenEnumerator(new StringTokenReader("abc.def.hij")), out dotString);

            // assert
            Assert.True(made);
            Assert.Equal("abc.def.hij", dotString);
        }
예제 #3
0
        public void CanMakeLocalPart()
        {
            // arrange
            var parser = new SmtpParser();
            string localPart;

            // act
            var made = parser.TryMakeLocalPart(new TokenEnumerator(new StringTokenReader("abc")), out localPart);

            // assert
            Assert.True(made);
            Assert.Equal("abc", localPart);
        }
예제 #4
0
        public void CanMakeAtom()
        {
            // arrange
            var parser = new SmtpParser();
            string atom;

            // act
            var made = parser.TryMakeAtom(new TokenEnumerator(new StringTokenReader("hello")), out atom);

            // assert
            Assert.True(made);
            Assert.Equal("hello", atom);
        }
예제 #5
0
        public void CanMakeSubdomain()
        {
            // arrange
            var    parser = new SmtpParser();
            string subdomain;

            // act
            var made = parser.TryMakeSubdomain(new TokenEnumerator(new StringTokenReader("a-1-b-2")), out subdomain);

            // assert
            Assert.True(made);
            Assert.Equal("a-1-b-2", subdomain);
        }
예제 #6
0
        public void CanMakeTextOrNumberOrHyphenString()
        {
            // arrange
            var parser = new SmtpParser();
            string textOrNumberOrHyphen1;

            // act
            var made1 = parser.TryMakeTextOrNumberOrHyphenString(new TokenEnumerator(new StringTokenReader("a1-b2")), out textOrNumberOrHyphen1);

            // assert
            Assert.True(made1);
            Assert.Equal("a1-b2", textOrNumberOrHyphen1);
        }
예제 #7
0
        public void CanMakeTextOrNumberOrHyphenString()
        {
            // arrange
            var    parser = new SmtpParser();
            string textOrNumberOrHyphen1;

            // act
            var made1 = parser.TryMakeTextOrNumberOrHyphenString(new TokenEnumerator(new StringTokenReader("a1-b2")), out textOrNumberOrHyphen1);

            // assert
            Assert.True(made1);
            Assert.Equal("a1-b2", textOrNumberOrHyphen1);
        }
예제 #8
0
        public void CanMakeDomain()
        {
            // arrange
            var    parser = new SmtpParser();
            string domain;

            // act
            var made = parser.TryMakeDomain(new TokenEnumerator(new StringTokenReader("123.abc.com")), out domain);

            // assert
            Assert.True(made);
            Assert.Equal("123.abc.com", domain);
        }
예제 #9
0
        public void CanMakeLocalPart()
        {
            // arrange
            var    parser = new SmtpParser();
            string localPart;

            // act
            var made = parser.TryMakeLocalPart(new TokenEnumerator(new StringTokenReader("abc")), out localPart);

            // assert
            Assert.True(made);
            Assert.Equal("abc", localPart);
        }
예제 #10
0
        public void CanMakeAddressLiteral()
        {
            // arrange
            var    parser = new SmtpParser();
            string address;

            // act
            var made = parser.TryMakeAddressLiteral(new TokenEnumerator(new StringTokenReader("[ 127.0.0.1 ]")), out address);

            // assert
            Assert.True(made);
            Assert.Equal("127.0.0.1", address);
        }
예제 #11
0
        public void CanMakeDotString()
        {
            // arrange
            var parser = new SmtpParser();
            string dotString;

            // act
            var made = parser.TryMakeDotString(new TokenEnumerator(new StringTokenReader("abc.def.hij")), out dotString);

            // assert
            Assert.True(made);
            Assert.Equal("abc.def.hij", dotString);
        }
예제 #12
0
        public void CanMakeAtDomainList()
        {
            // arrange
            var    parser = new SmtpParser();
            string atDomainList;

            // act
            var made = parser.TryMakeAtDomainList(new TokenEnumerator(new StringTokenReader("@gmail.com,@hotmail.com")), out atDomainList);

            // assert
            Assert.True(made);
            Assert.Equal("@gmail.com,@hotmail.com", atDomainList);
        }
예제 #13
0
        public void CanMakeReversePath()
        {
            // path
            var      parser = new SmtpParser();
            IMailbox mailbox;

            // act
            var made = parser.TryMakePath(new TokenEnumerator(new StringTokenReader("<@gmail.com,@hotmail.com:[email protected]>")), out mailbox);

            // assert
            Assert.True(made);
            Assert.Equal("cain.osullivan", mailbox.User);
            Assert.Equal("gmail.com", mailbox.Host);
        }
예제 #14
0
        public void CanMakePlusAddressMailBox()
        {
            // arrange
            var      parser = new SmtpParser();
            IMailbox mailbox;

            // act
            var made = parser.TryMakeMailbox(new TokenEnumerator(new StringTokenReader("*****@*****.**")), out mailbox);

            // assert
            Assert.True(made);
            Assert.Equal("cain.osullivan+plus", mailbox.User);
            Assert.Equal("gmail.com", mailbox.Host);
        }
예제 #15
0
        public void CanMakeMailbox(string email, string user, string host)
        {
            // arrange
            var      parser = new SmtpParser();
            IMailbox mailbox;

            // act
            var made = parser.TryMakeMailbox(new TokenEnumerator(new StringTokenReader(email)), out mailbox);

            // assert
            Assert.True(made);
            Assert.Equal(user, mailbox.User);
            Assert.Equal(host, mailbox.Host);
        }
예제 #16
0
        public void CanMakeTextOrNumber()
        {
            // arrange
            var parser = new SmtpParser();
            string textOrNumber1;
            string textOrNumber2;

            // act
            var made1 = parser.TryMakeTextOrNumber(new TokenEnumerator(new StringTokenReader("abc")), out textOrNumber1);
            var made2 = parser.TryMakeTextOrNumber(new TokenEnumerator(new StringTokenReader("123")), out textOrNumber2);

            // assert
            Assert.True(made1);
            Assert.Equal("abc", textOrNumber1);
            Assert.True(made2);
            Assert.Equal("123", textOrNumber2);
        }
예제 #17
0
        public void CanMakeTextOrNumber()
        {
            // arrange
            var    parser = new SmtpParser();
            string textOrNumber1;
            string textOrNumber2;

            // act
            var made1 = parser.TryMakeTextOrNumber(new TokenEnumerator(new StringTokenReader("abc")), out textOrNumber1);
            var made2 = parser.TryMakeTextOrNumber(new TokenEnumerator(new StringTokenReader("123")), out textOrNumber2);

            // assert
            Assert.True(made1);
            Assert.Equal("abc", textOrNumber1);
            Assert.True(made2);
            Assert.Equal("123", textOrNumber2);
        }
예제 #18
0
        public void CanMakeMailParameters()
        {
            // arrange
            var parser = new SmtpParser();
            IDictionary <string, string> parameters;

            // act
            var made = parser.TryMakeMailParameters(new TokenEnumerator(new StringTokenReader("SIZE=123 ABC=DEF ZZZ=123")), out parameters);

            // assert
            Assert.True(made);
            Assert.Equal(3, parameters.Count);
            Assert.True(parameters.ContainsKey("SIZE"));
            Assert.Equal(parameters["SIZE"], "123");
            Assert.True(parameters.ContainsKey("ABC"));
            Assert.Equal(parameters["ABC"], "DEF");
            Assert.True(parameters.ContainsKey("ZZZ"));
            Assert.Equal(parameters["ZZZ"], "123");
        }
예제 #19
0
        async ValueTask <SmtpCommand> ReadCommandAsync(ISessionContext context, CancellationToken cancellationToken)
        {
            var timeout = new CancellationTokenSource(context.ServerOptions.CommandWaitTimeout);

            var cancellationTokenSource = CancellationTokenSource.CreateLinkedTokenSource(timeout.Token, cancellationToken);

            try
            {
                SmtpCommand command = null;

                await context.Pipe.Input.ReadLineAsync(
                    buffer =>
                {
                    var parser = new SmtpParser(_commandFactory);

                    if (parser.TryMake(ref buffer, out command, out var errorResponse) == false)
                    {
                        throw new SmtpResponseException(errorResponse);
                    }

                    return(Task.CompletedTask);
                },
                    cancellationTokenSource.Token).ConfigureAwait(false);

                return(command);
            }
            catch (OperationCanceledException)
            {
                if (timeout.IsCancellationRequested)
                {
                    throw new SmtpResponseException(new SmtpResponse(SmtpReplyCode.ServiceClosingTransmissionChannel, "Timeout whilst waiting for input."), true);
                }

                throw new SmtpResponseException(new SmtpResponse(SmtpReplyCode.ServiceClosingTransmissionChannel, "The session has be cancelled."), true);
            }
            finally
            {
                timeout.Dispose();
                cancellationTokenSource.Dispose();
            }
        }
예제 #20
0
        public void CanMakeSubdomain()
        {
            // arrange
            var parser = new SmtpParser();
            string subdomain;

            // act
            var made = parser.TryMakeSubdomain(new TokenEnumerator(new StringTokenReader("a-1-b-2")), out subdomain);

            // assert
            Assert.True(made);
            Assert.Equal("a-1-b-2", subdomain);
        }
예제 #21
0
        public void CanMakeDomain()
        {
            // arrange
            var parser = new SmtpParser();
            string domain;

            // act
            var made = parser.TryMakeDomain(new TokenEnumerator(new StringTokenReader("123.abc.com")), out domain);

            // assert
            Assert.True(made);
            Assert.Equal("123.abc.com", domain);
        }
예제 #22
0
 /// <summary>
 /// Constructor.
 /// </summary>
 /// <param name="options">The SMTP server options.</param>
 /// <param name="parser">The ABNF SMTP argument parser.</param>
 public SmtpCommandFactory(ISmtpServerOptions options, SmtpParser parser)
 {
     _options = options;
     _parser = parser;
 }
예제 #23
0
        public void CanMakePlusAddressMailBox()
        {
            // arrange
            var parser = new SmtpParser();
            IMailbox mailbox;

            // act
            var made = parser.TryMakeMailbox(new TokenEnumerator(new StringTokenReader("*****@*****.**")), out mailbox);

            // assert
            Assert.True(made);
            Assert.Equal("cain.osullivan+plus", mailbox.User);
            Assert.Equal("gmail.com", mailbox.Host);
        }
예제 #24
0
        public void CanMakeAtDomainList()
        {
            // arrange
            var parser = new SmtpParser();
            string atDomainList;

            // act
            var made = parser.TryMakeAtDomainList(new TokenEnumerator(new StringTokenReader("@gmail.com,@hotmail.com")), out atDomainList);

            // assert
            Assert.True(made);
            Assert.Equal("@gmail.com,@hotmail.com", atDomainList);
        }
예제 #25
0
        public void CanMakeMailParameters()
        {
            // arrange
            var parser = new SmtpParser();
            IDictionary<string, string> parameters;

            // act
            var made = parser.TryMakeMailParameters(new TokenEnumerator(new StringTokenReader("SIZE=123 ABC=DEF ZZZ=123")), out parameters);

            // assert
            Assert.True(made);
            Assert.Equal(3, parameters.Count);
            Assert.True(parameters.ContainsKey("SIZE"));
            Assert.Equal(parameters["SIZE"], "123");
            Assert.True(parameters.ContainsKey("ABC"));
            Assert.Equal(parameters["ABC"], "DEF");
            Assert.True(parameters.ContainsKey("ZZZ"));
            Assert.Equal(parameters["ZZZ"], "123");
        }
예제 #26
0
        public void CanMakeAddressLiteral()
        {
            // arrange
            var parser = new SmtpParser();
            string address;

            // act
            var made = parser.TryMakeAddressLiteral(new TokenEnumerator(new StringTokenReader("[ 127.0.0.1 ]")), out address);

            // assert
            Assert.True(made);
            Assert.Equal("127.0.0.1", address);
        }
예제 #27
0
        public void CanMakeReversePath()
        {
            // path
            var parser = new SmtpParser();
            IMailbox mailbox;

            // act
            var made = parser.TryMakePath(new TokenEnumerator(new StringTokenReader("<@gmail.com,@hotmail.com:[email protected]>")), out mailbox);

            // assert
            Assert.True(made);
            Assert.Equal("cain.osullivan", mailbox.User);
            Assert.Equal("gmail.com", mailbox.Host);
        }