} //set only via Secret Manager // public Task SendEmailAsync(string email, string subject, string message) // { // return Execute(Options.SendGridKey, subject, message, message, email, email); // } public Task <Response> SendVerificationEmailAsync(string email, string userName, string link, string templateId) { link = Options.BaseUrl + link; var dynamicTemplateData = new templateData { name = userName, button_url = link }; var to = new EmailAddress(email, userName); var from = new EmailAddress("*****@*****.**", "Gamitude"); var msg = MailHelper.CreateSingleTemplateEmail(from, to, templateId, dynamicTemplateData); return(Execute(Options.SendGridKey, msg)); }
// htmlOutput reads the profile data from profile and generates an HTML // coverage report, writing it to outfile. If outfile is empty, // it writes the report to a temporary file and opens it in a web browser. private static error htmlOutput(@string profile, @string outfile) { var(profiles, err) = ParseProfiles(profile); if (err != null) { return(error.As(err) !); } templateData d = default; var(dirs, err) = findPkgs(profiles); if (err != null) { return(error.As(err) !); } foreach (var(_, profile) in profiles) { var fn = profile.FileName; if (profile.Mode == "set") { d.Set = true; } var(file, err) = findFile(dirs, fn); if (err != null) { return(error.As(err) !); } var(src, err) = ioutil.ReadFile(file); if (err != null) { return(error.As(fmt.Errorf("can't read %q: %v", fn, err)) !); } ref strings.Builder buf = ref heap(out ptr <strings.Builder> _addr_buf); err = htmlGen(_addr_buf, src, profile.Boundaries(src)); if (err != null) { return(error.As(err) !); } d.Files = append(d.Files, addr(new templateFile(Name: fn, Body: template.HTML(buf.String()), Coverage: percentCovered(profile), ))); }