Exemple #1
0
        public async void TestInvalidStateExceptions()
        {
            var commands = new List <SmtpReplayCommand> ();

            commands.Add(new SmtpReplayCommand("", "comcast-greeting.txt"));
            commands.Add(new SmtpReplayCommand("EHLO [127.0.0.1]\r\n", "comcast-ehlo.txt"));
            commands.Add(new SmtpReplayCommand("MAIL FROM:<*****@*****.**>\r\n", "auth-required.txt"));
            commands.Add(new SmtpReplayCommand("MAIL FROM:<*****@*****.**>\r\n", "comcast-mail-from.txt"));
            commands.Add(new SmtpReplayCommand("RCPT TO:<*****@*****.**>\r\n", "auth-required.txt"));
            commands.Add(new SmtpReplayCommand("MAIL FROM:<*****@*****.**>\r\n", "auth-required.txt"));
            commands.Add(new SmtpReplayCommand("MAIL FROM:<*****@*****.**>\r\n", "comcast-mail-from.txt"));
            commands.Add(new SmtpReplayCommand("RCPT TO:<*****@*****.**>\r\n", "auth-required.txt"));
            commands.Add(new SmtpReplayCommand("AUTH PLAIN AHVzZXJuYW1lAHBhc3N3b3Jk\r\n", "comcast-auth-plain.txt"));
            commands.Add(new SmtpReplayCommand("EHLO [127.0.0.1]\r\n", "comcast-ehlo.txt"));
            commands.Add(new SmtpReplayCommand("QUIT\r\n", "comcast-quit.txt"));

            using (var client = new SmtpClient()) {
                var message    = CreateSimpleMessage();
                var sender     = message.From.Mailboxes.FirstOrDefault();
                var recipients = message.To.Mailboxes.ToList();
                var options    = FormatOptions.Default;

                client.LocalDomain = "127.0.0.1";

                Assert.Throws <ServiceNotConnectedException> (async() => await client.AuthenticateAsync("username", "password"));
                Assert.Throws <ServiceNotConnectedException> (async() => await client.AuthenticateAsync(new NetworkCredential("username", "password")));

                Assert.Throws <ServiceNotConnectedException> (async() => await client.NoOpAsync());

                Assert.Throws <ServiceNotConnectedException> (async() => await client.SendAsync(options, message, sender, recipients));
                Assert.Throws <ServiceNotConnectedException> (async() => await client.SendAsync(message, sender, recipients));
                Assert.Throws <ServiceNotConnectedException> (async() => await client.SendAsync(options, message));
                Assert.Throws <ServiceNotConnectedException> (async() => await client.SendAsync(message));

                try {
                    client.ReplayConnect("localhost", new SmtpReplayStream(commands));
                } catch (Exception ex) {
                    Assert.Fail("Did not expect an exception in Connect: {0}", ex);
                }

                Assert.Throws <InvalidOperationException> (async() => await client.ConnectAsync("host", 465, SecureSocketOptions.SslOnConnect));
                Assert.Throws <InvalidOperationException> (async() => await client.ConnectAsync("host", 465, true));

                Assert.Throws <ServiceNotAuthenticatedException> (async() => await client.SendAsync(options, message, sender, recipients));
                Assert.Throws <ServiceNotAuthenticatedException> (async() => await client.SendAsync(message, sender, recipients));
                Assert.Throws <ServiceNotAuthenticatedException> (async() => await client.SendAsync(options, message));
                Assert.Throws <ServiceNotAuthenticatedException> (async() => await client.SendAsync(message));

                try {
                    await client.AuthenticateAsync("username", "password");
                } catch (Exception ex) {
                    Assert.Fail("Did not expect an exception in Authenticate: {0}", ex);
                }

                Assert.Throws <InvalidOperationException> (async() => await client.AuthenticateAsync("username", "password"));
                Assert.Throws <InvalidOperationException> (async() => await client.AuthenticateAsync(new NetworkCredential("username", "password")));

                await client.DisconnectAsync(true);
            }
        }
        public async Task SendAsync(MimeMessage message)
        {
            await semaphoreSlim.WaitAsync();

            try {
                // initial connection
                if (!smtpClient.IsConnected)
                {
                    await this.connectAsync();
                }

                // reconnect if we are not connected anymore
                try {
                    await smtpClient.NoOpAsync();
                } catch (ProtocolException) {
                    await this.connectAsync();
                }
                await smtpClient.SendAsync(message);
            } finally {
                semaphoreSlim.Release();
            }
        }
Exemple #3
0
        public async void TestBasicFunctionality()
        {
            var commands = new List <SmtpReplayCommand> ();

            commands.Add(new SmtpReplayCommand("", "comcast-greeting.txt"));
            commands.Add(new SmtpReplayCommand("EHLO unit-tests.mimekit.org\r\n", "comcast-ehlo.txt"));
            commands.Add(new SmtpReplayCommand("AUTH PLAIN AHVzZXJuYW1lAHBhc3N3b3Jk\r\n", "comcast-auth-plain.txt"));
            commands.Add(new SmtpReplayCommand("EHLO unit-tests.mimekit.org\r\n", "comcast-ehlo.txt"));
            commands.Add(new SmtpReplayCommand("VRFY Smith\r\n", "rfc0821-vrfy.txt"));
            commands.Add(new SmtpReplayCommand("EXPN Example-People\r\n", "rfc0821-expn.txt"));
            commands.Add(new SmtpReplayCommand("NOOP\r\n", "comcast-noop.txt"));
            commands.Add(new SmtpReplayCommand("MAIL FROM:<*****@*****.**>\r\n", "comcast-mail-from.txt"));
            commands.Add(new SmtpReplayCommand("RCPT TO:<*****@*****.**>\r\n", "comcast-rcpt-to.txt"));
            commands.Add(new SmtpReplayCommand("DATA\r\n", "comcast-data.txt"));
            commands.Add(new SmtpReplayCommand(".\r\n", "comcast-data-done.txt"));
            commands.Add(new SmtpReplayCommand("MAIL FROM:<*****@*****.**>\r\n", "comcast-mail-from.txt"));
            commands.Add(new SmtpReplayCommand("RCPT TO:<*****@*****.**>\r\n", "comcast-rcpt-to.txt"));
            commands.Add(new SmtpReplayCommand("DATA\r\n", "comcast-data.txt"));
            commands.Add(new SmtpReplayCommand(".\r\n", "comcast-data-done.txt"));
            commands.Add(new SmtpReplayCommand("MAIL FROM:<*****@*****.**>\r\n", "comcast-mail-from.txt"));
            commands.Add(new SmtpReplayCommand("RCPT TO:<*****@*****.**>\r\n", "comcast-rcpt-to.txt"));
            commands.Add(new SmtpReplayCommand("DATA\r\n", "comcast-data.txt"));
            commands.Add(new SmtpReplayCommand(".\r\n", "comcast-data-done.txt"));
            commands.Add(new SmtpReplayCommand("MAIL FROM:<*****@*****.**>\r\n", "comcast-mail-from.txt"));
            commands.Add(new SmtpReplayCommand("RCPT TO:<*****@*****.**>\r\n", "comcast-rcpt-to.txt"));
            commands.Add(new SmtpReplayCommand("DATA\r\n", "comcast-data.txt"));
            commands.Add(new SmtpReplayCommand(".\r\n", "comcast-data-done.txt"));
            commands.Add(new SmtpReplayCommand("QUIT\r\n", "comcast-quit.txt"));

            using (var client = new SmtpClient()) {
                client.LocalDomain = "unit-tests.mimekit.org";

                try {
                    client.ReplayConnect("localhost", new SmtpReplayStream(commands));
                } catch (Exception ex) {
                    Assert.Fail("Did not expect an exception in Connect: {0}", ex);
                }

                Assert.IsTrue(client.IsConnected, "Client failed to connect.");
                Assert.IsFalse(client.IsSecure, "IsSecure should be false.");

                Assert.IsTrue(client.Capabilities.HasFlag(SmtpCapabilities.Authentication), "Failed to detect AUTH extension");
                Assert.IsTrue(client.AuthenticationMechanisms.Contains("LOGIN"), "Failed to detect the LOGIN auth mechanism");
                Assert.IsTrue(client.AuthenticationMechanisms.Contains("PLAIN"), "Failed to detect the PLAIN auth mechanism");

                Assert.IsTrue(client.Capabilities.HasFlag(SmtpCapabilities.EightBitMime), "Failed to detect 8BITMIME extension");

                Assert.IsTrue(client.Capabilities.HasFlag(SmtpCapabilities.EnhancedStatusCodes), "Failed to detect ENHANCEDSTATUSCODES extension");

                Assert.IsTrue(client.Capabilities.HasFlag(SmtpCapabilities.Size), "Failed to detect SIZE extension");
                Assert.AreEqual(36700160, client.MaxSize, "Failed to parse SIZE correctly");

                Assert.IsTrue(client.Capabilities.HasFlag(SmtpCapabilities.StartTLS), "Failed to detect STARTTLS extension");

                Assert.Throws <ArgumentException> (() => client.Capabilities |= SmtpCapabilities.UTF8);

                Assert.AreEqual(100000, client.Timeout, "Timeout");
                client.Timeout *= 2;

                try {
                    await client.AuthenticateAsync("username", "password");
                } catch (Exception ex) {
                    Assert.Fail("Did not expect an exception in Authenticate: {0}", ex);
                }

                try {
                    await client.VerifyAsync("Smith");
                } catch (Exception ex) {
                    Assert.Fail("Did not expect an exception in Verify: {0}", ex);
                }

                try {
                    await client.ExpandAsync("Example-People");
                } catch (Exception ex) {
                    Assert.Fail("Did not expect an exception in Expand: {0}", ex);
                }

                try {
                    await client.NoOpAsync();
                } catch (Exception ex) {
                    Assert.Fail("Did not expect an exception in NoOp: {0}", ex);
                }

                var message = CreateSimpleMessage();
                var options = FormatOptions.Default;

                try {
                    await client.SendAsync(message);
                } catch (Exception ex) {
                    Assert.Fail("Did not expect an exception in Send: {0}", ex);
                }

                try {
                    await client.SendAsync(message, message.From.Mailboxes.FirstOrDefault(), message.To.Mailboxes);
                } catch (Exception ex) {
                    Assert.Fail("Did not expect an exception in Send: {0}", ex);
                }

                try {
                    await client.SendAsync(options, message);
                } catch (Exception ex) {
                    Assert.Fail("Did not expect an exception in Send: {0}", ex);
                }

                try {
                    await client.SendAsync(options, message, message.From.Mailboxes.FirstOrDefault(), message.To.Mailboxes);
                } catch (Exception ex) {
                    Assert.Fail("Did not expect an exception in Send: {0}", ex);
                }

                try {
                    await client.DisconnectAsync(true);
                } catch (Exception ex) {
                    Assert.Fail("Did not expect an exception in Disconnect: {0}", ex);
                }

                Assert.IsFalse(client.IsConnected, "Failed to disconnect");
            }
        }