繁体   English   中英

Sendgrid 动态数据未发送到模板

[英]Sendgrid dynamic data not being sent to Template

这就是我发送 email 的方式:

public async System.Threading.Tasks.Task<string> SendInternalEmail(BasicEmailStructureViewModel Structure, List<string> AdditionalVariables, TenantEmailTemplate tenantEmailTemplate, TenantCommunication tenantCommunication, string ReceiverId, string ReceiverEmail, string ReceiverName, string CampaignName)
{
    try
    {

        var client = new SendGridClient(tenantCommunication.SendgridApiKey);
        var message = new SendGridMessage();
        message.SetFrom(new EmailAddress(tenantCommunication.SendgridPrimarySender, tenantCommunication.SendgridPrimarySenderTag));
        message.AddTo(new EmailAddress(ReceiverEmail, $"{ReceiverName}"));
        message.Subject = tenantEmailTemplate.Subject;
        message.SetTemplateId(tenantEmailTemplate.TemplateId);
        List<string> jsonVars = new List<string>();

        var subjectString = @$"""subject"":""{tenantEmailTemplate.Subject}""";

        jsonVars.Add(subjectString);

        foreach (PropertyInfo prop in Structure.GetType().GetProperties())
        {
            var variableString = @$"""{prop.Name}"":""{prop.GetValue(Structure, null)}""";
        }

        for (var i = 0; i < AdditionalVariables.Count; i++)
        {
            jsonVars.Add(AdditionalVariables[i]);
        }
        var flattenList = "{" + string.Join(",", jsonVars) + "}";
        var emailData = Newtonsoft.Json.JsonConvert.DeserializeObject<object>(flattenList);
        message.SetTemplateData(emailData);
        if (CampaignName != null && CampaignName != "")
        {
            message.AddCustomArg("CampaignName", CampaignName);
        }
        var response = await client.SendEmailAsync(message);
        if (response.IsSuccessStatusCode == true)
        {
            return Guid.NewGuid().ToString();
        }
        else
        {
            var errorMessage = response.Body.ReadAsStringAsync().Result;
            return errorMessage;
        }
    }
    catch(Exception e)
    {
        if (e != null)
        {
            return e.Message;
        }
    }
    return "Invalid Email";
}

这个 function 的典型输入是这样的:

var variableString = @$"""verification_link"":""www.website.com?Key={Input.Key}""";

我的email发送正常,但是我设置的变量都没有发送通过。 这大致基于 github 上的模板示例: https://github.com/sendgrid/sendgrid-csharp/blob/main/examples/templates/templates.cs

有没有我可以使用的另一个示例,或者动态发送变量的正确方法是什么?

我认为这不是为动态模板变量构造 JSON 的最佳方法。

您是否可以将变量构建为 object,然后将它们序列化。 喜欢:

var templateData = new {
  subject = tenantEmailTemplate.Subjectm
  otherVariableName = otherVariable
};

string emailData = JsonConvert.SerializeObject(templateData);
message.SetTemplateData(emailData);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM