public async Task DoOperationAsync(RequestTutorMessage message2, IBinder binder, CancellationToken token) { if (_configuration.Search.IsDevelop) //if (bool.Parse(_configuration["IsDevelop"])) { _email = "*****@*****.**"; } var query = new RequestTutorAdminEmailQuery(message2.LeadId); var result = await _queryBus.QueryAsync(query, token); if (result == null) { return; } foreach (var obj in result) { var code = _dataProtectionService.ProtectData(obj.UserId.ToString(), DateTimeOffset.UtcNow.AddDays(5)); var identifierChat = ShortId.Generate(true, false); var url = _urlBuilder.BuildChatEndpoint(code, new { utm_source = "request-tutor-admin-email" }); var commandChat = new CreateShortUrlCommand(identifierChat, url.PathAndQuery, DateTime.UtcNow.AddDays(5)); await _commandBus.DispatchAsync(commandChat, token); var whatsAppLink = new UriBuilder($"https://wa.me/{obj.UserPhone.Replace("+", string.Empty)}") .AddQuery(new { text = $"שובץ לך מורה ל{obj.CourseName} בשם {obj.TutorName}. לשוחח עם המורה לחץ {_urlBuilder.BuildShortUrlEndpoint(identifierChat)}" }); string body = whatsAppLink.ToString(); var message = new SendGridMessage() { Subject = "New Tutor request", HtmlContent = $"<html><body>{body.Replace(Environment.NewLine, "<br><br>")}</body></html>" }; message.AddTo(_email); var emailProvider = await binder.BindAsync <IAsyncCollector <SendGridMessage> >(new SendGridAttribute() { ApiKey = "SendgridKey", From = "Spitball <*****@*****.**>" }, token); await emailProvider.AddAsync(message, token); await emailProvider.FlushAsync(token); } }
public async Task DoOperationAsync(RequestTutorMessage message2, IBinder binder, CancellationToken token) { var query = new RequestTutorEmailQuery(message2.LeadId); var result = await _queryBus.QueryAsync(query, token); foreach (var obj in result) { CultureInfo.DefaultThreadCurrentCulture = obj.TutorLanguage.ChangeCultureBaseOnCountry(obj.TutorCountry); var body = ResourceWrapper.GetString("unread_message_request_email_body"); var code = _dataProtectionService.ProtectData(obj.TutorId.ToString(), DateTimeOffset.UtcNow.AddDays(5)); var identifierChat = ShortId.Generate(true, false); var url = _urlBuilder.BuildChatEndpoint(code, new { utm_source = "request-tutor-email" }); var commandChat = new CreateShortUrlCommand(identifierChat, url.PathAndQuery, DateTime.UtcNow.AddDays(5)); await _commandBus.DispatchAsync(commandChat, token); var request = string.Empty; //TODO - whatsapp link if (!string.IsNullOrEmpty(obj.Request)) { request = ResourceWrapper.GetString("unread_message_request_email_body_lead_request") .InjectSingleValue("Request", obj.Request); } var whatsAppLink = new UriBuilder($"https://wa.me/{obj.StudentPhoneNumber.Replace("+", string.Empty)}") .AddQuery(new { text = ResourceWrapper.GetString("unread_message_request_email_body_whatsapp_text").InjectSingleValue("CourseName", obj.CourseName), }); var identifierWhatsApp = ShortId.Generate(true, false); var commandWhatsApp = new CreateShortUrlCommand(identifierWhatsApp, whatsAppLink.ToString(), DateTime.UtcNow.AddDays(30)); await _commandBus.DispatchAsync(commandWhatsApp, token); var urlShortWhatsApp = _urlBuilder.BuildShortUrlEndpoint(identifierWhatsApp, new { eventCategory = "After tutor Submit", eventAction = "Whatsapp email", eventLabel = $"Tutor{obj.TutorId}, Student {obj.StudentId}" }); body = body.InjectSingleValue("Request", request); body = body.InjectSingleValue("WhatsappLink", urlShortWhatsApp); var htmlBodyDirection = CultureInfo.CurrentCulture.TextInfo.IsRightToLeft ? "rtl" : "ltr"; body = body.Inject(new { Request = request, WhatsappLink = whatsAppLink.ToString(), UserFirstName = obj.TutorFirstName, link = _urlBuilder.BuildShortUrlEndpoint(identifierChat /*, obj.TutorCountry*/), obj.StudentName, obj.CourseName, FirstMessageStudentName = obj.StudentName }); var message = new SendGridMessage() { Subject = ResourceWrapper.GetString("unread_message_request_email_subject").InjectSingleValue("FirstMessageStudentName", obj.StudentName) .Inject(obj), HtmlContent = $"<html><body dir=\"{htmlBodyDirection}\">{body.Replace(Environment.NewLine, "<br><br>")}</body></html>", }; message.AddFromResource(CultureInfo.DefaultThreadCurrentCulture); message.AddTo(obj.TutorEmail); var emailProvider = await binder.BindAsync <IAsyncCollector <SendGridMessage> >(new SendGridAttribute() { ApiKey = "SendgridKey" }, token); await emailProvider.AddAsync(message, token); } }
public static async Task SendEmail( [ActivityTrigger] UpdateUserEmailDto user, [SendGrid(ApiKey = "SendgridKey", From = "Spitball <*****@*****.**>")] IAsyncCollector <SendGridMessage> emailProvider, [Inject] IQueryBus queryBus, [Inject] IUrlBuilder urlBuilder, [Inject] IDataProtectionService dataProtectService, [Inject] IHostUriService hostUriService, CancellationToken token) { var code = dataProtectService.ProtectData(user.UserId.ToString(), DateTimeOffset.UtcNow.AddDays(3)); var uri = hostUriService.GetHostUri(); var questionNvc = new NameValueCollection() { ["width"] = "86", ["height"] = "96", ["mode"] = "crop" }; var q = new GetUpdatesEmailByUserQuery(user.UserId, user.Since); var result = (await queryBus.QueryAsync(q, token)).ToList(); if (result.Count == 0) { return; } var courses = result.GroupBy(g => g.Course).Take(3).Select(s => { var emailUpdates = s.Take(4).ToList(); return(new Course() { Name = s.Key, Url = urlBuilder.BuildCourseEndPoint(s.Key), NeedMore = emailUpdates.Count == 4, Documents = emailUpdates.OfType <DocumentUpdateEmailDto>().Select(document => { var uriBuilder = new UriBuilder(uri) { Path = $"api/image/document/{document.Id}", }; uriBuilder.AddQuery(questionNvc); return new Document() { Url = urlBuilder.BuildDocumentEndPoint(document.Id, new { token = code }), Name = document.Name, UserName = document.UserName, DocumentPreview = uriBuilder.ToString(), UserImage = BuildUserImage(document.UserId, document.UserImage, document.UserName, hostUriService) }; }), Questions = emailUpdates.OfType <QuestionUpdateEmailDto>().Select(question => new Question() { QuestionUrl = urlBuilder.BuildQuestionEndPoint(question.QuestionId, new { token = code }), QuestionText = question.QuestionText, UserImage = BuildUserImage(question.UserId, question.UserImage, question.UserName, hostUriService), UserName = question.UserName, AnswerText = question.AnswerText }) }); }); var templateData = new UpdateEmail(user.UserName, user.ToEmailAddress, user.Language.TextInfo.IsRightToLeft) { DocumentCountUpdate = result.OfType <DocumentUpdateEmailDto>().Count(), QuestionCountUpdate = result.OfType <QuestionUpdateEmailDto>().Count(), Courses = courses }; var message = new SendGridMessage { Asm = new ASM { GroupId = UnsubscribeGroup.Update }, TemplateId = Equals(user.Language, Language.Hebrew.Info) ? HebrewTemplateId : EnglishTemplateId }; templateData.To = user.ToEmailAddress; var personalization = new Personalization { TemplateData = templateData }; message.Personalizations = new List <Personalization>() { personalization }; message.AddCategory("updates"); message.TrackingSettings = new TrackingSettings { Ganalytics = new Ganalytics { UtmCampaign = "updates", UtmSource = "SendGrid", UtmMedium = "Email", Enable = true } }; message.AddTo(user.ToEmailAddress); await emailProvider.AddAsync(message, token); await emailProvider.FlushAsync(token); }