Node.js 是一种基于事件驱动和非阻塞 I/O 模型的 JavaScript 运行时环境,广泛应用于服务器端应用程序的开发。基于 STMP 协议和 EWS 协议的邮件发送是 Node.js 程序中一项常见的任务。下面是一份完整的攻略,包含邮件发送的各个步骤和两个示例说明。
准备工作
在进行邮件发送前,需要安装以下 npm 模块:
- nodemailer:用于发送邮件
- winston:用于记录日志
- dotenv:用于从环境变量中加载配置
运行以下命令进行安装:
$ npm install nodemailer winston dotenv --save
在项目根目录下创建 .env
文件,并编写邮件发送所需的配置项。例如:
MAIL_HOST=smtp.example.com
MAIL_PORT=587
MAIL_USERNAME=user@example.com
MAIL_PASSWORD=secret
MAIL_TO=recipient@example.com
MAIL_SUBJECT=Test Email
MAIL_TEXT=This is a test email.
通过 SMTP 协议发送邮件
通过 SMTP 协议发送邮件是一种常见的方式。具体实现可以参考以下示例代码:
const nodemailer = require('nodemailer');
const winston = require('winston');
const dotenv = require('dotenv');
dotenv.config();
const {MAIL_HOST, MAIL_PORT, MAIL_USERNAME, MAIL_PASSWORD, MAIL_TO, MAIL_SUBJECT, MAIL_TEXT} = process.env;
const transporter = nodemailer.createTransport({
host: MAIL_HOST,
port: MAIL_PORT,
secure: false,
auth: {
user: MAIL_USERNAME,
pass: MAIL_PASSWORD,
},
});
const message = {
from: MAIL_USERNAME,
to: MAIL_TO,
subject: MAIL_SUBJECT,
text: MAIL_TEXT,
};
transporter.sendMail(message, (error, info) => {
if (error) {
winston.error(error);
} else {
winston.info(`Message sent: ${info.messageId}`);
}
});
在上述示例代码中,我们通过 nodemailer.createTransport
方法创建了一个邮箱连接客户端,然后通过 transporter.sendMail
方法发送邮件。其中 process.env
对象是 Node.js 中加载环境变量的标准方式。
通过 EWS 协议发送邮件
如果需要支持 Exchange Server,可以通过 EWS 协议发送邮件。具体实现可以参考以下示例代码:
const ews = require('ews-javascript-api').ExchangeService;
const winston = require('winston');
const dotenv = require('dotenv');
dotenv.config();
const {MAIL_USERNAME, MAIL_PASSWORD, MAIL_TO, MAIL_SUBJECT, MAIL_TEXT} = process.env;
const service = new ews(
new ews.Uri('https://outlook.office365.com/EWS/Exchange.asmx'),
new ews.ExchangeVersion(ews.ExchangeVersion.Exchange2013_SP1)
);
service.Credentials = new ews.ExchangeCredentials(MAIL_USERNAME, MAIL_PASSWORD);
const message = new ews.EmailMessage(service);
message.ToRecipients.Add(MAIL_TO);
message.Subject = MAIL_SUBJECT;
message.Body = new ews.MessageBody(MAIL_TEXT);
message.SendAndSaveCopy().then(() => {
winston.info('Message sent successfully');
}, error => {
winston.error(error);
});
在上述示例代码中,我们通过 ews-javascript-api
模块创建了一个 ExchangeService
对象,然后通过 message.SendAndSaveCopy
方法发送邮件。其中 ews-javascript-api
模块是一个针对 EWS 协议的 Node.js 客户端库。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:node.js 基于 STMP 协议和 EWS 协议发送邮件 - Python技术站