我正在使用Mean.js堆栈,我在解决如何使用AngularJS控制器内部的nodemailer包发送电子邮件时遇到问题。我有以下代码:
var mailOptions = {
from: 'Hello <hello@email.com>',
to: 'email@gmail.com',
subject: 'email subject',
text: 'email body',
html: 'html body'
};
var smtpTransport = nodemailer.createTransport(config.mailer.options);
smtpTransport.sendMail(mailOptions, function(err) {
if (!err) {
res.send({
message: 'Email has been sent'
});
}
done(err);
});
但我收到错误ReferenceError: nodemailer is not defined
。我尝试使用以下方法将依赖项注入控制器:
angular.module('offers').controller('OffersController', ['$scope', '$stateParams', '$location', 'Authentication', 'Offers', 'nodemailer',
function($scope, $stateParams, $location, Authentication, Offers, nodemailer) {
...
但我只收到错误Unknown provider: nodemailerProvider
。我还将app / config / express.js的依赖项添加为nodemailer = require('nodemailer')
,但仍然没有运气。
我在npm包nodemailer / src / nodemailer.js中看到以下几行:
function Nodemailer(transporter) {
...
和
module.exports.createTransport = function(transporter)
...
所以我假设我可以通过全局Nodemailer对象访问包,如下所示:Nodemailer.createTransport(...)
,但这也是未定义的。
感谢您的帮助!
答案 0 :(得分:1)
我认为Nodemailer必须在服务器端运行。
只需使用角度$http
请求触发发送即可。
您可以找到示例here
如果您收到参考错误,请检查您是否已使用nodemailer
正确安装npm install nodemailer --save
。
答案 1 :(得分:0)
在您的代码中,您无法在角度控制器中注入nodemailer,因为它不是服务或提供者。
您有两种选择: -
假设它只是作为节点包提供并且您已经安装它,您可以将该脚本包含在node_modules文件夹的html文件中,这样,nodemailer将在您的应用程序中作为全局对象使用。就个人而言,我不会采用这种方法,采取第二种方法。
这是首选选项 - 在节点服务器上创建一个使用nodemailer执行邮件位的http端点。然后向终点发送http请求以执行您想要的操作。
答案 2 :(得分:-1)
我认为Nodemailer必须在服务器端运行。
只需使用angular的$ http请求触发发送。
你可以在这里找到一个例子
如果您收到引用错误,请检查您是否已使用npm install nodemailer --save正确安装了nodemailer。