Sendgrid webhook有sg_message_id
但是发送邮件时Web API v2的响应没有sg_message_id.实际上,只有消息显示success或失败.
那么,我如何关联发送邮件和webhook回调?
我已经在SO中查看过去的问题,但它没有为此提供解决方案.
谢谢.
我正在使用 Nodemailer 在我的无服务器 Next.js 项目中发送电子邮件,该项目部署在 Vercel 中,该项目在开发模式下完美运行。但我在生产中遇到了问题。没有返回错误,一切都与开发模式相同,只是我没有收到任何电子邮件。
我有另一个用 React 构建的项目,并部署在 Heroku 中,我以相同的方式发送电子邮件,并且它在开发和生产方面工作正常,所以我知道问题出在 Vercel 上。
是的,我在 Google 帐户中启用了“允许安全程度较低的应用程序”,并且是的,我启用了验证码。
我也读过这篇文章https://vercel.com/docs/solutions/email但它并没有真正让我明白在我的情况下我应该做什么。我可以看到这是 SMTP 的问题,但我不知道到底是什么。
有人遇到过这种问题吗?我怎样才能解决这个问题?
const transporter = nodemailer.createTransport({
host: "smtp.gmail.com",
port: 465,
auth: {
user: myEmail@gmail.com,
pass: myEmailPass
}
});
const mailOptions = {
from: `${req.body.name} ${req.body.email}`,
to: myEmail@gmail.com,
subject: `${req.body.subject}`,
text: `Text: ${req.body.text}`
}
transporter.sendMail(mailOptions, (err, res) => {
if(err) {
console.log(err);
} else {
console.log("success");
}
});
Run Code Online (Sandbox Code Playgroud)
更新
我更改为 SendGrid:创建了一个帐户,创建了一个 API 密钥,并像这样更改了代码(而不是上面的代码):
sgMail.setApiKey(process.env.SENDGRID_API_KEY);
const msg = {
to: `myEmail@gmail.com`, …Run Code Online (Sandbox Code Playgroud) 我正在尝试.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) 我们公司每天发送大量电子邮件,并计划在未来发送更多电子邮件.(成千上万)此外还有成千上万的群发邮件.
任何人都有使用hotmail,yahoo(web.de,gmx.net)和类似的网络邮件公司阻止你的电子邮件的经验,因为"在一段时间内来自同一来源的太多"已被发送给他们?
可以做些什么呢?在一整天/晚上传播电子邮件邮件?以什么速度?
(我们正在谈论合法的电子邮件,以确保...)
我在我的Rails应用程序中使用SendGrid的SMTP API来发送电子邮件.但是,我遇到了使用RSpec测试电子邮件标题("X-SMTPAPI")的麻烦.
这是电子邮件的样子(从ActionMailer :: Base.deliveries中检索):
#<Mail::Message:2189335760, Multipart: false, Headers:
<Date: Tue, 20 Dec 2011 16:14:25 +0800>,
<From: "Acme Inc" <contact@acmeinc.com>>,
<To: doesntmatter@nowhere.com>,
<Message-ID: <4ef043e1b9490_4e4800eb1b095f1@Macbook.local.mail>>,
<Subject: Your Acme order>, <Mime-Version: 1.0>,
<Content-Type: text/plain>, <Content-Transfer-Encoding: 7bit>,
<X-SMTPAPI: {"sub":{"|last_name|":[Foo],"|first_name|":[Bar]},"to":["foo@bar.com"]}>>
Run Code Online (Sandbox Code Playgroud)
这是我的规范代码(失败):
ActionMailer::Base.deliveries.last.to.should include("foo@bar.com")
Run Code Online (Sandbox Code Playgroud)
我也尝试了各种方法来检索标题("X-SMTPAPI")并且也没有工作:
mail = ActionMailer::Base.deliveries.last
mail.headers("X-SMTPAPI") #NoMethodError: undefined method `each_pair' for "X-SMTPAPI":String
Run Code Online (Sandbox Code Playgroud)
救命?
事实证明,我可以这样做来检索电子邮件标题的值:
mail.header['X-SMTPAPI'].value
Run Code Online (Sandbox Code Playgroud)
但是,返回的值是JSON格式.然后,我需要做的就是解码它:
sendgrid_header = ActiveSupport::JSON.decode(mail.header['X-SMTPAPI'].value)
Run Code Online (Sandbox Code Playgroud)
返回一个哈希,我可以这样做:
sendgrid_header["to"]
Run Code Online (Sandbox Code Playgroud)
检索电子邮件地址数组.
我有一个问题,让sendgrid成功地在rails 3.1应用程序上发送电子邮件,该应用程序使用authlogic进行身份验证并部署在heroku上.我在config/environments/[development.rb和production.rb]上有以下动作邮件配置:
config.action_mailer.delivery_method = :smtp
config.action_mailer.default_url_options = { :host => 'localhost:3000' }
config.action_mailer.default_charset = "utf-8"
config.action_mailer.raise_delivery_errors = true
config.action_mailer.perform_deliveries = true
config.action_mailer.smtp_settings = {
:address => 'smtp.sendgrid.net',
:port => 587,
:domain => ENV['SENDGRID_DOMAIN'],
:user_name => ENV['SENDGRID_USERNAME'],
:password => ENV['SENDGRID_PASSWORD'],
:authentication => 'plain',
:enable_starttls_auto => true
}
对于production.rb,上面的代码是相同的除外
config.action_mailer.default_url_options = { :host => [app name in heroku] }
当我运行它的开发模式时,我收到以下错误报告:
Completed 500 Internal Server Error in 21740ms
Net::SMTPFatalError (550 Cannot receive from specified address notification@[app-domain]: Unauthenticated senders not allowed
):
我现在真的不知道如何设置它以使其工作.有没有先前在heroku和rails上设置sendgrid的经验的人知道发生了什么事吗?
非常感谢.你们是最棒的!!!
好的.我认为这个问题与我的rails应用程序有关,但它似乎与电子邮件附件的更深层次的工作有关.
我必须从我的rails应用程序发送一个csv文件到仓库,该仓库在我的商店中完成订单.仓库具有CSV格式,具有讽刺意味的是,CSV文件的标题行超长(1000+个字符).
当我收到测试电子邮件时,我在csv文件的标题行中得到了一个换行符,并且无法弄清楚是什么把它放在那里.然而,一些谷歌搜索终于显示了原因:附加文件的行字符限制为1000.为什么?我不知道.这看起来很荒谬,但我仍然不得不以某种方式发送这个csv文件.
我尝试手动将附件的MIME类型设置为text/csv,但这没有用.有人知道如何解决这个问题吗?
一些相关的Google搜索结果:http://www.google.com/search? client = safari&rls = en&q = csv + wrapped +990&ie = UTF-8&e = UTF-8
更新
我试过在base64中对附件进行编码,如下所示:
attachments['205.csv'] = {:data=> ActiveSupport::Base64.encode64(@string), :encoding => 'base64', :mime_type => 'text/csv'}
Run Code Online (Sandbox Code Playgroud)
这似乎没有什么不同.我通过Sparrow for Mac收到了me.com帐户的电子邮件.我将尝试使用gmail的web界面.
我正在为我的应用程序创建一个用户管理系统,我需要向用户发送一个"忘记我的密码"电子邮件,其中包含一个令牌,可以让他们重置帐户密码.我通过Azure注册了SendGrid(每月免费获得25,000封电子邮件,这听起来很不错)并编写了一些代码来使用它,但在测试了我的程序之后我有点惊愕地发现只有我的几个电子邮件实际上经历了.
进入SG控制面板后,我发现我发送的6封测试电子邮件中有4封经过,而其他所有电子邮件都被拒绝为垃圾邮件.我发送了一封电子邮件到mail-tester.com看看我的垃圾邮件得分是多少,它给了我4.3/10.
有问题的电子邮件是一个单独的句子,其中包含密码重置的链接,没有任何图像或其他元素.我只发了6封电子邮件,所以我的电子邮件数量肯定不是问题.尽管如此,我仍然非常疑惑为什么我的邮件被标记为垃圾邮件.
无需进行精心设置的身份验证设置,我是否可以对系统进行任何基本更改以使其通过用户?
我正在尝试通过 sendgrid 发送电子邮件。但是每次都返回禁止状态。
public Task SendEmailAsync(string email, string subject, string message)
{
var apiKey = Environment.GetEnvironmentVariable("SENDGRID_API_KEY");
return Execute(apiKey, subject, message, email);
}
public async Task Execute(string apiKey, string subject, string message, string email)
{
var client = new SendGridClient(apiKey);
var from = new EmailAddress(Configuration["Email"], Configuration["Name"]);
var to = new EmailAddress(email);
var plainTextContent = message;
var htmlContent =message;
var msg = MailHelper.CreateSingleEmail(from, to, subject, plainTextContent, htmlContent);
var response = await client.SendEmailAsync(msg);
}
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 ×10
email ×3
actionmailer ×1
asp.net-core ×1
attachment ×1
azure ×1
bulk ×1
c# ×1
csv ×1
email-spam ×1
gmail ×1
heroku ×1
icalendar ×1
massmail ×1
mime-types ×1
next.js ×1
nodemailer ×1
outlook ×1
rspec ×1
rspec-rails ×1
spam ×1
vercel ×1
webhooks ×1
webmail ×1