Beispiel #1
0
        public void TestStartTransaction()
        {
            const string     banner         = "Test Banner";
            IReceiveSettings actualSettings = null;

            var core = new SMTPServer(DefaultLoader());

            var ip = IPAddress.Parse("127.0.0.1");

            using (ShimsContext.Create())
            {
                var expectedSettings = new StubIReceiveSettings
                {
                    BannerGet = () => banner
                };

                SMTPServer actualCore = null;

                ShimSMTPTransaction.ConstructorSMTPServerIReceiveSettings = (transaction, smtpCore, settings) =>
                {
                    actualSettings = settings;
                    actualCore     = smtpCore;
                };

                SMTPResponse reponse;
                core.StartTransaction(ip, expectedSettings, out reponse);

                Assert.Equal(SMTPStatusCode.Ready, reponse.Code);
                Assert.Equal(banner, reponse.Args[0]);
                Assert.Same(core, actualCore);
                Assert.Same(expectedSettings, actualSettings);
            }
        }
        public SMTPTransaction(SMTPServer server, IReceiveSettings settings)
        {
            if (server == null)
            {
                throw new ArgumentNullException();
            }
            if (settings == null)
            {
                throw new ArgumentNullException();
            }

            _settings = settings;
            Server    = server;
        }
Beispiel #3
0
        public SMTPTransaction StartTransaction(IPAddress address, IReceiveSettings settings, out SMTPResponse response)
        {
            var transaction = new SMTPTransaction(this, settings);

            if (OnConnect != null)
            {
                var args = new ConnectEventArgs(address);
                OnConnect(transaction, args);

                if (args.Cancel)
                {
                    response = new SMTPResponse(args.ResponseCode ?? SMTPStatusCode.TransactionFailed);
                    transaction.Close();
                    return(transaction);
                }
            }

            response = new SMTPResponse(SMTPStatusCode.Ready, settings.Banner);

            return(transaction);
        }