Nodejs中的模拟电子邮件功能

2024-05-06

我已经构建了一个邮件程序功能,并试图加强覆盖范围。事实证明,尝试测试它的某些部分很棘手,特别是这个 mailer.smtpTransport.sendMail

var nodemailer = require('nodemailer')

var mailer = {}

mailer.smtpTransport = nodemailer.createTransport('SMTP', {
    'service': 'Gmail',
    'auth': {
        'XOAuth2': {
            'user': '[email protected] /cdn-cgi/l/email-protection',
            'clientId': 'googleClientID',
            'clientSecret': 'superSekrit',
            'refreshToken': '1/refreshYoSelf'
        }
    }
})
var mailOptions = {
    from: 'Some Admin <[email protected] /cdn-cgi/l/email-protection>',
}

mailer.verify = function(email, hash) {
    var emailhtml = 'Welcome to TestCo. <a href="'+hash+'">Click this '+hash+'</a>'
    var emailtxt = 'Welcome to TestCo. This  is your hash: '+hash
    mailOptions.to = email
    mailOptions.subject = 'Welcome to TestCo!'
    mailOptions.html = emailhtml
    mailOptions.text = emailtxt
    mailer.smtpTransport.sendMail(mailOptions, function(error, response){
        if(error) {
            console.log(error)

        } else {
            console.log('Message sent: '+response.message)
        }
    })
}

我不确定如何进行测试,特别是确保我的 mailer.smtpTransport.sendMail 函数传递正确的参数而不实际发送电子邮件。我正在尝试使用https://github.com/whatser/mock-nodemailer/tree/master https://github.com/whatser/mock-nodemailer/tree/master,但我可能做错了。我应该嘲笑这个方法吗?

var _ = require('lodash')
var should = require('should')
var nodemailer = require('nodemailer')
var mockMailer = require('./helpers/mock-nodemailer')
var transport = nodemailer.createTransport('SMTP', '')

var mailer = require('../../../server/lib/account/mailer')

describe('Mailer', function() {
    describe('.verify()', function() {
        it('sends a verify email with a hashto an address when invoked', function(done) {
            var email ={
                'to': '[email protected] /cdn-cgi/l/email-protection',
                'html': 'Welcome to Testco. <a href="bleh">Click this bleh</a>',
                'text': 'Welcome to Testco. This  is your hash: bleh',
                'subject': 'Welcome to Testco!'
            }

            mockMailer.expectEmail(function(sentEmail) {
            return _.isEqual(email, sentEmail)
            }, done)
            mailer.verify('[email protected] /cdn-cgi/l/email-protection','bleh')
            transport.sendMail(email, function() {})
    })
})

您可以在测试中使用“存根”传输层来代替 SMTP。

var stubMailer = require("nodemailer").createTransport("Stub"),
    options = {
        from: "[email protected] /cdn-cgi/l/email-protection",
        to: "[email protected] /cdn-cgi/l/email-protection",
        text: "My Message!"
    };

   stubMailer.sendMail(options, function(err, response){
     var message = response.message;
   })

因此,在这种情况下,“消息”将是文本格式的电子邮件。像这样的事情:

MIME-Version: 1.0
X-Mailer: Nodemailer (0.3.43; +http://www.nodemailer.com/)
Date: Fri, 25 Feb 2014 11:11:48 GMT
Message-Id: <123412341234.e23232@Nodemailer>
From: [email protected] /cdn-cgi/l/email-protection
To: [email protected] /cdn-cgi/l/email-protection
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

My Message!

有关更多示例,请查看 nodemailer 测试套件:https://github.com/andris9/Nodemailer/blob/master/test/nodemailer-test.js https://github.com/andris9/Nodemailer/blob/master/test/nodemailer-test.js

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

Nodejs中的模拟电子邮件功能 的相关文章

  • 无法在 yeoman Angular 生成的 Web 应用程序中生成“dist”文件夹

    我无法生成dist使用 yeoman 角度生成器构建和生成的 Web 应用程序中的文件夹 我正在粘贴 grunt 构建的详细内容 请检查这是否有帮助 pdc1 f3t18r1 ShippingSolution administrator g
  • 在 Node.js 中一次迭代 50 个项目的数组

    我是 node js 的新手 目前正在尝试编写数组迭代代码 我有一个包含 1 000 个项目的数组 由于服务器负载问题 我想一次迭代 50 个项目的块 我目前使用 forEach 循环 如下所示 我希望将其转换为上述块迭代 result i
  • 使用 Cheerio 选择具有属性的元素

    选择具有特定属性的所有 dom 元素的最有效方法是什么
  • 当前环境不支持指定的持久类型firebase

    我收到这个错误 当前环境不支持指定的持久性类型 我正在测试我的应用程序 发现当用户登录时 它在任何地方都已登录 所以我尝试使用 firebase 在 Node js Express 上实现会话 希望这能解决这个问题 我的代码是这样的 rou
  • model.save() 返回无效输出

    我正在使用本文中的 Node js mongodb 和express 对 REST Api 进行简单测试 MERN 第一部分 使用 Node js 和 Express 构建 RESTful API https medium com week
  • Express 4.x 在 2 分钟后关闭连接

    我有一个简单的节点应用程序来处理GET foo 此请求需要一些时间来计算并返回文件 每次请求持续超过2分钟 连接就会关闭 我正在使用 Express 4 10 2 和节点 0 10 32 我读到 http 模块的默认超时为 2 分钟 htt
  • 在 Nodejs/javascript 中的 Excel 中创建动态数量的列或标题

    我用过exceljsNodejs中用于将json数据导出到excel的模块 它工作正常 但必须在添加行之前预定义标题 列的名称 即列是固定的 添加行后 我无法动态添加列 我尝试了许多通过 npm 提供的模块 但它们都具有相同的功能 那么 有
  • 从变量值动态设置 ng-controller

    我正在使用 AngularJs 和 NodeJS 开发一个应用程序 我对将控制器的名称设置为主控制器中的变量的值感到震惊 为了更好地解释它 我的 index html 看起来像这样 tbody tr td td td member task
  • “submodule”似乎是一个 git 命令,但我们无法执行它

    我已经克隆了一个 git 存储库 它是一个 Angular 7 和 NET Core 应用程序 项目中一切正常 但是当我尝试恢复 npm 包时 出现以下错误 Microsoft TeamFoundation Team Explorer Gi
  • Nodejs 中的 tail-stream 模块不打印文件的最后一条记录

    我正在使用 tail stream 从 csv 文件获取数据 并将每个 csv 记录转换为 json 格式并打印它 但是尾流不会打印文件的最后一行 而是将其保留为缓冲区 如果我更新文件 则从上一个最后一行 缓冲的最后一行 到更新的最后一行
  • 有没有办法修复 package-lock.json lockfileVersion 以便 npm 使用特定格式?

    如果两个不同的开发人员在最初使用package lock json lockfileVersion 1 当使用 npm 7x 的开发人员安装新软件包时 似乎package lock json是使用重新创建的 lockfileVersion
  • 在 MongoDB 中删除时自动删除引用对象

    假设我有一个这样的架构 var Person new Schema name String var Assignment new Schema name String person ObjectID 如果我删除一个人 仍然可能会留下引用不存
  • TweetNaCl.js 最小公钥签名示例

    我试图了解如何基于位于的演示来实现一个最小的基本公钥签名示例here https tweetnacl js org sign 使用纯javascript 我的研究还没有产生一个简单的 javascript 示例 我可以用它来理解其内部工作原
  • socket.io - ReferenceError:套接字未定义

    我正在尝试编写一个简单的应用程序 它将我在文本区域中输入的每个字符镜像到 div 使用socket io 但我不断收到以下客户端错误 ReferenceError 套接字未定义 这是我的服务器代码 var express require e
  • NodeJS Express 中每个请求的全局范围

    我有一个基本的快速服务器 需要在每个请求处理期间存储一些全局变量 更深入地说 请求处理涉及许多需要存储在变量中的操作 例如global transaction 当然 如果我使用global范围 每个连接都将共享其事务的信息 并且我需要一个全
  • NodeJS 中的密码重置

    我已经设置使用 NodeJS Passport 更新用户的密码 我遵循了这个很棒的指南 http sahatyalkabov com how to implement password reset in nodejs http sahaty
  • 如何使用startsWith过滤并获取每个对象键的值?

    我试图通过获取每个键来过滤对象checkpoint并输出其值 目前 我只能输出键而不是值 下面 我有一个简单的对象 我正在使用过滤器和startsWith 我怎样才能得到这些值呢 var data practicals 0 checkpoi
  • Node/Express 4.0 中可以声明全局变量吗

    我有多个需要访问数据库的路线 对于开发我使用本地数据库 显然生产我使用托管数据库 唯一的问题是每次我去推送版本时我都必须手动更改数据库链接 e g var mongodb require mongojs connect urlhere Co
  • 如何使用redis发布/订阅

    目前我正在使用node js和redis来构建应用程序 我使用redis的原因是因为发布 订阅功能 该应用程序只是在用户进入用户或离开房间时通知经理 function publishMsg channel mssage redisClien
  • Vue 异步 catch 块中的错误对象在调试器中未定义

    我有这个 Vue 组件 它工作正常 但在 VSCode 中调试是一个问题

随机推荐

  • 在 Kivy 应用程序中获取文本输入值

    Python Kivy 新手尝试构建一个测试应用程序 其中包含输入框 确定按钮和单击确定按钮时应更改文本的标签 但我得到了 NameError 全局名称 txt1 未定义 我究竟做错了什么 import Kivy import kivy i
  • 无法从同一项目的 bin 目录导入模块

    我正在构建一个库 该库将通过 pip 包含在其他项目中 我有以下目录 venv 是 virtualenv project bin run py myproj init py logger py venv 我激活虚拟环境 在 bin run
  • 减法进位标志

    我正在使用 MASM32 有了这个代码 mov eax 5 sub eax 10 CF 状态标志将被设置 但使用我的铅笔和纸 我实际上看到 MSB 没有任何进位 是的 我知道从较少的数字中减去大的数字集CF 但我想知道为什么 因为使用这段代
  • 等待多个延迟对象完成并使用解析值

    我正在尝试找出一种方法来等待多个延迟对象并在完成后处理它们 可能就像开始延迟对象的下一组 我被困住了 因为以下结果不是预期的结果 我期待结果为 allDone resovled values are 1 2 3 实际结果是 allDone
  • Android EditText 验证后更改焦点并在对话框中显示错误

    我有一个带有 3 个 EditText 字段的简单活动 用户 通行证 确认 在 用户 字段中输入内容并且该人在键盘上单击 下一步 后 我在那里有一个 setOnFocusChangeListener 来验证输入 如果验证失败 将打开一个对话
  • 将 Django South 与多个代码分支结合使用的工作流程

    我很好奇其他 Django 开发人员在使用多个代码分支进行开发时如何使用 South 管理数据库迁移 让我举一个示例场景 举例来说 您从主干开始开发 您从主干创建分支 A 此时 最后一个迁移版本为app 1是0010 然后您为app 1在创
  • Ajax - 下载前获取文件大小

    基本上 我想弄清楚是否应该使用 AJAX 下载文件 具体取决于文件大小有多大 我想这个问题也可以改写为 如何仅获取ajax请求的标头 EDIT ultima rat0 https stackoverflow com users 239962
  • 如何使用流对 Map 中的值求和?

    我想要与流等效的内容 public static
  • 当用户拖动列表视图项目时检测何时需要滚动

    介绍 我正在实现列表视图项目的重新排列 而不使用 OLE 拖放 PROBLEM 我已经成功解决了大部分任务 除了当用户想要将项目放置在当前不可见的位置时向上 向下滚动之外 问题 我可以使用以下消息向上 向下滚动列表视图 SendMessag
  • LegacyUnhandledExceptionPolicy 不允许捕获(并吞下)ThreadAbortException?

    我正在使用 NET 1 1 兼容模式来处理未处理的异常 问题是 当 LegacyUnhandledExceptionPolicy 设置为 1 这就是我想要的 时 我无法捕获并吞下 ThreadAbortException 示例代码 应用程序
  • Bokeh 相当于 matplotlib 子图

    我正在寻找一种方法来创建包含多个子图的绘图 例如 fig ax0 ax1 plt subplots nrows 2 sharex True 可以在 matplotlib 中完成 然后可以通过以下方式解决ax0 and ax1 有没有办法在
  • 使用未声明的标识符“gl_InstanceID”

    大家好 我一直在IOS平台上尝试在OpenGLES2 0中进行实例化绘制 我的渲染代码 glEnableVertexAttribArray glVertexAttribPointer glDrawElementsInstancedEXT G
  • 如何向 tabularinline 块的每一行添加行号

    我有一个 ModelAdmin 类 其内联类型为 TabularInline 我希望 TabularInline 的每一行在其左侧显示一个行号 随着新记录添加到内联中 该数字会增加 并且会在编辑表单时显示 我更喜欢行号不是内联数据模型的一部
  • R 在 readHTMLTable 调用维基百科时崩溃

    尝试抓取维基百科页面 类似的事情我之前已经做过很多次了 library XML myURL lt http en wikipedia org wiki List of US Open MenUs Singles champions y lt
  • 如何通过Java编码在运行时将My Jar加载到ClassPath?

    我正在 Net Beans 中使用 Swing 我有自己的 jar 其中包含类和方法 我将使用 JAVA Reflection API 调用这些类和方法 但在此之前我想在运行时将 Jar 加载到类路径中 我有一个 J 按钮 单击该按钮我将获
  • WebView (OSX) 未在打印面板预览中呈现

    我的应用程序创建并打印 WebView 输出页面正在正确组装和打印 但我没有在打印面板中预览页面 NSRect printViewFrame printViewFrame size width paperSize width marginL
  • 使用Puppeteer拦截请求时如何获取原始编码响应大小?

    我使用此代码来记录在 Chrome 中加载页面时编码的响应大小 const puppeteer require puppeteer async function const browser await puppeteer launch co
  • 如何在 ASP.NET MVC RC 1.0 中使用动态母版页

    我不知道如何在 ASP NET MVC RC 1 0 中使用动态母版页 请帮忙 您可以在使用 View 辅助方法时指定母版页的名称 return View About AlternateMaster model AlternateMaste
  • Pythonic方式逐行读取文件?

    以下两种方法中逐行读取文件的 Pythonic 方法是什么 with open file r as f for line in f print line or with open file r as f for line in f read
  • Nodejs中的模拟电子邮件功能

    我已经构建了一个邮件程序功能 并试图加强覆盖范围 事实证明 尝试测试它的某些部分很棘手 特别是这个 mailer smtpTransport sendMail var nodemailer require nodemailer var ma