使用NodeEmailer从node.js应用程序发送电子邮件

使用NodeEmailer从node.js应用程序发送电子邮件,node.js,sendmail,nodemailer,Node.js,Sendmail,Nodemailer,在我的ubuntu(10.04)框中,我可以通过以下方式发送电子邮件: echo "hello" | mail -s 'test email' my_gmail_nickname@gmail.com 当我尝试从同一台机器上运行的node.js应用程序发送电子邮件时,它不起作用 var nodemailer = require('nodemailer'); nodemailer.SMTP = { host: 'localhost' } nodemailer.send_mail( {

在我的ubuntu(10.04)框中,我可以通过以下方式发送电子邮件:

echo "hello" | mail -s 'test email' my_gmail_nickname@gmail.com
当我尝试从同一台机器上运行的node.js应用程序发送电子邮件时,它不起作用

var nodemailer = require('nodemailer');
nodemailer.SMTP = {
  host: 'localhost'
}
nodemailer.send_mail(
{
    sender: 'me@example.com',
    to:'my_gmail_nickname@gmail.com',
    subject:'Hello!',
    html: 'test',
    body:'test'
},
function(error, success){
    console.log(error);
    console.log(success);
    console.log('Message ' + success ? 'sent' : 'failed');
});
我收到了错误消息:

me@luc:~/gridteams/services/gpshop$ cat nohup.out 
{ stack: [Getter/Setter],
  arguments: undefined,
  type: undefined,
  message: 'ECONNREFUSED, Connection refused',
  errno: 111,
  code: 'ECONNREFUSED',
  syscall: 'connect' }
null
sent

我看到连接被拒绝,但不理解为什么会出现此错误。你认为缺失的部分是什么?

我认为你的问题是这样的:

命令行程序mail使用名为/usr/sbin/sendmail的二进制文件发送邮件。sendmail是一个命令行程序,它将尝试传递邮件。它使用到邮件基础结构的本地连接

节点NodeEmailer将尝试连接到TCP端口25上的主机localhost上的SMTP服务器,该端口不存在。只需尝试使用telnet程序获取连接以进行验证

以下是正在运行的服务器:

$ telnet localhost 25
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 xxxx.de ESMTP Postfix
QUIT
221 2.0.0 Bye
Connection closed by foreign host.
$ telnet localhost 25
Trying 127.0.0.1...
telnet: Unable to connect to remote host: Connection refused
这里没有正在运行的服务器:

$ telnet localhost 25
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 xxxx.de ESMTP Postfix
QUIT
221 2.0.0 Bye
Connection closed by foreign host.
$ telnet localhost 25
Trying 127.0.0.1...
telnet: Unable to connect to remote host: Connection refused
如果您得到第二个端口,您的SMTP将出现问题,未在端口25上启动/启用侦听-这是默认端口(出于安全原因)。您需要首先配置它

或者-根据nodemail文档,您也可以使用sendmail二进制文件:

命令,然后将属性sendmail设置为true(或作为sendmail的路径) 如果命令不在默认路径中)


你说得对,我收到了第二条消息“telnet:无法连接到远程主机:连接被拒绝”。事实上,我认为sendmail也在使用本地主机上运行的SMTP服务器。我安装了postfix,经过一点努力后,它工作正常:)。谢谢。