我正在尝试.ics通过 SendGrid (从节点服务器)发送日历邀请,以便它在 Outlook 或 Gmail 等客户端中呈现为实际邀请(带有接受/拒绝按钮),而不仅仅是作为附件文件。
我花了几天时间研究这个问题(数十个 Stackoverflow 问题、RFC -5545、RFC-2446、iCalendar规范摘录、Sendgrid 的 GitHub 问题线程:1、2、3 、 SendGrid文档、源等)。
然而,似乎没有答案(或者我错过了什么?)。
到目前为止我发现Content-Type附件在这里非常重要,尤其是method=REQUEST部分。甚至文件中属性的顺序也会有所不同。
尽管这里有很多关于 SO 的问题,但由于某种原因,大多数问题仍然没有得到解答。
这是我设置attachment对象的方法:
const SendGrid = require("@sendgrid/mail");
const attachment = {
filename: 'invite.ics',
name: 'invite.ics',
content: Buffer.from(data).toString('base64'),
disposition: 'attachment',
contentId: uuid(),
type: 'application/ics'
};
SendGrid.send({
attachments: [attachment],
templateId,
from: {
email: config.emailSender,
name: config.emailName,
},
to: user.email,
dynamicTemplateData: {
...rest,
user,
}, …Run Code Online (Sandbox Code Playgroud) 我正在尝试更新我的 SendGrid 联系人,但无法弄清楚为什么我尝试更新联系人的自定义字段不起作用。我的保留字段(名字、姓氏、电子邮件)会更新,但我的自定义字段不会更新。有什么想法吗?
此处的文档:https ://sendgrid.api-docs.io/v3.0/contacts/add-or-update-a-contact
try:
headers = {
'authorization': f"Bearer {settings.SENDGRID_API_KEY}",
}
data = {
"list_ids": [
# "Users" list
"7c2...d20"
],
"contacts": [{
"email": user.email,
"first_name": user.first_name,
"last_name": user.last_name,
"custom_fields": {
"educator_role": user.educator_role,
}
}]
}
response = requests.put("https://api.sendgrid.com/v3/marketing/contacts", headers=headers, data=json.dumps(data))
if(response.status_code != 202):
capture_message(f"Could not add user with email {user.email} to Sendgrid.", level="error")
except:
capture_message(f"Adding/updating SendGrid contact failed for {user.email}.", level="error")```
Run Code Online (Sandbox Code Playgroud) 我正在 sendgrid api v3 的帮助下发送电子邮件,但收到警告/错误:
包含字符 '、" 或 & 的内容可能需要使用三个括号 {{{ content }}} 进行转义
在我的 api json 中,我添加了一个包含该&字符的链接:
{"dynamic_template_data": {"link":"...&..."}}
在我的模板中,我使用三个括号{{{ link }}}
一切都按预期进行 - 电子邮件,包括。链接已发送 - 但我总是收到警告/错误。
我错过了 json 中的某些内容吗?
我们有一个站点,我们的代理输入一些数据,然后该数据通过 SendGrid 动态模板发送到客户端。
电子邮件内容包含大量基于输入数据的计算,因此我们希望我们的代理能够在将其发送给客户之前先预览电子邮件并验证内容。
有没有办法使用 SendGrid API 使用 json 对象发送请求,而不是将电子邮件发送给客户端,而是接收生成的电子邮件正文,以便我们可以将其显示给代理并让他们先查看?
SendGrid开发QA环境的最佳方法是什么?我们希望非生产环境能够通过API存储和测试我们的电子邮件模板.SendGrid沙箱设置不允许实际发送电子邮件.
除非有更好的方法,否则我们计划以每月9.95美元的价格创建新的SendGrid基本帐户,允许最多40K的电子邮件.使用这种方法,我们的Dev和QA环境将拥有我们可以测试和部署的不同帐户.
我希望使用SendGrid模板发送电子邮件。我使用标准 v3 api 和简单的 axios 调用。
我希望使用模板发送电子邮件。邮件应包含许多行和列。我不知道创建模板时会有多少行/列。行/列数将取决于仅在撰写电子邮件时已知的数据。
在我的代码中我希望:
我的代码(不起作用 - HTML 被视为文本):
//Coompose HTML
let alertHtml = ''
noteObjArray.forEach((nototObj)=>{
...
alertHtml += (myDate !== '') ? `- ${someText} ${myDate } ` : ''
...
alertHtml += '<br/>'
})
//Send mail using SendGrid
const mailSender = firebaseFunctionsConfig.sendgrid.sender
const msg = {
personalizations: [{
to: [{email, name}],
dynamic_template_data: {userName:name, amount, alertHtml}
}],
from: {email: mailSender.email, name: mailSender.name},
reply_to: …Run Code Online (Sandbox Code Playgroud) 我试图在我的电子邮件模板中有一个链接,看起来像这样:
<a href={{url}}>click here</>
Run Code Online (Sandbox Code Playgroud)
上面的链接已通过添加“自定义”链接添加到“设计器”中。这个值就像我输入的 {{url}}。
我在 dynamic_template_data 中传递一个 url 值,如下所示:
const msg = {
to: savedAdmin.email,
from: process.env.EMAIL_ADDRESS,
templateId: process.env.SENDGRID_NEW_ADMIN_TEMPLATE_ID,
personalizations: [
{
to: [{email: savedAdmin.email}],
dynamic_template_data: {
name: savedAdmin.first_name,
url: process.env.CMS_URL,
email: savedAdmin.email,
password: randomPassword,
},
},
],
};
Run Code Online (Sandbox Code Playgroud)
但是,当我在收件箱中收到邮件时,网址会呈现如下:
http://url9905.myweb.shop/ls/click?upn=BMmHdsRoNrbb0-2FMI-2BBVvCjpDiCceHLG5U2u5OCf29QV6iCtfuvZYId1FE95cTz9uyMY31z9fQ7iR-2BPgq-2FkquvxdAPC0oMKiLa3DRglYUSVP-2FRmYbDQ-2BdFGnczXk75K3Ym8rSodsrAy-2BfNDJwqA7RDeemPFjepjRsUdci9CA6Y0-....
Run Code Online (Sandbox Code Playgroud)
我如何让这个工作?
我使用 GO,尝试通过 sendgrid API v3 发送邮件(https://github.com/sendgrid/sendgrid-go,无需邮件助手类)。但是当我使用这段代码时:
"content": [
{
"type": "text/html",
"value": "<html><head></head><body>Hello You link <a href="http://example.com/reschedule?id=12334">Click</a></body></html>"
}
],
Run Code Online (Sandbox Code Playgroud)
我收到错误:
第400章
但这段代码可以正常工作:
"content": [
{
"type": "text/html",
"value": "<html><head></head><body>Hello!</body></html>"
}
],
Run Code Online (Sandbox Code Playgroud)
我认为特殊字符有问题,但我该如何解决它?谢谢你!
我在 SendGrid 中有一个动态模板,使用 Postman 向https://api.sendgrid.com/v3/mail/send发送 POST 请求
具有以下 json:
{
"personalizations": [{
"to": [{
"email": "dariusgoore@gmail.com",
"name": "test"
}],
"dynamic_template_data":{
"name":"John",
"text": "Someone just added a new post!",
}
}],
"from": {
"email": "team@writerboards.com",
"name": "test"
},
"reply_to": {
"email": "dariusgoore@gmail.com",
"name": "test"
},
"template_id": "d-c8f201dd360d40bc877da13a1a0b36b1"
}
Run Code Online (Sandbox Code Playgroud)
可以使用模板发送电子邮件。
但是,我似乎无法从 Express 发送类似的请求。
这是我调用 SendGrid 的路线(端点响应 cron 作业):
const express = require('express');
const User = require('../models/User');
const Act = require('../models/Act');
const sgMail = require('@sendgrid/mail');
sgMail.setApiKey(process.env.SENDGRID_API_KEY);
let router = express.Router();
router.get('/', async …Run Code Online (Sandbox Code Playgroud) 我想利用 Sendgrid 模板版本来支持多语言支持。
根据 Sendgrid文档:
一个模板一次只能有一个活动版本。如果您创建了一个包含不同 HTML 的新版本,您希望客户开始接收该版本,则需要将该版本设为“活动”。
因此,例如我有 2 个版本的模板:English(active)和Russian。因此,如果我想用俄语版本发送电子邮件,我需要在发送电子邮件之前激活俄语模板版本。
但我担心的是:如果我需要同时发送俄文和英文版本的电子邮件怎么办?Sendgrind 能否为 2 个同时请求提供合适的版本?
sendgrid-api-v3 ×10
sendgrid ×8
email ×2
express ×1
gmail ×1
go ×1
icalendar ×1
javascript ×1
node.js ×1
outlook ×1