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");
}
}