1. Ubuntu使用外部 SMTP 的发送邮件,使用 smtp.163.com 的基本配置
set from=NAME@163.com
set smtp=smtps://smtp.163.com
set smtp-auth-user=NAME
set smtp-auth-password=xxxx
set smtp-auth=login
把 NAME 替换成为登录的账号,xxx 替换为授权码,注意是授权码,而不是登录密码。
写好之后,保存文件为 mail.rc
,保存位置为etc/
echo 'Test' | mail -v -s 'Title' superman@163.com
Please install an MTA on this system if you want to use sendmail!
总是提示要装 sendmail
,这说明配置文件没有起作用,直接设置环境变量解决问题,首先要保存文件为 /etc/mail.rc
export MAILRC=/etc/mail.rc
echo 'Test' | mail -v -s 'Title' superman@163.com
2.使用nodejs发送邮件
2.1 使用nodemailer
这里要用到nodemailer,需要自行安装:
npm install nodemailer --save
在routes/index.js中引用nodemailer:
var nodemailer = require('nodemailer');
2.2 配置
在routes/index.js中创建一个传输方式:
var mailTransport = nodemailer.createTransport({
host : 'smtp.sina.com',
secureConnection: true, // 使用SSL方式(安全方式,防止被窃取信息)
auth : {
user : '你的邮箱地址',
pass : '你的邮箱授权码'
},
});
注意,低版本的nodemailer可能需要多传入一个参数“SMTP”:
var mailTransport = nodemailer.createTransport('SMTP', {
host : 'smtp.sina.com',
secureConnection: true, // use SSL
auth : {
user : '你的邮箱地址',
pass : '你的邮箱授权码'
},
});
关于邮箱授权码
感谢@友友_ba32的提醒,这里的pass
不是邮箱密码(当然,直接用邮箱密码也是可以的,但这是不安全的方式;如果你只是想尝试一下NodeMailer而不是要部署在生产环境中,可以先用邮箱密码代替),而是邮箱的“授权码”。
qq邮箱中,关于获取授权码的资料可以查看这个链接:什么是授权码,它又是如何设置?
2.3 发送邮件
/* 浏览器输入地址(如127.0.0.1:3000/sned)后即发送 */
router.get('/send', function(req, res, next) {
var options = {
from : '"你的名字" <你的邮箱地址>',
to : '"用户1" <邮箱地址1>, "用户2" <邮箱地址2>',
// cc : '' //抄送
// bcc : '' //密送
subject : '一封来自Node Mailer的邮件',
text : '一封来自Node Mailer的邮件',
html : '<h1>你好,这是一封来自NodeMailer的邮件!</h1><p><img src="cid:00000001"/></p>',
attachments :
[
{
filename: 'img1.png', // 改成你的附件名
path: 'public/images/img1.png', // 改成你的附件路径
cid : '00000001' // cid可被邮件使用
},
{
filename: 'img2.png', // 改成你的附件名
path: 'public/images/img2.png', // 改成你的附件路径
cid : '00000002' // cid可被邮件使用
},
]
};
mailTransport.sendMail(options, function(err, msg){
if(err){
console.log(err);
res.render('index', { title: err });
}
else {
console.log(msg);
res.render('index', { title: "已接收:"+msg.accepted});
}
});
});
如果你要发送附件,则先把要发送的文件放入工程中,并修改上面代码的附件的filename和path。