SendInBlue(Brevo) API参数无法正常传递,寻求技术支持
Brevo(原SendInBlue)API 参数不生效问题修复
问题根源
- 内容配置冲突:同时指定
TemplateId和HtmlContent,API会优先使用后台模板内容,自定义的HtmlContent和Subject会被忽略,导致参数无法匹配。 - 变量名不匹配:
HtmlContent中使用{{params.parameter}}、{{params.subject}},但代码里Params添加的是NOME、SENHA,变量名完全对应不上。 - 冗余参数传递:同时在
SendSmtpEmail的Params字段和messageVersions中传递参数,单收件场景无需使用messageVersions,反而会造成解析混乱。
修正后的代码
using System.Diagnostics; using Newtonsoft.Json.Linq; using sib_api_v3_sdk.Api; using sib_api_v3_sdk.Client; using sib_api_v3_sdk.Model; using Task = System.Threading.Tasks.Task; namespace cjuridico.Domain.Models.Email; public static class CadastroEmail { public static async Task EnviarEmail(string destinatario, string mensagem) { Configuration.Default.AddApiKey("api-key", "<omitted>"); var apiInstance = new TransactionalEmailsApi(); // 发件人配置 var sender = new SendSmtpEmailSender("John Doe", "example@example.com"); // 收件人配置 var toList = new List<SendSmtpEmailTo> { new SendSmtpEmailTo("mataveli91@gmail.com", "Guilherme Vianna") }; // 自定义邮件内容(不用模板时保留,用模板则设为null) var htmlContent = "<html><body><h1>Olá {{params.NOME}}, sua senha é {{params.SENHA}}</h1></body></html>"; var subject = "Seus dados de acesso"; // 参数配置:与内容中的变量名严格对应 var emailParams = new JObject(); emailParams.Add("NOME", "Guilherme"); emailParams.Add("SENHA", "Guilherme@123"); // 可选:抄送/密送配置(不需要可删除) var bccList = new List<SendSmtpEmailBcc> { new SendSmtpEmailBcc("example2@example2.com", "Janice Doe") }; var ccList = new List<SendSmtpEmailCc> { new SendSmtpEmailCc("example3@example2.com", "John Doe") }; // 回复地址配置 var replyTo = new SendSmtpEmailReplyTo("replyto@domain.com", "John Doe"); try { // 构建邮件请求:二选一——要么用TemplateId,要么用HtmlContent+Subject var sendRequest = new SendSmtpEmail( sender, toList, bccList, ccList, htmlContent, // 使用模板时设为null null, subject, // 使用模板时设为null replyTo, attachments: null, // 无需附件设为null headers: null, templateId: null, // 使用后台模板时填对应ID,同时注释HtmlContent和Subject emailParams, messageVersions: null, // 单收件场景无需此参数 tags: new List<string>{"mytag"} ); var result = apiInstance.SendTransacEmail(sendRequest); Debug.WriteLine(result.ToJson()); Console.WriteLine(result.ToJson()); } catch (Exception e) { Debug.WriteLine(e.Message); Console.WriteLine(e.Message); } } }
补充说明
如果使用后台创建的模板(TemplateId=3),需确保模板内的变量名与代码中emailParams的键完全一致(比如{{params.NOME}}),同时将HtmlContent和Subject设为null,仅保留TemplateId和emailParams即可。
内容的提问来源于stack exchange,提问作者Guilherme Vianna
相关产品推荐
相关产品推荐

