Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sparkpost C#API将附件添加到模板_C#_Templates_Sparkpost - Fatal编程技术网

Sparkpost C#API将附件添加到模板

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

我一直在翻阅文档,在互联网上搜索如何向创建的模板添加附件的文档。我正在使用darrencauthon的CSharp Sparkpost来处理API调用。到目前为止,我所拥有的一切都不起作用。是否有人有一个有效的解决方案(可能?)或更好的C#解决方案?我不反对使用不同的图书馆

以下是到目前为止我得到的信息:

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的库,结合我项目的需求,这就是我想到的解决方案