向各位研究node_club项目的大牛们请教一个问题——关于node_club项目中使用的注册时邮件发送的问题!!!
发布于 13 年前 作者 jackybing 7686 次浏览 最后一次编辑是 8 年前

研究过node_club项目的牛人们都知道,node_club项目是通过使用模块——nodemailer来实现邮件的发送功能的,其中关于邮件的设置属性在config.js文件中进行了配置,现在自己根据自己的smpt设置,修改了相应的发送邮件需要用到的属性,如下图所示:

mail_port: 25,
mail_user: 'zuoyour[@yeah](/user/yeah).net',
mail_pass: 'zuoyour!@#123',
mail_host: 'smtp.yeah.net',
mail_sender: 'zuoyour[@yeah](/user/yeah).net',
mail_use_authentication: true,

上图中的代码段是属于config.js文件中的,然后我们知道在/controllers/mail.js文件中会有如下一段代码引用到我们设置的相应邮件属性,如下图所示:

mailer.SMTP = {
host: config.mail_host,
port: config.mail_port,
use_authentication: config.mail_use_authentication,
user: config.mail_user,
pass: config.mail_pass};

上图中的yeah.net邮件用户名和密码都是没有问题(可以通过此帐户进行登录验证),但是在注册的过程中,总是如下抛出异常: enter image description here

网上进行搜索的结果告诉我是由于帐号的原因,但是设置的帐号信息并没有什么问题,找了一天的答案始终没有结果,因此在此贴出来,希望得到大家的解惑或者帮助!!!谢谢

10 回复

额= =
第一感觉好像是你的邮件账号mail_user不用后面的@yeah.net
慢慢探索 祝你愉快

这方面的考虑我也试过呢。。。可是还是抛异常。。。求解释。其实上述的邮件配置项在java中实现的邮件发送功能是没有问题的。只是不知道为什么在这边不行。。。深入到nodemailer源码里一探究竟发现貌似没有看到哪里用到了这个上述的那个mailer.SMTP对象。看的是nodemailer0.3.5版本的源码。。。求高手解释!!!

@jackybing 你看下你要发送到的邮件地址格式对不对

github 上的nodemailer项目主页有例子,我试了下Gmail发送成功。

qq邮箱我也和你报一样的错误。

damngoto:那你具体到node_club项目中是如何使用gmail邮箱的呢?可否分享下你的config.js文件下的smtp配置???我按照你的思路,换成了下面的smpt设置,报的错误还是和上文一样!authentication error!

// mail SMTP
mail_port: 25,
mail_user: 'zjbcnblog@gmail.com',
mail_pass: 'zjb18810646702',
mail_host: 'smtp.gmail.com',
mail_sender: 'zjbcnblog@gmail.com',
mail_use_authentication: true,

可否再进一步说明。谢谢!!

@jackybing 看了下我也没找到,按照官方的方法完全没有问题

var nodemailer = require('nodemailer');
//设置SMTP
var mailer = nodemailer.createTransport('SMTP', {
    //smtp.yeah.net
	host: config.mailHost,
    //25
	port: config.mailPort,
    //账户密码
	auth: {
		user: config.mailUser,
		pass: config.mailPass
	}
});
//设置option
var data = {
  from: 'zuoyour@yeah.net',
  to: 'xxxx@xx.com',
  subject: subject,
  html: html
};
//发送邮件
mailer.sendMail(option, function(err, success){
  if (err) {
    console.log(err);
  }
} );

至于use_authentication没看到这个选项,在smtp.js里找到这段代码

if(this.options.use_authentication === false){
        this.options.auth = false;

应该是默认true

@gxmari007 非常感谢你的回复,希望有机会和你多交流一下吧。最近在研究node_club源码,可以的话,是否可以相互交流下心得。。。

@gxmari007 对了,可以再和我解释下几个几点疑惑吗?

  1. app.use(function(){})函数的作用是什么?可以理解为是一种全局性的函数吗?也就是说第次请求都会触发里面的函数来执行相应的操作?
  2. app.dynamicHelpers()函数的作用又是什么呢?和app.use()函数有什么异同点吗?在node_club项目中用到了此函数,作用貌似是用来设置csrf的,那么这又是如何起作用的呢? 方便的话,可以告之一下吗?一起讨论下也行。。。

我的mail.js

var nodemailer = require("nodemailer");

var smtpTransport = nodemailer.createTransport("SMTP",{
    service: "Gmail",
    auth: {
        user: "xugaofan#gmail.com",
        pass: "xxx"
    }
});

var mailOptions = {
    from: "xugaofan#gmail.com",
};

exports.send = function(settings,cb){
	settings.from = mailOptions.from;
	smtpTransport.sendMail(settings,function(err,response){
		smtpTransport.close(); 
		cb(err,response);
	});
};

@jackybing 具体我还没怎么研究过,不过看到app.use(require('./controller/sign').auth_user)这个中间件,我想是每次有请求进来都会调用一次,毕竟要验证用户的

app.dynamicHelpers()

这个函数还不了解,不过我引用了之后会触发403 forbidden, 看了下一个请求会造成多次调用= =我就纳闷了…有待研究

回到顶部