예제 #1
0
        public async Task <string> WaitForEmailWithConfirmationCode()
        {
            var timeBetweenReceiveAttempts = TimeSpan.FromMilliseconds(100);

            using (var client = new HttpClient())
            {
                MailHogMessage message = null;
                while (message == null)
                {
                    var response = await client.GetAsync(
                        new UriBuilder(this.Services.SmtpServerHttpEndpoint)
                    {
                        Path = "/api/v1/messages"
                    }.Uri);

                    var messages = await MailHogMessage.FromResponse(response.EnsureSuccessStatusCode());

                    // TODO: Improve the predicate to match on more specific attributes.
                    message = messages.OrderByDescending(m => m.Created).FirstOrDefault(m => m.To.Any(to => to.Equals(new MailAddress(this.CurrentUser.Email))));
                    if (message == null)
                    {
                        await Task.Delay(timeBetweenReceiveAttempts);
                    }
                }

                return(message.Body.Trim());
            }
        }
예제 #2
0
            private static async Task <MailHogMessage> FromReader(JsonReader json)
            {
                async Task <string> ReadBody()
                {
                    await json.ReadAsync();

                    var body = string.Empty;

                    while (await json.ReadAsync() && json.TokenType != JsonToken.EndObject)
                    {
                        switch (json.Value)
                        {
                        case "Body":
                            body = await json.ReadAsStringAsync();

                            break;

                        default:
                            await json.SkipAsync();

                            break;
                        }
                    }

                    return(body);
                }

                async Task <MailAddress> ReadMailAddress()
                {
                    await json.ReadAsync();

                    var mailbox = string.Empty;
                    var domain  = string.Empty;

                    while (await json.ReadAsync() && json.TokenType != JsonToken.EndObject)
                    {
                        switch (json.Value)
                        {
                        case "Mailbox":
                            mailbox = await json.ReadAsStringAsync();

                            break;

                        case "Domain":
                            domain = await json.ReadAsStringAsync();

                            break;

                        default:
                            await json.SkipAsync();

                            break;
                        }
                    }

                    return(!string.IsNullOrEmpty(mailbox) && !string.IsNullOrEmpty(domain)
                        ? new MailAddress(mailbox + "@" + domain)
                        : null);
                }

                var message = new MailHogMessage();

                await json.ReadAsync();

                while (await json.ReadAsync() && json.TokenType != JsonToken.EndObject)
                {
                    switch (json.Value)
                    {
                    case "ID":
                        message.Id = await json.ReadAsStringAsync();

                        break;

                    case "From":
                        message.From = await ReadMailAddress();

                        break;

                    case "To":
                        var addresses = new List <MailAddress>();
                        while (await json.ReadAsync() && json.TokenType != JsonToken.EndArray)
                        {
                            addresses.Add(await ReadMailAddress());
                        }

                        message.To = addresses.ToArray();

                        break;

                    case "Content":
                        message.Body = await ReadBody();

                        break;

                    case "Created":
                        message.Created = await json.ReadAsDateTimeAsync();

                        break;

                    default:
                        await json.SkipAsync();

                        break;
                    }
                }

                return(message);
            }