Sparkpost C# API 向模板添加附件

Sparkpost C# API add attachments to templates

我一直在翻阅文档并在互联网上搜索以查找有关如何将附件添加到创建的模板的文档。我正在使用 darrencauthon 的 CSharp-Sparkpost 来处理 API 调用。到目前为止,我所拥有的是行不通的。有没有人有可行的解决方案(可能?)或更好的 C# 解决方案?我不反对使用不同的库。 This is the link to CSharp-Sparkpost

这是我目前得到的:

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。

我的验收测试中有附件支持,在每次发布之前 运行。 link在下面,但是代码应该很简单:

// C#

var attachment = File.Create<Attachment>("testtextfile.txt");
transmission.Content.Attachments.Add(attachment);

https://github.com/darrencauthon/csharp-sparkpost/blob/3a8cb1efbb8c9a0448c71c126ce7f88759867fb0/src/SparkPost.Acceptance/TransmissionSteps.cs#L56

哦,实际上,我现在明白了 -- 您是在谈论向模板添加附件,而不是附件。

我对此的回答是,当我开发这个库时,SparkPost 本身不支持 模板上的附件。

我的图书馆允许你尝试,但那是因为每个模板和非模板电子邮件都被考虑 "transmissions." 所以如果你创建一个传输,它有添加附件的选项......但是如果你使用模板 ID 发送传输,附件将被忽略。

我可以抛出一个错误,或者以某种方式围绕这个限制设计 API,但是如果他们停止忽略附件但我的图书馆抛出一个错误怎么办?随着 SparkPost 网络 API 的发展,我设计了该库以提高灵活性,我不希望我的库成为阻碍。

如果您想测试您是否发送了正确的附件,请发送没有传输 ID 的传输,而是使用主题和电子邮件正文。如果电子邮件通过并且您收到附件,那么您就知道这是因为来自 SparkPost 的 template/attachment 限制。

注意:我将这个答案放在 Stack Overflow 上,这条过时的消息有可能在未来不再有效。

使用 Darren 的库,并结合我的项目的要求,这就是我想出的解决方案。我只是进行额外的 API 调用以获取模板 Html,这样我就可以构建传输而不必发送 template_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");
    }