Node - 发送电子邮件的选项,sendgrid 和 nodemailer 其中之一或组合

2024-02-11

在节点中发送电子邮件方面没有那么丰富的经验,正如我所看到的,有不同的选项可供选择。在以下场景中使用哪个选项?

将 nodemailer 与 sendgrid 结合使用:
正如我所看到的,我必须添加额外的包"nodemailer-sendgrid-transport"迫使他们一起工作。
Because var transporter = nodemailer.createTransport({ service: 'SendGrid', auth: {...});行不通的。 (总是返回错误的用户名/密码)

var nodemailer        = require('nodemailer'),
    sendGridTransport = require('nodemailer-sendgrid-transport');

var options = {
    auth: {
        api_user: 'blabla',
        api_key:  'blabla'
    }
};
var client = nodemailer.createTransport(sendGridTransport(options));

var email = {
    to: ['[email protected] /cdn-cgi/l/email-protection', '[email protected] /cdn-cgi/l/email-protection'],
    from: '[email protected] /cdn-cgi/l/email-protection',
    subject: 'Hi there',
    text: 'Awesome sauce',
    html: '<b>Awesome sauce</b>'
};

client.sendMail(email, function(err, info) { ... });

仅使用 sendgrid 模块而不使用 nodemailer 包:

var sendgrid = require('sendgrid')('blabla', 'blabla');

var email = {
    to: ['[email protected] /cdn-cgi/l/email-protection', '[email protected] /cdn-cgi/l/email-protection'],
    from: '[email protected] /cdn-cgi/l/email-protection',
    subject: 'Hi there',
    text: 'Awesome sauce',
    html: '<b>Awesome sauce</b>'
};

sendgrid.send(email, function(err, json) { ... });

因此,在第二个示例中,我将仅包含一个包(sengrid),而在第一种方法中,我必须包含两个包(nodemailer 和 nodemailer-sendgrid-transport)。我发现第一种方法比第二种方法更抽象,因为我可以更新或完全切换到其他一些服务传输(例如 gmail),或者我可以吗?但另一方面,我不认为在不同的运输对象之间进行切换是合适的。

所有这一切的附带问题是如何将模板与此解决方案一起使用。我在官方指南中没有看到任何有关模板的内容,也没有在以下位置看到:https://github.com/sendgrid/sendgrid-nodejs https://github.com/sendgrid/sendgrid-nodejs也不在:https://github.com/andris9/Nodemailer https://github.com/andris9/Nodemailer:

电子邮件模板与此完全不同,我需要安装新的软件包来处理它?
最后我觉得我提出了一个非常弱智的问题。


我已经将 Nodemailer 与 Mandrill 一起使用,没有任何问题。

这是适用于我的情况的代码,但您提到在您的情况下不起作用:

// Create a SMTP transport object
var transport = nodemailer.createTransport("SMTP", {
    service: mainConfigFile.smtpServer.service, // use well known service
    auth: {
        user: mainConfigFile.smtpServer.user,
        pass: mainConfigFile.smtpServer.pass
    }
});

请注意,凭据存储在 mainConfigFile 中,但其意图很明显。

我想你应该对 Nodemailer 没问题。

您能否提供有关您收到的错误的更多详细信息?

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Node - 发送电子邮件的选项,sendgrid 和 nodemailer 其中之一或组合 的相关文章

随机推荐

  • 强制 enum 为 unsigned long 类型

    是否可以强制枚举的基础类型为 unsigned long 类型 谢谢 在 C 11 及更高版本中 您可以明确提及您想要的类型 enum MyEnumeration unsigned long values go here 这将允许您显式控制
  • 如何从 AWS Codebuild 构建规范文件中排除文件夹?

    所以我需要从我的工件中排除一个文件夹 但谷歌搜索找不到任何信息 version 0 2 phases install runtime versions nodejs 10 build commands echo Build started
  • 计算计算着色器内帧缓冲区的颜色直方图

    正如标题所示 我正在将场景渲染到帧缓冲区上 并尝试从计算着色器内的帧缓冲区中提取颜色直方图 我对使用计算着色器完全陌生 并且缺乏教程 示例 关键字让我不知所措 特别是 我正在努力正确设置计算着色器的输入和输出图像 这是我所拥有的 compu
  • 如何加快Python中的字符串连接速度?

    在下面的代码中 串联是瓶颈 正如你所看到的 我尝试了一些复杂的方法来加快速度 但无论如何它都很慢 我想知道是否有什么我可以做的来使它更快 顺便说一句 普通和秘密都是从二进制文件读取的数据 它们都很大 大约 1mb x b if len pl
  • 在 Cocoa 程序中访问 Swift REPL

    我可以将 LLDB 附加到用 Swift 编写的程序并访问 REPL 无论是从 Xcode 内还是通过运行 lldb n ProcessName lldb repl 1 gt 但是 如果我将 LLDB 附加到没有 Swift 运行时的进程
  • Activity 生命周期 - 每次重新定向时都会调用 onCreate

    我有一个简单的活动 可以加载位图onCreate 我发现如果我旋转设备 我可以从日志中看到onCreate又打电话来了 事实上 因为所有实例变量都再次设置为默认值 所以我知道整个 Activity 已被重新实例化 旋转 2 次后 我得到 F
  • Django 国家/地区按翻译名称排序

    我开始使用 django countries 并向我的模型之一添加一个字段 country CountryField blank True 问题是用户的语言是西班牙语 当表格显示国家列表时 它们被正确翻译 但他们是按我猜的代码或英文名称排序
  • 如何使用 Django 进行 RDS IAM 身份验证?

    我希望我的 django 应用程序使用 IAM 身份验证连接到 RDS postgres 这意味着数据库密码每 15 分钟就会过期 应该重新生成 问题是如何在运行时更改数据库密码 或者我应该更新我的数据库 URL 环境 我们为此功能实现了一
  • 为什么Sortable概念需要完全有序的值类型,而std::sort只需要“小于”可比较?

    In the 关于概念 N3701 的最新论文 http www open std org jtc1 sc22 wg21 docs papers 2013 n3701 pdf 有以下示例sort算法 template
  • C - scanf() 与 gets() 与 fgets()

    我一直在做一个相当简单的程序 将字符串 假设输入数字 转换为整数 完成后 我注意到一些非常奇特的 错误 我无法回答 主要是因为我对如何进行的了解有限 scanf gets and fgets 功能发挥作用 不过我确实读了很多文献 因此 无需
  • 制作一个唯一的 Java 对象列表

    我有一个 ArrayList 其中填充了具有名称和时间属性的对象 我想根据名称删除重复项并仅保留最新时间的记录 所以我已经覆盖了equals and hashcode我的对象中的名称并使用了这样的代码 private List
  • 如何在 django 模板中渲染变量?

    我的目标是在 HTML 页面中动态写入一些图像的 url URL 存储在数据库中 为此 首先我尝试在模板中渲染一个简单的变量 阅读文档和其他来源 应该分 3 个步骤完成 对于配置 在设置 py TEMPLATES OPTIONS debug
  • mysql 从日期格式中提取年份

    我需要一个 mysql 查询来从数据库表中的以下日期格式中提取年份 例如 subdateshow 01 17 2009 01 17 2009 01 17 2009 01 17 2009 01 17 2009 以下查询不起作用 select
  • 无法运行 Android 虚拟设备管理器“android avd”并出现 NullPointerException

    尝试启动 avd 时出现 NullPointerException 我刚刚下载了适用于 Mac 的 ADT 捆绑包并运行了 android avd 有谁知道为什么会失败 android avd java lang NullPointerEx
  • 有没有办法通过 Opencpu 运行脚本而不创建包?

    我是 opencpu 的新手 我正在尝试这个 创建一个脚本以将数据帧加载到内存中 当然在服务器上 提供一种通过 GET api 查询此数据帧的方法 可以对大型数据框执行此操作以保持其加载一次吗 是否可以在不编写 R 包的情况下完成此操作 这
  • GDI+ 中发生一般错误

    GDI 中发生一般错误 ExternalException 0x80004005 GDI 中发生一般错误 System Drawing Image Save 流流 ImageCodecInfo编码器 EncoderParameters编码器
  • 如何模仿 XSLT 1.0 中的 copy-namespaces="no" ?

    我想在 XSLT 1 0 中重写这个 xslt 片段 它不支持 复制命名空间
  • XCTAssertEqualWithAccuracy 不起作用

    有人可以回答我为什么这个断言失败吗 XCTAssertEqualWithAccuracy 1 56 1 57 01 虽然这个有效 XCTAssertEqualWithAccuracy 1 56 1 57 02 我认为 1 56 与 1 57
  • 如何模拟触摸事件?

    我希望能够在没有用户交互的情况下调用触摸事件 这可能吗 您可以手动调用触摸开始和触摸结束 我认为无论您尝试做什么 都可能有更好的解决方案 这似乎是一件非常非常规的事情
  • Node - 发送电子邮件的选项,sendgrid 和 nodemailer 其中之一或组合

    在节点中发送电子邮件方面没有那么丰富的经验 正如我所看到的 有不同的选项可供选择 在以下场景中使用哪个选项 将 nodemailer 与 sendgrid 结合使用 正如我所看到的 我必须添加额外的包 nodemailer sendgrid