Sparkpost C#API将附件添加到模板
我一直在翻阅文档,在互联网上搜索如何向创建的模板添加附件的文档。我正在使用darrencauthon的CSharp Sparkpost来处理API调用。到目前为止,我所拥有的一切都不起作用。是否有人有一个有效的解决方案(可能?)或更好的C#解决方案?我不反对使用不同的图书馆 以下是到目前为止我得到的信息:Sparkpost C#API将附件添加到模板,c#,templates,sparkpost,C#,Templates,Sparkpost,我一直在翻阅文档,在互联网上搜索如何向创建的模板添加附件的文档。我正在使用darrencauthon的CSharp Sparkpost来处理API调用。到目前为止,我所拥有的一切都不起作用。是否有人有一个有效的解决方案(可能?)或更好的C#解决方案?我不反对使用不同的图书馆 以下是到目前为止我得到的信息: var t = new Transmission(); t.Content.From.Email = "from@thisperson.com"; t.Content.TemplateId
var t = new Transmission();
t.Content.From.Email = "from@thisperson.com";
t.Content.TemplateId = "my-template-email";
new Recipient
{
Address = new Address { Email = recipient }
}
.Apply(t.Recipients.Add);
new Attachment
{
Data = //CSVDATA,
Name = "Table.csv",
Type = "text/csv"
}.Apply(t.Content.Attachments.Add);
var client = new SparkPost.Client(Util.GetPassword("sparkpostapikey"));
client.Transmissions.Send(t).Wait();
我已经验证了我可以不带模板发送此附件,也验证了我可以不带附件发送此模板。所以电子邮件正在被发送;但是,接收到的内容只是模板和替换数据。没有模板电子邮件的附件 我是Darren Cauthon,这个图书馆的主要作者 我在验收测试中有附件支持,这些测试在每次发布之前都会运行。链接如下所示,但代码应尽可能简单:
// C#
var attachment = File.Create<Attachment>("testtextfile.txt");
transmission.Content.Attachments.Add(attachment);
/C#
var attachment=File.Create我是Darren Cauthon,这个库的主要作者
我在验收测试中有附件支持,这些测试在每次发布之前都会运行。链接如下所示,但代码应尽可能简单:
// C#
var attachment = File.Create<Attachment>("testtextfile.txt");
transmission.Content.Attachments.Add(attachment);
/C#
var attachment=File.Create哦,事实上,我现在明白了——你说的是向模板添加附件,而不是附件
我的答案是,当我开发这个库时,SparkPost本身不支持模板上的附件
我的库允许您尝试,但这是因为每个模板和非模板电子邮件都被视为“传输”。因此,如果您创建传输,它可以选择添加附件。。。但是,如果您发送带有模板id的传输,附件将被忽略
我可以抛出一个错误,或者以某种方式围绕这个限制来设计API,但是如果他们不再忽略附件,但我的库抛出了一个错误呢?随着SparkPost web API的发展,我设计了这个库以实现灵活性,我不想让我的库成为阻碍
如果你想测试你是否发送了正确的附件,那么发送你的传输时不需要传输id,而需要主题和电子邮件正文。如果电子邮件通过,您收到一个附件,那么您知道这是因为SparkPost的模板/附件限制
注意:我把这个答案放在堆栈溢出上,这个过期的消息将来可能不再有效。哦,事实上,我现在明白了——你说的是在模板中添加附件,而不是附件
我的答案是,当我开发这个库时,SparkPost本身不支持模板上的附件
我的库允许您尝试,但这是因为每个模板和非模板电子邮件都被视为“传输”。因此,如果您创建传输,它可以选择添加附件。。。但是,如果您发送带有模板id的传输,附件将被忽略
我可以抛出一个错误,或者以某种方式围绕这个限制来设计API,但是如果他们不再忽略附件,但我的库抛出了一个错误呢?随着SparkPost web API的发展,我设计了这个库以实现灵活性,我不想让我的库成为阻碍
如果你想测试你是否发送了正确的附件,那么发送你的传输时不需要传输id,而需要主题和电子邮件正文。如果电子邮件通过,您收到一个附件,那么您知道这是因为SparkPost的模板/附件限制
注意:我把这个答案放在堆栈溢出上,这个过时的消息将来可能不再有效。使用Darren的库,结合我项目的要求,这是我提出的解决方案。我只是做了一个额外的API调用来获取模板Html,这样我就可以构建传输,而不必发送模板id
。仍然使用CSharp Sparkpost库进行所有调用。我修改了Darren的示例SendInline程序,如下所示:
static async Task ExecuteEmailer()
{
var settings = ConfigurationManager.AppSettings;
var fromAddr = settings["fromaddr"];
var toAddr = settings["toaddr"];
var trans = new Transmission();
var to = new Recipient
{
Address = new Address
{
Email = toAddr
},
SubstitutionData = new Dictionary<string, object>
{
{"firstName", "Stranger"}
}
};
trans.Recipients.Add(to);
trans.SubstitutionData["firstName"] = "Sir or Madam";
trans.Content.From.Email = fromAddr;
trans.Content.Subject = "SparkPost sending attachment using template";
trans.Content.Text = "Greetings {{firstName or 'recipient'}}\nHello from C# land.";
//Add attachments to transmission object
trans.Content.Attachments.Add(new Attachment()
{
Data = Convert.ToBase64String(System.IO.File.ReadAllBytes(@"C:\PathToFile\ExcelFile.xlsx")),
Name = "ExcelFile.xlsx",
Type = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
});
Console.Write("Sending mail...");
var client = new Client(settings["apikey"]);
client.CustomSettings.SendingMode = SendingModes.Sync;
//retrieve template html and set Content.Html
var templateResponse = await client.Templates.Retrieve("template-email-test");
trans.Content.Html = templateResponse.TemplateContent.Html;
//Send transmission
var response = client.Transmissions.Send(trans);
Console.WriteLine("done");
}
static async Task ExecuteEmailer()
{
var settings=ConfigurationManager.AppSettings;
var fromAddr=设置[“fromAddr”];
var toAddr=设置[“toAddr”];
var trans=新变速箱();
var to=新收件人
{
地址=新地址
{
电子邮件地址
},
替换数据=新字典
{
{“名字”,“陌生人”}
}
};
trans.Recipients.Add(至);
trans.SubstitutionData[“firstName”]=“先生或女士”;
trans.Content.From.Email=fromAddr;
trans.Content.Subject=“SparkPost使用模板发送附件”;
trans.Content.Text=“问候语{{firstName或'recipient'}}\n来自C#land的Hello。”;
//向传输对象添加附件
trans.Content.Attachments.Add(新附件()
{
Data=Convert.ToBase64String(System.IO.File.ReadAllBytes(@“C:\PathToFile\ExcelFile.xlsx”),
Name=“ExcelFile.xlsx”,
Type=“application/vnd.openxmlformats officedocument.spreadsheetml.sheet”
});
控制台。写(“发送邮件…”);
var client=新客户端(设置[“apikey”]);
client.CustomSettings.SendingMode=SendingModes.Sync;
//检索模板html并设置Content.html
var templaterresponse=wait client.Templates.Retrieve(“模板电子邮件测试”);
trans.Content.Html=templateResponse.TemplateContent.Html;
//发送传输
var响应=客户端传输发送(trans);
控制台。写入线(“完成”);
}
使用Darren的库,结合我项目的需求,这就是我想到的解决方案