public async Task <bool> SendInvite(string email, Guid userId) { var referral = await StoriesDbContext.Referrals.AddAsync(new Referral() { Code = Guid.NewGuid(), Email = email, ReferrerUserId = userId, ExpiryDate = DateTime.UtcNow.AddDays(7) }); var rowCount = await StoriesDbContext.SaveChangesAsync(); if (rowCount != 1) { return(false); } var mailModel = new MailgunMailModel { To = new List <string> { email }, Subject = "Invitation to join the .Net Signals community", Text = $"You have been invited to join the .Net Signals community.\n\n If you wish to join, go to https://dotnetsignals.com/user/referral/{referral.Entity.Code.ToString()}\n\n .Net Signals Team", Html = $"You have been invited to join the .Net Signals community.<br/><br/> " + $"If you wish to join, click here: <a href=\"https://dotnetsignals.com/user/referral/{referral.Entity.Code.ToString()}\">https://dotnetsignals.com/user/referral/{referral.Entity.Code.ToString()}</a>" + "<br/><br/> .Net Signals Team", }; var response = await MailService.Send(mailModel); return(response.StatusCode == System.Net.HttpStatusCode.OK); }
public async Task <IRestResponse> Send(MailgunMailModel model) { var client = new RestClient(); client.BaseUrl = new Uri(Options.Url); client.Authenticator = new HttpBasicAuthenticator("api", Options.APiPrivateKey); RestRequest request = new RestRequest(); request.AddParameter("domain", "mg.dotnetsignals.com", ParameterType.UrlSegment); request.Resource = "{domain}/messages"; request.AddParameter("from", string.IsNullOrEmpty(model.From) ? "noreply <*****@*****.**>" : model.From); foreach (var to in model.To) { request.AddParameter("to", to); } request.AddParameter("subject", model.Subject); foreach (var cc in model.CC) { request.AddParameter("cc", cc); } foreach (var bcc in model.BCC) { request.AddParameter("bcc", bcc); } foreach (var tag in model.Tags) { request.AddParameter("o:tag", tag); } if (!string.IsNullOrEmpty(model.Text)) { request.AddParameter("text", model.Text); } if (!string.IsNullOrEmpty(model.Html)) { request.AddParameter("html", model.Html); } if (Options.TestMode) { request.AddParameter("o:testmode", "yes"); } if (model.RequireTLS) { request.AddParameter("o:require-tls", "True"); } if (!string.IsNullOrEmpty(model.Campaign)) { request.AddParameter("o:campaign", model.Campaign); } request.Method = Method.POST; var taskCompleteSource = new TaskCompletionSource <IRestResponse>(); var restResponse = client.ExecuteAsync(request, response => { taskCompleteSource.SetResult(response); }); return(await taskCompleteSource.Task); }