コード例 #1
0
        public void TestResetDataMode()
        {
            using (ShimsContext.Create())
            {
                var server      = new ShimSMTPServer();
                var settings    = new StubIReceiveSettings();
                var transaction = new SMTPTransaction(server, settings);

                Assert.False(transaction.InDataMode);

                transaction.StartDataMode((s, builder) => false, s => new SMTPResponse(SMTPStatusCode.Okay));
                Assert.True(transaction.InDataMode);

                transaction.Reset();
                Assert.False(transaction.InDataMode);
            }
        }
コード例 #2
0
ファイル: DATAHandler.cs プロジェクト: Granikos/SMTPSimulator
        public override SMTPResponse DoExecute(SMTPTransaction transaction, string parameters)
        {
            if (!string.IsNullOrEmpty(parameters))
            {
                return(new SMTPResponse(SMTPStatusCode.SyntaxError));
            }

            var forwardPath = transaction.GetListProperty <MailPath>("ForwardPath");

            if (!transaction.GetProperty <bool>("MailInProgress") || forwardPath == null || !forwardPath.Any())
            {
                return(new SMTPResponse(SMTPStatusCode.BadSequence));
            }

            transaction.StartDataMode(DataLineHandler, data => DataHandler(transaction, data));

            return(new SMTPResponse(SMTPStatusCode.StartMailInput));
        }
コード例 #3
0
ファイル: AUTHHandler.cs プロジェクト: Granikos/SMTPSimulator
        public static SMTPResponse HandleResponse(SMTPTransaction transaction, string decodedReponse, IAuthMethod method)
        {
            string challenge;

            if (!method.ProcessResponse(transaction, decodedReponse, out challenge))
            {
                return(new SMTPResponse(SMTPStatusCode.AuthFailed, challenge != null ? new[] { challenge } : new string[0]));
            }

            if (challenge != null)
            {
                transaction.StartDataMode(DataLineHandler, s => DataHandler(transaction, s, method));

                return(new SMTPResponse(SMTPStatusCode.AuthContinue, Base64Encode(challenge)));
            }

            transaction.SetProperty("Authenticated", true, true);

            return(new SMTPResponse(SMTPStatusCode.AuthSuccess));
        }
コード例 #4
0
        public void TestDataHandling(bool expectedResult)
        {
            using (ShimsContext.Create())
            {
                var server      = new ShimSMTPServer();
                var settings    = new StubIReceiveSettings();
                var transaction = new SMTPTransaction(server, settings);

                Assert.False(transaction.InDataMode);

                const string  expectedData          = "Some data";
                string        actualData            = null;
                const string  expectedLine          = "Some line";
                string        actualLine            = null;
                var           expectedStringBuilder = new StringBuilder();
                StringBuilder actualStringBuilder   = null;
                var           expectedResponse      = new SMTPResponse(SMTPStatusCode.Okay);

                transaction.StartDataMode((line, builder) =>
                {
                    actualLine          = line;
                    actualStringBuilder = builder;
                    return(expectedResult);
                }, data =>
                {
                    actualData = data;
                    return(expectedResponse);
                });

                var actualResult   = transaction.HandleDataLine(expectedLine, expectedStringBuilder);
                var actualResponse = transaction.HandleData(expectedData);

                Assert.Equal(expectedResult, actualResult);
                Assert.Same(expectedResponse, actualResponse);
                Assert.Same(expectedStringBuilder, actualStringBuilder);
                Assert.Equal(expectedData, actualData);
                Assert.Equal(expectedLine, actualLine);
            }
        }