在Node.js中发送电子邮件?

292

我最近开始编写我的第一个Node.js程序。但是,我发现我无法创建一个能够直接发送邮件到我的电子邮件的联系表单,因为我找不到任何可以发送电子邮件的Node模块。

是否有人知道一个Node.js电子邮件库或示例联系表单脚本?


结账:AWS-SES免费为ec2应用提供62000封电子邮件。 - Harshal Yeole
11个回答

162

Nodemailer是一个模块,可让您在Node.js编程时轻松发送电子邮件。在http://www.nodemailer.com/上有一些很棒的使用Nodemailer模块的示例。该链接中包含有关如何安装和使用Nodemailer基本功能的完整说明。

我个人在使用npm安装Nodemailer时遇到了麻烦,所以我只是下载了源代码。该链接中包含了npm安装和下载源代码的说明。

这是一个非常简单易用的模块,我推荐任何想要使用Node.js发送电子邮件的人使用它。祝好运!


2
nodemailer 起初是可以工作的! - Capy
我已经使用SMTP和Amazon SES进行了测试,对我来说很有效,我已将其集成到ConnectedSets框架中。 - Jean Vincent
简单易用,无需费力设置。 只需复制示例代码,更改为我的信息(阅读有关SSL安全的内容),它就可以正常工作了。 非常适合简单的电子邮件发送! - user3052629
现在这是一个商业项目,所以请注意。 - elliotrock
2
这个答案应该包括一个例子。 - Abraham Toledo

142

1
这真的很有帮助,文档本身就相当清晰易懂。 - NycCompSci
4
https://github.com/marak/node_mailer已经被弃用,应该使用https://github.com/andris9/Nodemailer。 - user470370
7
那是因为它现在是http://www.nodemailer.com/。我正在我的项目中使用它,效果很好,Nodejitsu通过Gmail的SMTP服务器发送邮件没有任何问题。 - Jascha Ehrenreich
2
在过去的两天里,我花了几个小时尝试使用node-email-templates。我想将其作为一个初始化后稍后用于发送的对象来使用。但是无法使其正常工作。我放弃了。 - jcollum
值得注意的是,这也会向您的项目添加大约一百万个依赖项。 - Gio
显示剩余4条评论

65

查看emailjs

在花费很多时间尝试使nodemailer处理大型附件后,发现了emailjs并从此欣喜若狂。

它支持使用普通的File对象发送文件,而不像nodemailer需要使用巨大的缓冲区。这意味着您可以将它链接到例如formidable,以将附件从html表单传递给邮件程序。它还支持排队..

总的来说,不知道为什么nodejitsu选择基于nodemailer,emailjs更加先进。


3
经过一段时间的使用后,不得不进行分支以解决一个问题:除非在邮件发送过程中,否则该程序将无法处理套接字事件,因此在长时间空闲后会停滞,因为服务器会关闭连接,但没有任何东西来处理事件并重置内部变量。你可以在这里找到分支版本:https://github.com/silvioster/emailjs。这个版本已经稳定地运行了相当长的时间,没有出现任何故障。 - silvio
18
更新之前的评论,原作者修复了那个漏洞以及其他一些漏洞,所以不再需要分叉。最新版本应该在https://github.com/eleith/emailjs上。 - silvio
1
nodemailer 还支持附件流,不仅仅是“巨大缓冲区”。 - JoshuaDavid

57

使用nodemailer模块发送电子邮件的完整代码

var mailer = require("nodemailer");

// Use Smtp Protocol to send Email
var smtpTransport = mailer.createTransport("SMTP",{
    service: "Gmail",
    auth: {
        user: "gmail_id@gmail.com",
        pass: "gmail_password"
    }
});

var mail = {
    from: "Yashwant Chavan <from@gmail.com>",
    to: "to@gmail.com",
    subject: "Send Email Using Node.js",
    text: "Node.js New world for me",
    html: "<b>Node.js New world for me</b>"
}

smtpTransport.sendMail(mail, function(error, response){
    if(error){
        console.log(error);
    }else{
        console.log("Message sent: " + response.message);
    }

    smtpTransport.close();
});

4
相较于node-email-templates,我发现使用Nodemailer要简单得多。或许是因为我只是尝试发送基础的纯文本/基础的HTML电子邮件,但我觉得node-email-templates需要更多的设置,而Nodemailer在两分钟内即可运行。 - JVG
4
除了Gmail,我们如何配置自己的SMTP服务器? - Balaji Boggaram Ramanarayan
1
编译Webpack后,我遇到了这个错误:TypeError: Cannot create property 'mailer' on string 'SMTP' at new Mail。我已经查看了像这个这个页面的帖子,但仍然不知所措。 - user1063287
2
@user1063287 只需删除“SMTP”参数。 - Bojan Radivojevic
1
只是提醒一下,您不能将发件人地址更改为除您用于身份验证的自己的电子邮件地址以外的任何内容。 Gmail强制使用该发件人地址以便确认发件人的权限。 - Nicholas Mordecai

25

看起来@JimBastard的回答已经过时了,我查了一下那个邮件库已经有超过7个月没有更新了,有几个bug列表,并且不再在npm注册。

nodemailer 看起来肯定是最好的选择,但是其他答案中提供的url都是404错误。

nodemailer声称支持gmail、hotmail等的易于插件化和美观的文档。


9
你可以随时使用AlphaMail申明:我是其中一名开发人员)。
只需通过NPM进行安装即可:
npm install alphamail

注册AlphaMail帐户。获取一个令牌,然后您就可以使用AlphaMail服务开始发送邮件。

var alphamail = require('alphamail');

var emailService = new alphamail.EmailService()
    .setServiceUrl('http://api.amail.io/v1/')
    .setApiToken('YOUR-ACCOUNT-API-TOKEN-HERE');

var person = {
    id: 1234,
    userName: "jdoe75",
    name: {
        first: "John",
        last: "Doe"
    },
    dateOfBirth: 1975
};

emailService.queue(new alphamail.EmailMessagePayload()
    .setProjectId(12345) // ID of your AlphaMail project (determines template, options, etc)
    .setSender(new alphamail.EmailContact("Sender Company Name", "from@example.com"))
    .setReceiver(new alphamail.EmailContact("John Doe", "to@example.org"))
    .setBodyObject(person) // Any serializable object
);

在 AlphaMail GUI(Dashboard)中,您将能够使用您发送的数据编辑模板:
<html>
    <body>
        <b>Name:</b> <# payload.name.last " " payload.name.first #><br>
        <b>Date of Birth:</b> <# payload.dateOfBirth #><br>

        <# if (payload.id != null) { #>
            <a href="http://company.com/sign-up">Sign Up Free!</a>
        <# } else { #>
            <a href="http://company.com/login?username=<# urlencode(payload.userName) #>">Sign In</a>
        <# } #>
    </body>
</html>

这些模板是用Comlang编写的,它是一种专门为电子邮件设计的简单模板语言。


12
Alphamail 现在正式宣布死亡。十分遗憾 - 我恰好是因为这篇文章才开始使用它的。祝愿开发者在下一个冒险中一切顺利。 - masotime

8

5

3
这个链接不起作用! - yusuf

3

npm有一些软件包,但是没有一个达到了1.0版本。从npm list mail中最好的选择:

email@0.2.2
mail@0.1.1
mailer@0.3.0

3

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接