Skip to content
This repository has been archived by the owner on Jul 29, 2020. It is now read-only.

mczachurski/MailRetriever

Repository files navigation

MailRetriever

Logo It is a simple SMTP server. It can be run in c# code. It was created for unit tests purposes (espacially BDD tests). You can run SMTP server by one line of code. After that server can inform you when specific email was retrieved. Server has also a list of all received messages.

      using (var server = new SmtpServer(12000))
      {
          // Sending an email...
          SendEmail("receiver@email.test", "subject", "content"); 
          
          // Waiting for email (timeout is 10 seconds)...
          emailMessage = server.WaitForEmailFromAsync("receiver@email.test", 10).Result;
      }

Example of usage in unit test:

  [Fact]
  public void ServerRetrieveEmail()
  {
      EmailMessage emailMessage;
      List<EmailMessage> emailMessages;
      using (var server = new SmtpServer(12000))
      {
          AsyncHelpers.RunSync(() => SendEmail(
              new[] { "john.doe@mailretriever.test", "emily.rose@mailretriever.test" },
              "Simple subject",
              "Email content")
          );

          emailMessage = server.WaitForEmailFromAsync("john.doe@mailretriever.test", 10).Result;
          emailMessages = server.EmailMessages.ToList();
      }

      Assert.Equal(1, emailMessages.Count);
  }
      
  public static async Task<bool> SendEmail(string[] recipientAddress, string subject, string body)
  {
      var mimeMessage = new MimeMessage();
      mimeMessage.From.Add(new MailboxAddress("MailRetriever", "mail.retriever@mailretriever.test"));
  
      foreach (var address in recipientAddress)
      {
          mimeMessage.To.Add(new MailboxAddress(address, address));
      }
  
      mimeMessage.Subject = subject;
      mimeMessage.Body = new TextPart("html")
      {
          Text = body
      };
  
      using (var client = new SmtpClient())
      {
          await client.ConnectAsync("127.0.0.1", 12000, false);
          await client.AuthenticateAsync("mail.retriever@mailretriever.test", "password");
          await client.SendAsync(mimeMessage);
          await client.DisconnectAsync(true);
      }
  
      return true;
  }

For sending email you can use MailKit which is also ASP.NET Core 1 compatible.

AppVeyour status:

branch status
master Build status
develop Build status

About

Simple SMTP server. It can be run in c# code. It's created for unit tests purposes.

Resources

Stars

Watchers

Forks

Packages

No packages published

Languages