【问题标题】:Sparkpost C# API add attachments to templatesSparkpost C# API 向模板添加附件
【发布时间】:2017-06-22 16:34:45
【问题描述】:

我一直在翻阅文档并在互联网上搜索以查找有关如何将附件添加到创建的模板的文档。我正在使用 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();

我已验证我可以在没有模板的情况下发送此附件,并且我也已验证我可以在没有附件的情况下发送此模板。所以...电子邮件正在发送;但是,接收到的内容只是模板和替换数据。模板电子邮件没有附件。

【问题讨论】:

    标签: c# templates sparkpost


    【解决方案1】:

    使用 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");
        }
    

    【讨论】:

      【解决方案2】:

      哦,实际上,我现在明白了——您说的是向模板添加附件,而不是附件。

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

      我的库允许您尝试,但这是因为每个模板和非模板电子邮件都被视为“传输”。因此,如果您创建传输,它可以选择添加附件...但是如果您使用模板 id 发送传输,则附件将被忽略。

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

      如果您想测试您是否正确发送附件,请发送不带传输 ID 的传输,而是使用主题和电子邮件正文。如果电子邮件通过并且您收到一个附件,那么您就知道这是因为 SparkPost 的模板/附件限制。

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

      【讨论】:

      • 我刚刚验证过,限制还在。
      • 这里是测试场景的链接。一切都与之前的附件测试相同,只是传递了一个模板 ID 而不是主题/正文。电子邮件将发送,但不包含附件。这告诉我这是 SparkPost 的问题,而不是图书馆的问题。 github.com/darrencauthon/csharp-sparkpost/pull/147/…
      • 感谢您再次调查此问题。我现在已经知道了 Sparkpost API 的当前状态的局限性,我已经完成了一项工作。我请求GET,提取模板的html,然后使用您的库,如:transmission.Content.Html = htmlFromGet
      • 我可以很容易地从任何其他来源获取要替换的 Html,我只是在那里有一些模板,并且不难挂钩对 api 的请求调用以检索它们。跨度>
      【解决方案3】:

      我是此库的主要作者 Darren Cauthon。

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

      // 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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-12-03
        • 1970-01-01
        • 2012-05-04
        • 2014-01-25
        • 2017-05-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多