public SMTPImpostorMessageReceivedEvent( SMTPImpostorHostSettings hostSettings, SMTPImpostorMessage message) : base(hostSettings.Id, message.Id, message) { HostSettings = hostSettings; }
public ISMTPImpostorHost CreateHost( SMTPImpostorHostSettings settings) { return(new SMTPImpostorHost( _loggerFactory.CreateLogger <SMTPImpostorHost>(), settings, _storeProviders[settings.StoreType ?? _settings.DefaultStoreType].Create(settings.Id, settings.Store) )); }
ISMTPImpostorHost GetSMTPImpostorHost( SMTPImpostorHostSettings hostSettings) { var services = new ServiceCollection() .AddLogging() .AddSMTPImpostor() .AddSMTPImpostorInMemoryMessagesStore() .BuildServiceProvider(); var hostProvider = services.GetRequiredService<ISMTPImpostorHostProvider>(); var host = hostProvider.CreateHost(hostSettings); host.Start(); return host; }
public ISMTPImpostorHost AddHost(SMTPImpostorHostSettings hostSettings) { var host = CreateHost(hostSettings); Hosts = Hosts.Add(host.Settings.Id, host); _events.OnNext(new SMTPImpostorHostAddedEvent(host.Settings.Id)); host.Events.Subscribe(e => _events.OnNext(e)); if (hostSettings.Start) { host.Start(); } return(host); }
public SMTPImpostorHost( ILogger <SMTPImpostorHost> logger, SMTPImpostorHostSettings settings, ISMTPImpostorMessagesStore messages) { _logger = logger ?? NullLogger <SMTPImpostorHost> .Instance; _events = new Subject <ISMTPImpostorEvent>(); Settings = settings ?? throw new ArgumentNullException(nameof(settings)); Messages = messages; _messagesSubscription = Messages.Events.Subscribe(e => _events.OnNext(e)); StoppedEvent = new SMTPImpostorHostStateChangeEvent(settings.Id, SMTPImpostorHostStatus.Stopped); StartedEvent = new SMTPImpostorHostStateChangeEvent(settings.Id, SMTPImpostorHostStatus.Started); ReceivingEvent = new SMTPImpostorHostStateChangeEvent(settings.Id, SMTPImpostorHostStatus.Receiving); ErroredEvent = new SMTPImpostorHostStateChangeEvent(settings.Id, SMTPImpostorHostStatus.Errored); RaiseStateChange(StoppedEvent); }
public ISMTPImpostorHost UpdateHost(Guid hostId, SMTPImpostorHostSettings hostSettings) { var host = Hosts[hostId]; Hosts = Hosts.Remove(hostId); host.Dispose(); host = CreateHost(hostSettings); Hosts = Hosts.Add(hostId, host); _events.OnNext(new SMTPImpostorHostUpdatedEvent(hostId)); host.Events.Subscribe(e => _events.OnNext(e)); if (hostSettings.Start) { Delegates.Retry( () => host.Start(), _logger); } return(host); }
public void messages_max() { var max = 2; var hostSettings = new SMTPImpostorHostSettings( ip: "127.0.0.1", port: 52525, store: new SMTPImpostorMessagesStoreSettings( maxMessages: 2 )); var messages = new List<SMTPImpostorMessage>(); using var host = GetSMTPImpostorHost(hostSettings); using var events = host.Events .OfType<SMTPImpostorMessageReceivedEvent>() .Subscribe(e => messages.Add(e.Data)); using var client = new SmtpClient(hostSettings.IP, hostSettings.Port); for (var i = 0; i < 3; i++) { using var mailMessage = new MailMessage { From = new MailAddress("*****@*****.**"), Subject = $"SUBJECT {i}" }; mailMessage.To.Add("*****@*****.**"); mailMessage.Body = "SOME CONTENT\nSOME CONTENT\nSOME CONTENT\nSOME CONTENT\n"; client.Send(mailMessage); } Assert.AreEqual(max, messages.Count()); Assert.AreEqual("SUBJECT 2", messages[0].Subject); Assert.AreEqual("SUBJECT 3", messages[1].Subject); }
public void receives() { var hostSettings = new SMTPImpostorHostSettings( ip: "127.0.0.1", port: 52525); var expectedCount = 10; var messages = new List<SMTPImpostorMessage>(); using var host = GetSMTPImpostorHost(hostSettings); using var events = host.Events .OfType<SMTPImpostorMessageReceivedEvent>() .Subscribe(e => messages.Add(e.Data)); using var client = new SmtpClient(hostSettings.IP, hostSettings.Port); using var mailMessage = new MailMessage { From = new MailAddress("*****@*****.**"), Subject = "SUBJECT" }; mailMessage.To.Add("*****@*****.**"); mailMessage.CC.Add("*****@*****.**"); mailMessage.CC.Add("*****@*****.**"); //mailMessage.Body = TestResources.HTML_EMAIL; //mailMessage.IsBodyHtml = true; mailMessage.Body = "SOME CONTENT\nSOME CONTENT\nSOME CONTENT\nSOME CONTENT\n"; var alternate = AlternateView.CreateAlternateViewFromString( TestResources.HTML_EMAIL, new ContentType("text/html")); mailMessage.AlternateViews.Add(alternate); var buffer = new byte[100 * 1000]; for (var i = 0; i < buffer.Length; i++) buffer[i] = 0; using (var stream = new MemoryStream(buffer)) { mailMessage.Attachments.Add(new Attachment( stream, new ContentType("application/app") )); for (var i = 0; i < expectedCount; i++) client.Send(mailMessage); } Assert.AreEqual(expectedCount, messages.Count()); var message = messages[1]; Assert.IsFalse(string.IsNullOrWhiteSpace(message.Id)); Assert.AreNotEqual(0, message.Headers); Assert.IsFalse(string.IsNullOrWhiteSpace(message.Subject)); Assert.IsNotNull(message.From); Assert.AreEqual(1, message.To.Count); Assert.AreEqual(2, message.Cc.Count); Assert.IsFalse(string.IsNullOrWhiteSpace(message.Content)); Console.WriteLine("===== HEADERS ====="); Console.WriteLine(string.Join("\n", message.Headers)); Console.WriteLine("===== CONTENT ====="); Console.WriteLine(message.Content); }