您好,
最好在自述文件中提供一个易于理解的示例,例如https://sendgrid.com/blog/migrating-app-sendgrids-template-engine/这样简单的示例,因为如果我想写30行,则为tbh的JavaScript代码来发送简单的电子邮件,我不会使用sendgrid。
即使对于有经验的开发人员,您的库也很难使用。
干杯,
为这个愤怒的咆哮而感到抱歉
ps:此示例正是我在寻找的https://sendgrid.com/docs/Integrate/Code_Examples/v2_Mail/nodejs.html ,因此易于使用
你好@julesbou ,
愤怒的咆哮对我很好,特别是如果他们附有解决方案:)
感谢您抽出宝贵的时间告诉我们。
我们目前正在计划下一次迭代的改进,因此您的时机很好!
如果您还有其他特殊要求,请在此主题中告知我们,或者打开其他问题。
谢谢!
我们如何使用助手类? 我想做的就是设置发件人姓名?
@jsgandalf ,
最简单的方法是: https : https : //github.com/sendgrid/sendgrid-nodejs/blob/master/examples/helpers/mail/example。 js#L4
您也可以按照以下步骤构建自己的json: https :
谢谢!
非常有帮助! 这应该在自述文件中!!
@jsgandalf @thinkingserious我也觉得该库使用起来很令人沮丧。 我正在尝试发送模板电子邮件。 我发现这里的例子不是很有帮助。 我对如何设置“发件人”和“发件人”电子邮件地址感到困惑,该代码甚至不发送我的电子邮件。 在过去的三天里,我一直在挠头。 有什么帮助吗?
感谢您的反馈@bcootner。 您的请求有助于解决此问题。 这是我渴望解决的问题。
同时,希望该示例可以帮助您:
var sg = require('sendgrid').SendGrid(process.env.SENDGRID_API_KEY)
function helloTemplate(){
var helper = require('sendgrid').mail
from_email = new helper.Email("[email protected]")
to_email = new helper.Email("[email protected]")
subject = "Hello World from the SendGrid Node.js Library"
content = new helper.Content("text/plain", "some text here")
mail = new helper.Mail(from_email, subject, to_email, content)
// The constructor above already creates our personalization object
// -name- and -card- are substitutions in my template
substitution = new helper.Substitution("-name-", "Example User")
mail.personalizations[0].addSubstitution(substitution)
substitution = new helper.Substitution("-card-", "Denver")
mail.personalizations[0].addSubstitution(substitution)
mail.setTemplateId("YOUR_TEMPLATE_ID")
return mail.toJSON()
}
function send(toSend){
//console.log(JSON.stringify(toSend, null, 2))
//console.log(JSON.stringify(toSend))
var sg = require('sendgrid').SendGrid(process.env.SENDGRID_API_KEY)
var requestBody = toSend
var emptyRequest = require('sendgrid-rest').request
var requestPost = JSON.parse(JSON.stringify(emptyRequest))
requestPost.method = 'POST'
requestPost.path = '/v3/mail/send'
requestPost.body = requestBody
sg.API(requestPost, function (response) {
console.log(response.statusCode)
console.log(response.body)
console.log(response.headers)
})
}
send(helloTemplate())
如果您需要其他帮助,请与我们联系。
@thinkingserious感谢您的时间和周到的回复。 我有以下代码:
var sg = require('sendgrid').SendGrid("SG.**** .. ***6o");
function welcomeTemplate() {
console.log("template")
var helper = require('sendgrid').mail
from_email = new helper.Email("[email protected]")
to_email = new helper.Email("[email protected]")
subject = "Hello World from the SendGrid Node.js Library"
content = new helper.Content("text/plain", "some text here")
mail = new helper.Mail(from_email, subject, to_email, content)
substitution = new helper.Substitution("-Name-", "bcootner")
mail.personalizations[0].addSubstitution(substitution)
mail.setTemplateId("5a****-*******-******-9") //The ID of my Transactional Template
return mail.toJSON()
}
function sendMail(toSend) {
console.log("Send")
var sg = require('sendgrid').SendGrid("SG.***....****o")
var requestBody = toSend
var emptyRequest = require('sendgrid-rest').request
var requestPost = JSON.parse(JSON.stringify(emptyRequest))
requestPost.method = 'POST'
requestPost.path = '/v3/mail/send'
requestPost.body = requestBody
sg.API(requestPost, function (response) {
console.log(response.statusCode)
console.log(response.body)
console.log(response.headers)
})
}
然后,我用sendMail(welcomeTemplate())
调用此代码,但这不起作用。 “模板”和“发送”出现在日志中,但没有显示statusCode,正文或标题,没有接收到电子邮件,并且仪表板上也没有任何显示。
在requestPost.body = requestBody
,您可以做console.log(JSON.stringify(requestBody))
然后告诉我您得到了什么。
@thinkingserious经过一些调试后,似乎在var emptyRequest = require('sendgrid-rest').request
行之后没有任何内容打印到日志中。 首先记录“模板”,然后大约5分钟后打印“发送”(如果我取消注释您在send函数中注释的行,则可以正常工作)。 这个require语句我缺少什么吗,我只是做了npm install sendgrid
请尝试以下方法:
A.创建一个名为post.json的文件,其中包含以下负载:
{"content":[{"type":"text","value":"Hello, World!"}],"from":{"email":"[email protected]"},"personalizations":[{"subject":"Hello, World!","to":[{"email":"[email protected]"}]}]}
B.替换示例电子邮件
C.运行以下命令:
curl -X "POST" "https://api.sendgrid.com/v3/mail/send" \
-H "Authorization: Bearer $SENDGRID_API_KEY" \
-H "Content-Type: application/json" \
-d @post.json
D.用您的API KEY替换$ SENDGRID_API_KEY,或将您的API密钥添加到名为SENDGRID_API_KEY的环境变量中
@thinkingserious我收到了该测试电子邮件,我也能够使Hello Test正常工作,只是这些模板不起作用。
编辑:所以我用var emptyRequest = sg.emptyRequest()
代替了var emptyRequest = require('sendgrid-rest').request
并发送了电子邮件,模板设计或图像中没有任何格式。
@bcootner ,
不幸的是,我无法重现您的错误,因此我尝试帮助逐步解决可能出现的问题。 由于您可以通过curl发送电子邮件,因此这意味着您的API密钥很好。 模板ID可能有问题?
如果删除mail.setTemplateId("5a****-*******-******-9")
电子邮件会发送吗?
@thinkingserious因此,如果我删除setTemplateID,它将发送测试“ SendGrid Node.js库中的Hello World”。
我不确定您是否看到了我的编辑,但是通过将var emptyRequest = require('sendgrid-rest').request
替换var emptyRequest = sg.emptyRequest()
来发送模板中的文本,但是没有格式设置(没有字体,没有图像)。 我现在从控制台获得以下打印。
2016-07-13T00:01:07.514157+00:00 app[web.1]: date: 'Wed, 13 Jul 2016 00:01:07 GMT',
2016-07-13T00:01:07.514159+00:00 app[web.1]: connection: 'close',
2016-07-13T00:01:07.514157+00:00 app[web.1]: date: 'Wed, 13 Jul 2016 00:01:07 GMT',
2016-07-13T00:01:07.514158+00:00 app[web.1]: 'content-type': 'text/plain; charset=utf-8',
2016-07-13T00:01:07.502390+00:00 app[web.1]: 202
2016-07-13T00:01:07.502454+00:00 app[web.1]:
2016-07-13T00:01:07.514155+00:00 app[web.1]: { server: 'nginx',
2016-07-13T00:01:07.514159+00:00 app[web.1]: connection: 'close',
2016-07-13T00:01:07.514161+00:00 app[web.1]: 'x-frame-options': 'DENY' }
有些事情使我认为“文本/纯文本”有问题,但我不确定。 再次感谢!
嘿@bcootner ,我也遇到了同样的问题,
_Params_
{
":name": "someName",
":email": "someEmail"
}
。 请注意, :email
和:name
是我在电子邮件模板中设置变量的方式,可以是-email-
或其他任何形式 let sendTemplateMail = (from, to, subject, message, template, templateVariables, successCallback, errorCallback) => {
var sg = require('sendgrid').SendGrid(process.env.SENDGRID_API_KEY),
helper = require('sendgrid').mail,
content_text = new helper.Content("text/plain", message),
content_html = new helper.Content("text/html", message),
request = sg.emptyRequest(),
email_to = new helper.Email(to),
email_from = new helper.Email(from),
mail = new helper.Mail(email_from, subject, email_to, content_text),
personalization = new helper.Personalization();
personalization.addTo(email_to);
personalization.setSubject(subject);
mail.setTemplateId(template);
mail.addContent(content_html);
for(var key in templateVariables) {
if(templateVariables.hasOwnProperty(key)) {
var substitution = new helper.Substitution(key, templateVariables[key]);
personalization.addSubstitution(substitution);
}
}
mail.addPersonalization(personalization);
request.method = 'POST';
request.path = '/v3/mail/send';
request.body = mail.toJSON();
sg.API(request, (json) => {
if(json.statusCode >= 300) {
errorCallback(json);
} else {
successCallback(json);
}
});
}
该文档确实需要一些重构,包括基本的简单示例。 希望我的功能可以帮助您:)
@ByEmke感谢您的支持! 您能否通过[email protected]给我们发送电子邮件,
关于文档,重构以及邮件帮助程序本身都是这样。 我们一直在收集您的所有反馈,并对下一次迭代感到很兴奋。
另外,一个很大的困惑是您在使用模板时仍然需要设置内容。 幸运的是,这种情况很快就会改变。
@bcootner我想你钉了它。 您需要content_html = new helper.Content("text/html", message)
。 幸运的是,这一要求将在几天后消失,我们的团队目前正在更改此行为,因此,当您指定模板时,您将不再需要设置内容。
@ByEmke @thinkingserious感谢您在此问题上的帮助,昨晚我设法将其与以下代码一起使用:
var sg = require('sendgrid').SendGrid("SendGrid API Key" or <environment variable>)
function sendEmail(tempID){
var helper = require('sendgrid').mail;
from_email = new helper.Email("[email protected]")
to_email = new helper.Email("[email protected]")
subject = "Dummy Subject"
content = new helper.Content("text/html", "dummy content")
mail = new helper.Mail(from_email, subject, to_email, content)
substitution = new helper.Substitution("-name-", "User's Name")
mail.personalizations[0].addSubstitution(substitution)
mail.setTemplateId(tempID)
var requestBody = mail.toJSON()
var requestPost = JSON.parse(JSON.stringify(sg.emptyRequest()))
requestPost.method = 'POST'
requestPost.path = '/v3/mail/send'
requestPost.body = requestBody
sg.API(requestPost, function (response) {
console.log(response.statusCode)
console.log(response.body)
console.log(response.headers)
})
}
再次感谢!
我也觉得文档很难遵循,特别是在使用模板和其他功能时。
我更喜欢使用request.body = {}语法而不是helper()语法,因为这会使事情变得更加冗长且不易阅读(至少对我而言)。
我花了很多时间浏览文档,测试更改,查看示例,然后再次尝试来到这里,发现使用模板时您需要设置内容,尽管文档另有说明。 啊这样的东西会让你发疯。 无论如何, @@ ByEmke都提供了一个有效的示例,
@peterkuiper (或者我应该说亚当:))
感谢您的反馈,我们对如何使库文档变得更好非常感兴趣。
明确地说,您是指这些吗? https://github.com/sendgrid/sendgrid-nodejs/blob/master/USAGE.md
关于内容问题(我们所有人都听说过:)),这几乎是固定的。 我们将向API部署一个发行版,该发行版在使用模板时不需要设置内容。 我们希望更改将使模板体验更好。
@thinkingserious我正在检出sendgrid.com上的文档(即https://sendgrid.com/docs/API_Reference/Web_API_v3/Mail/index.html),而我应该直接去Github。 我跳过了此仓库的自述文件,查看了示例,完全错过了USAGE.md(我很糟糕)。 USAGE.md文件应该是应该放在sendgrid.com上的文件,因为它具有我的首选格式:)仍不确定使用模板时的一些最佳做法,但我希望自己能弄清楚或在文件中找到它。文档。
我正在浏览该文件,并且发现了一个使我感到困惑的随机例子:
var request = sg.emptyRequest()
request.queryParams["start_time"] = '1'
request.queryParams["limit"] = '1'
request.queryParams["end_time"] = '1'
request.queryParams["offset"] = '1'
request.method = 'GET'
request.path = '/v3/suppression/blocks'
sg.API(request, function (response) {
console.log(response.statusCode)
console.log(response.body)
console.log(response.headers)
})
起始时间,限制,结束时间和偏移量是什么类型,它们是什么意思? 还有更多queryParams吗? 而且为什么它不是request.body?
有一个指向用户指南的链接(完全没有帮助),而应有一个指向API文档的链接,该链接可以清除https://sendgrid.com/docs/API_Reference/Web_API_v3/blocks.html。
因此,您必须反复尝试找出在哪里可以找到所需的信息。
优秀的反馈@peterkuiper!
我也想吐给你。 请将您的T恤尺寸和邮寄地址发送给我们[email protected]。
我们将更新USAGE.md文档,以包括查询和响应主体的描述。
关于模板,计划是像我们对邮件端点所做的那样创建一个助手,并附有常见用例的示例。 此外,还有一个修复程序可以解决,该问题使您在使用模板时不必指定内容。 这是造成混乱的主要原因。
@thinkingserious很酷,谢谢:)发送电子邮件!
当我在使用它时,我发现还有其他东西也与最佳实践有关(这给我的团队造成了一些混乱)。 我的一个团队成员为某些功能(例如,验证电子邮件)创建了模板,并添加了verify-nl,verify-en等。因此,每个模板基本上都是相同的,唯一的区别是文本(不同的语言)。 我已经看到<%subject%>和<%body%>并找不到任何引用(可能是我自己的TL; DR),所以我认为这是使用API时发生的内部替换。
我很好奇什么是“正常”的做法:
当您更改模板的某些部分时,似乎使用这种方法可能会导致很多工作。 不知道您是否能够创建“模板模板”(即页眉/页脚/任何部分)。 另外,当您使用多种不同的语言时,可以轻松达到300个模板的限制(在我们的情况下这不是问题)。
希望这个问题有意义:)
@peterkuiper ,
我不知道,但是我已经塞了一些塞子。 我会以发现的结果回应。 谢谢!
@thinkingserious我最终使用了2.0.0
,我非常喜欢它的工作方式:
var client = require("sendgrid")("key");
client.send({
to: "[email protected]",
from: "[email protected]",
subject: "subject",
text: "hello"
// Or using the html property:
// html: "Hello <strong>World!</strong>!"
}, fn);
我正在寻找版本3.x.x
样子。 我发现当前的示例确实令人困惑。
很好的反馈@IonicaBizau!
我们一定会考虑您对下一次迭代的想法。
@thinkingserious太好了! 不过,我想知道在3.x.x
会是什么样子。
由于此客户端是从头开始重新创建以与v2邮件终结点分离并允许访问v3终结点的,因此没有一对一的映射。
就是说,邮件帮助程序的目的是使呼叫可以像使用v2一样容易。 我们还不存在,我们回到开始并期待更多的迭代。
@thinkingserious我确实看到了,但是我不喜欢以下几点:
var
或let
或类似的关键字声明),所以令人困惑。 例如: from_email = new helper.Email("[email protected]")
而不是var from_email = ...
new helper.Email
用作电子邮件资源是非常不友好的。 可以将其包装在模块内部的较低级功能中。 Content
, Mail
等也是如此。method
, path
和body
还是很不友好。err, data, ...
格式(而不是响应)。简而言之,恕我直言,_quick start_是用于发送电子邮件的底层实现。 对于更深层次的功能,它可能很有用,但对于快速入门来说绝对不是。 😁
非常感谢您提供的出色服务和模块。 ✨
@IonicaBizau ,
很棒的反馈,谢谢!
在构建邮件帮助程序的下一个迭代时,我们一定会参考您的想法。
没错,第一个版本是API的精简包装。 该计划是根据社区反馈逐步改善其功能,就像您所做的一样!
为了您对社区的支持和贡献,我们想给您一些赃物。 请给我们发送电子邮件至[email protected],其中包含您的T恤尺寸和邮寄地址。
请随时根据需要添加其他反馈。 再次感谢!
@IonicaBizau
您还可以执行以下操作:
var sg = require('sendgrid').SendGrid('API_KEY');
var request = sg.emptyRequest()
request.body = {
"content": [
{
"type": "text/html",
"value": "<html><p>Hello, world!</p></html>"
}
],
"from": {
"email": "[email protected]",
"name": "My Name"
},
"personalizations": [
{
"to": [
{
"email": "[email protected]",
"name": "John Doe"
}
]
}
],
"template_id": "TEMPLATE_ID",
};
request.method = 'POST'
request.path = '/v3/mail/send'
sg.API(request, function (response) {
console.log(response.statusCode)
console.log(response.body)
console.log(response.headers)
});
我更喜欢这种语法而不是辅助语法。 看一下示例,它们对我有很大帮助。
https://github.com/sendgrid/sendgrid-nodejs/blob/master/examples/mail/mail.js
高温超导
@thinkingserious哇! 一定会的。 谢谢,很高兴为您提供帮助! 😁
@peterkuiper我也尝试过,但是我想我将text/html
替换html
出错了,内容显示为附件。 然后,我决定降级该版本。
但是,这仍然看起来很底层( request.method = ...
,在content
数组中发送MIME类型,在回调中发送response
参数,等等)。
谢谢@peterkuiper!
我上周在自述文件中添加了示例样式:)
@IonicaBizau ,
是的,这些低级的东西将很快被隐藏。
@thinkingserious很高兴听到请求的内容即将被隐藏👍
在遵循@IonicaBizau的伟大建议之后,如果可能的话,另一个建议是隐藏“个性化”的实现细节。 例如,执行以下操作:
var sg = require('sendgrid').SendGrid('API_KEY');
sg.addTo(x);
sg.addBcc(email);
sg.addBcc(email);
sg.addHeader(header);
似乎没有必要通过SDK公开此级别的详细信息。
同样,不确定这是否已经是一个功能,但是能够链接这些调用会很棒:
var sg = require('sendgrid').SendGrid('API_KEY');
sg.addTo(x)
.addBcc(email)
.addBcc(email)
.addHeader(header)
.send();
谢谢并保持良好的工作👍
@thinkingserious您提到低级要求的内容将很快被隐藏,你们是否已经为此计划了什么? 我昨天在考虑这个问题,尽管可以很好地访问整个API,但是您也可以使用sendgrid-rest
。 这样,该库所需要做的就是允许您发送电子邮件,因此仅公开电子邮件发送API。
那是您分开的关注点,并稍微缩小了此程序包的范围,从而允许使用链接等更简洁的API,例如
@adambuczynski ,
我们的计划是通过助手执行抽象层。 邮件是第一个,但是在不久的将来,我们计划为子用户管理和模板添加一个。 但是首先,我们需要完善邮件助手,并使其成为标准。
没错,该库只是sendgrid-rest上的一个非常薄的层,仅添加示例,USAGE文件和单元测试(这些都是使用Swagger定义自动完成的[我们也希望开源)。 从长远来看,我们设想为所有端点实施帮助程序代码,并通过两种方式均进行数据验证,并且该功能的核心也将自动实现。 工作流程和用例将是手工制作的。
在接下来的几周/几个月内,我们将在GitHub上公开此路线图,以获取更多反馈。
同样,到8月底,我们将在此库中增加对传入解析Webhook的支持。
感谢您提出这个问题,并希望我的答复能引起您和社区的更多反馈。 我们希望这是一个由社区驱动的库,由SendGrid支持和领导。
感谢更新@thinkingserious。 我很乐意在sendgrid nodejs库中扮演一个角色。
为什么在此阶段要添加Parse支持? 我以为Parse服务将于明年1月停用。
@thinkingserious我忘了提一下,如果有什么我可以帮忙的,就ping我吧。 如果可以的话,我很乐意破解。 :微笑:
@adambuczynski真是个好消息! 另外,您的拉取请求越来越接近顶部。 我想我可以在下周初将其合并。
关于Parse,我们尚未决定正式退休。 在库中添加支持是我们测试的一部分,以确定我们是否继续进行下去。
@IonicaBizau ,
谢谢! 您的支持是极大的赞赏!
有没有一种使用邮件助手来设置多个收件人的方法?
我注意到helper.Mail(from_email, subject, to_email, content)
使用personalization.addTo
来设置接收者。.我相信这仅适用于1个接收者,而不是一组接收者(也许我错了),并且助手没有提供setTo
函数(理想的设置方法)。
我看到如果我自己用let personalization = new helper.Personalization();
设置个性化设置,我可以做personalization.tos = [email, email]//email=new helper.Email(email_address, name)
,这样安全吗? 在将来的版本中可能会更改吗?
@ albert-the-creator我按如下方式使用它:
//Helpers
const Mail = sendgrid.mail.Mail;
const Email = sendgrid.mail.Email;
const Personalization = sendgrid.mail.Personalization;
//Create new mail object
let mail = new Mail();
//Create recipients
let recipients = new Personalization();
recipients.addTo(new Email(data.to, data.toname));
//Set recipients
mail.addPersonalization(recipients);
我认为您可以通过重复recipients.addTo
行来添加多个收件人,例如在循环中。
我确实发现这种方法很冗长,分为Email和Personalization类。 有时,您只想添加一个电子邮件地址并将其发送出去,感觉就像您需要很多代码行才能完成该任务。
@thinkingserious helpers API是我也很感兴趣的东西,当我再次有空的时候可以重构/改善它:)
@adambuczynski ,
太棒了,当您决定开始时,请ping我。 或者,如果我们在您之前开始讨论,那么我会ping您。
我使用了@bcootner的代码,效果很好。 但是,有一个正确的官方示例说明如何与此节点插件一起使用模板,将是非常不错的。
@otmezger ,
感谢您的跟进!
我本周正在处理该示例,您将在README中找到它的链接。
我不使用模板帮助器,但是我将分享通过帮助器load
方法加载HTML和文本格式模板以及部分信息的方法:
/**
* Load an email (both plain text and html)
*/
load(email, data, req) {
//Get filenames
const PARTIAL_HTML = path.resolve('./app/components/' + email + '.html');
const PARTIAL_TEXT = path.resolve('./app/components/' + email + '.txt');
//Append some globals
if (req) {
Object.assign(data, {
app: {
title: req.app.locals.APP_TITLE,
version: req.app.locals.APP_VERSION,
url: req.app.locals.APP_BASE_URL,
},
date: {
year: moment().format('YYYY'),
date: moment().format('DD-MM-YYYY'),
},
});
}
//Return promise
return Promise.all([
Promise.all([
readFile(TEMPLATE_TEXT, 'utf8'),
readFile(PARTIAL_TEXT, 'utf8'),
]).spread((template, partial) => {
return template.replace('{{partial}}', partial);
}),
Promise.all([
readFile(TEMPLATE_HTML, 'utf8'),
readFile(PARTIAL_HTML, 'utf8'),
]).spread((template, partial) => {
return template.replace('{{partial}}', partial);
}),
]).then(result => result.map(contents => replaceData(contents, data)));
},
然后可以按如下方式使用它来获取准备好与Sendgrid一起使用的对象:
let email = mailer.load('user/emails/verify-email-address', data, req)
.spread((text, html) => ({
to: user.email,
from: req.app.locals.EMAIL_IDENTITY_NOREPLY,
subject: 'Verify your email address',
text, html,
}));
您可以轻松地修改示例以使用类似Handlebars模板的东西。 在上面的示例中, replaceData
帮助器是一个简单的函数,它用提供的数据替换了类似车把的标签。
我不确定这是否相关,但是通过不使用“邮件帮助程序”,我节省了无数的时间。 这是在感到沮丧之后,我故意降级到2.0。 我只是使用一种工厂类型的函数来生成有效的V3 JSON,现在对V3 API的改进感到非常兴奋(因为我现在可以实际使用它们了)。
一开始我也为此感到困惑。 我觉得
帮助程序可能会变得更加高效,并且更易于使用。 我会
甚至争论说也许他们不应该成为核心sendgrid模块的一部分,
为了分离问题并允许人们选择使用它们。
我再看看它们,看看是否可以提出一些具体建议
建议。
2016年8月26日星期五,05:48肖恩·林多[email protected]写道:
我不确定是否通过示例,但是不使用“邮件助手”
我为自己节省了不可估量的时间。 这是这样后
沮丧我故意降级到2.0。—
您收到此邮件是因为有人提到您。
直接回复此电子邮件,在GitHub上查看
https://github.com/sendgrid/sendgrid-nodejs/issues/252#issuecomment -242479491,
或使线程静音
https://github.com/notifications/unsubscribe-auth/AAd8Qu5iRLFQwoKlRd2fP5oioT1uLqB6ks5qjdV2gaJpZM4JAiac
。
@seanlindo ,
感谢您抽出宝贵的时间提供反馈!
这是不使用邮件助手的情况下使用此库的示例: https :
Mail Helper是第一个版本,我们依靠您的反馈来帮助我们改进下一个版本。 您是否介意分享您遇到的特定问题,以便我们创建故障单以解决它们?
另外,我还要对我们的积压任务进行投票,以改进“邮件助手”,以帮助将其排入队列。 谢谢!
@adambuczynski ,
我看到你的威力还在继续:)
我期待您的反馈,我知道这会很棒!
@julesbou ,
我们已经启动了USE_CASES.md文件,我们将在其中提供常见用例的示例。 首先是交易模板:)
我期待您的反馈,我知道这会很棒!
👻
@thinkingserious好的! 给我一天左右的时间,我将为您提供一个具体的例子。
这是我最喜欢的线程之一:)
我认为您的反馈对于该库的下一个迭代至关重要,这可能是一个重大变化。 如果您有时间,请看看我们的建议吗? https://github.com/sendgrid/sendgrid-nodejs/issues/290
谢谢!
@thinkingserious我终于明白了v3中引入的所有Sendgrid helper类让我如此烦恼...它们太多了,它们使发送电子邮件变得不必要的复杂:P
我不想彻底检查Sendgrid的所有代码,因此我决定制作一个简单的包装, sendgrid-mailer 。
尽管Sendgrid的帮助程序类在后台很有用,但是对于创建和验证电子邮件模型而言,我认为不应仅仅为了与API交互而强迫我们使用它们。 我发现它使编写Node应用程序变得比应做的更为复杂,并且助手的命名可能非常混乱,例如Mail
vs Email
我认为基本示例很好地说明了这个问题:
https://github.com/sendgrid/sendgrid-nodejs#with -mail-helper-class
对于“我想发送电子邮件”这样的基本内容,这似乎太令人费解了。 它要求您加载8个不同的依赖项并编写15行代码,然后才能发送电子邮件。
但是,不使用帮助器类可能会更糟,因为那样一来,您就必须知道电子邮件JSON请求的必需结构并自己正确地填充它。 一个错误将很容易破坏请求。
因此,我从一个简单易用的API帮助程序中抽象了所有帮助程序类逻辑,以便再次使用Sendgrid发送电子邮件变得轻松又有趣:)
最基本的示例变为:
//Load mailer and set API key (only needed once)
const mailer = require('sendgrid-mailer').config(API_KEY);
//Create email data
const email = {
to: '[email protected]',
from: 'Someone <[email protected]>',
subject: 'Hello world',
text: 'Hello plain world!',
html: '<p>Hello HTML world!</p>',
};
//Send away
mailer.send(email); //Returns promise
该请求是在后台构造的,并且透明地使用Sendgrid的助手。
它还支持发送多封电子邮件,在需要进一步自定义的情况下公开Sendgrid对象,还接受Sendgrid Mail
实例,并接受to / from字段的多种格式,例如Name <[email protected]>
或具有名称/电子邮件属性的对象。 有关更多详细信息,请参见自述文件。
仍有改进的余地,但是我想在这里与那些希望使用Sendgrid API而又不被它淹没的人们分享这个解决方案。
希望它对某人有用,也许它可以提供一个更简单的API来为该库的未来提供一些指导:)
cc @julesbou有点晚,但是我希望您仍然可以找到它的用处。
@adamreisnz认真,谢谢。
我通过sendgrid发送电子邮件的后台工作是使用v4.0.7,它已经足够复杂了。 我升级到最新版本,可惜一切都坏了。 发送电子邮件的复杂性令我感到沮丧,我什至不去更新。
综上所述,这正是我所寻找的。 周末我会试一试。
干杯!
@jamesdixon我仍然停留在v3.xx上,也不想升级:)
希望您会发现它有用。 让我知道它如何为您工作,如果有任何重大遗漏,谢谢!
@adamreisnz ,
这真是太棒了,感谢您与我们的社区分享它:)
tldr; 我们的助手课程尚未结束,您已经击败了我们,前往了我们的目的地:)
我们完全同意您的想法,这是v3库更新的阶段,当前我们正在所有7个SDK中进行开发。 请参阅此处的Mail Helper Enhancement项目
目前,我们正在完善C#库。 要获得有关我们对该Node.js库计划的具体示例,请参阅this 。 我们希望在几天之内将其释放。
因此,我有一个建议:
您介意将解决方案添加到这里的Mail Helper中(类似于我们在C#中所做的事情)吗? 我认为在这种情况下,您的工作将会取得更大的影响。 如果没有,那就没有问题。 由于您已按照MIT许可发布项目,因此,如果我们从您的良好工作中借来了一点,希望您能原谅我们。
如果您决定分开进行工作,请在“社区库”部分下的此处添加链接?
感谢您一直以来的大力支持。 你摇滚!
@thinkingserious很高兴听到您正在考虑以相同的方式前进。 C#的示例看起来更好,但是我认为对于JS实现来说仍然有些复杂。 制作所有类不一定总是使用JS的最佳方法。
至于您的建议,由于我仍在使用内部帮助类,因此我不知道将其移植到官方库中实际上有多少有用。 我可能会更倾向于帮助进行大型重写(例如v5),并从头开始,从用户和Node社区中获取意见,并提出一个很棒的API,该API既易于使用,又在需要时具有灵活性。
但是,如果与此同时您想从我的包装器中借用一些代码以在官方库中使用,则一定要这样做:)我将在该页面中将链接添加到我的包装器中🎉
实际上,我认为将项目分成两个包可能是个好主意,一个较低的级别包括与API交互的请求逻辑,一个较高的级别仅用于发送电子邮件,类似于我创建的。
较低级别的包可用于需要完全访问API的人员,而邮件程序包则适合仅希望发送电子邮件的人员。 当然,在后台,邮件程序将使用API包。
@thinkingserious您
@adamreisnz ,
与往常一样,感谢您的周到反馈。
我不确定目前是否需要拆分项目。 我认为,使用当前的帮助器模型可以达到类似的结果。 也就是说,我愿意在将来的版本中探索新的体系结构,我很乐意让您参与其中。
希望社区中的其他一些人能够参与进来。
我将对此进行更深入的考虑,并在需要实施更新的Mail Helper时重新参与。
再次感谢您的支持以及将链接添加到我们的文档中!
这是分离关注点的问题。 您可以在主库中包括一个帮助程序/包装程序,以便于邮寄,但我认为这是将两个单独的问题混合在一起,导致两者可能造成的损害或不必要的麻烦。 将它们分开可以使消费者选择他们需要的库(或两者都选),并且由于边界明确,可能会使两个库的开发更加容易。
我认为Node和npm模块的本质是尽可能地将关注点分离,并让每个包都执行特定任务(并擅长于此!)。 刚开始使用Node时,我也必须习惯这一点,但是一旦我做到了,我就喜欢开发它提供的干净,简单的程序包的自由和能力。
期待听到社区的一些意见。
好吧,你绝对有说服力的说服力:)
非常感谢您抽出宝贵的时间来阐述。
我已经很期待回到这个库的工作,现在,您让我非常兴奋,可以重新与您和社区一起使用此SDK。
太好了,让我知道您什么时候打算去做:)
我要休假4周,这意味着我最终将有一些空闲时间来做一些开源项目上的工作🌴
@adamreisnz ,
恭喜!
更高层次的“邮件程序包”正是我们想要的。 只需发送一些电子邮件。
在最后一个版本中,它简直太简单了,而现在却变得一团糟。 “基本”示例当前定义了8个var ,需要特殊的构造函数。 在易用性方面向后退了一大步。
应该像
sendgrid.send({
from: fromEmail,
fromName: fromName,
to: toEmail,
subject: 'Hello'
...
})
.then(...)
.catch(...)
.finally(...)
零文档是必需的,这只是我们可以复制粘贴并继续进行复制的一个示例。 这是SendGrid对我们团队的主要价值,不幸的是,现在它已经丢失了。
@eeosk看看https://github.com/sendgrid/sendgrid-nodejs/issues/252#issuecomment -265934147👍
@adamreisnz看起来很棒; 非常明显的设计决策。 希望您能使用SendGrid工资单!
@thinkingserious,请认真考虑将主要文档指向@adamreisnz项目,因为它极大地简化了所有操作,如果我今天早些时候知道它,那么使用imho是一种过度设计的Java- JS中的启发式api。 请给您的用户他们想要的,而不是您认为他们想要的:-)
另外,请注意,由于V2 API已经失效,如果其他开发人员开始更频繁地出现在这里,我也不会感到惊讶,因为新帐户将被迫使用V3 API。 就个人而言,我尝试的第一件事是使用nodemailer(其sendgrid传输仍可使用v2进行工作)过去曾对数十个项目有意义,但这次却花了很多时间。 如果我不得不考虑到nodemailer在node社区中的流行,我将不会是唯一在接下来的几个月中最终会遇到这种情况的人。
@ fisch0920感谢您的反馈,在接下来的几周中,我将与@thinkingserious一起改善Sendgrid API。 希望我们会提出一些易于使用但在需要时仍足够灵活的东西。
请转到#378获取更新,谢谢!
最有用的评论
@thinkingserious我终于明白了v3中引入的所有Sendgrid helper类让我如此烦恼...它们太多了,它们使发送电子邮件变得不必要的复杂:P
我不想彻底检查Sendgrid的所有代码,因此我决定制作一个简单的包装, sendgrid-mailer 。
尽管Sendgrid的帮助程序类在后台很有用,但是对于创建和验证电子邮件模型而言,我认为不应仅仅为了与API交互而强迫我们使用它们。 我发现它使编写Node应用程序变得比应做的更为复杂,并且助手的命名可能非常混乱,例如
Mail
vsEmail
我认为基本示例很好地说明了这个问题:
https://github.com/sendgrid/sendgrid-nodejs#with -mail-helper-class
对于“我想发送电子邮件”这样的基本内容,这似乎太令人费解了。 它要求您加载8个不同的依赖项并编写15行代码,然后才能发送电子邮件。
但是,不使用帮助器类可能会更糟,因为那样一来,您就必须知道电子邮件JSON请求的必需结构并自己正确地填充它。 一个错误将很容易破坏请求。
因此,我从一个简单易用的API帮助程序中抽象了所有帮助程序类逻辑,以便再次使用Sendgrid发送电子邮件变得轻松又有趣:)
最基本的示例变为:
该请求是在后台构造的,并且透明地使用Sendgrid的助手。
它还支持发送多封电子邮件,在需要进一步自定义的情况下公开Sendgrid对象,还接受Sendgrid
Mail
实例,并接受to / from字段的多种格式,例如Name <[email protected]>
或具有名称/电子邮件属性的对象。 有关更多详细信息,请参见自述文件。仍有改进的余地,但是我想在这里与那些希望使用Sendgrid API而又不被它淹没的人们分享这个解决方案。
希望它对某人有用,也许它可以提供一个更简单的API来为该库的未来提供一些指导:)
cc @julesbou有点晚,但是我希望您仍然可以找到它的用处。