You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为Ubuntu服务器上的Node.js应用配置域名邮件接收功能?

当然可行!不过得先明确:Nodemailer本身是专注于发送邮件的工具,要实现自有域名的邮件接收,你需要搭配其他库或者利用邮件服务商的服务来搞定。下面给你两种最常用的实现方案,一步步来:

方案一:通过IMAP/POP3协议拉取自有域名邮箱的邮件

这种方式适合你已经有自建的邮件服务器,或者用了支持IMAP/POP3的域名邮箱服务商(比如阿里云企业邮箱、腾讯企业邮箱等)。

  1. 确认邮件服务器的IMAP/POP3配置
    先去你的域名邮箱后台,找到IMAP/POP3的开启选项(大部分服务商默认开启,但需要确认),记下这些信息:

    • IMAP服务器地址(比如imap.yourdomain.com)
    • IMAP端口(通常是993,SSL加密)
    • 邮箱账号(比如admin@yourdomain.com)
    • 邮箱密码/授权码(有些服务商需要用授权码代替密码,防止密码泄露)
  2. 安装Node.js的IMAP客户端库
    推荐用imap-simple,它封装了底层的node-imap,用起来更简洁:

    npm install imap-simple
    
  3. 编写拉取邮件的代码示例
    下面是一个基础的示例,用来连接IMAP服务器,获取收件箱的未读邮件:

    const imaps = require('imap-simple');
    
    const config = {
      imap: {
        user: 'admin@yourdomain.com',
        password: '你的邮箱密码/授权码',
        host: 'imap.yourdomain.com',
        port: 993,
        tls: true,
        authTimeout: 3000
      }
    };
    
    imaps.connect(config).then(function(connection) {
      return connection.openBox('INBOX').then(function() {
        // 搜索未读邮件
        const searchCriteria = ['UNSEEN'];
        const fetchOptions = {
          bodies: ['HEADER', 'TEXT'],
          markSeen: true // 拉取后标记为已读
        };
    
        return connection.search(searchCriteria, fetchOptions).then(function(messages) {
          messages.forEach(function(message) {
            const header = message.parts.filter(part => part.which === 'HEADER')[0].body;
            const body = message.parts.filter(part => part.which === 'TEXT')[0].body;
            console.log('发件人:', header.from[0]);
            console.log('主题:', header.subject[0]);
            console.log('邮件内容:', body);
          });
        });
      });
    }).catch(function(err) {
      console.error('连接或拉取邮件出错:', err);
    });
    

方案二:利用第三方邮件服务商的Webhook推送邮件到你的Node.js应用

如果你的域名托管在Mailgun、SendGrid这类邮件服务商,或者不想自己维护IMAP连接,这种方式更省心——服务商直接把收到的邮件推送到你的Node.js接口。

  1. 在服务商后台配置邮件路由
    以Mailgun为例,你需要:

    • 在Mailgun后台添加并验证你的自有域名
    • 设置一个路由规则,比如把所有发往*@yourdomain.com的邮件转发到你的Node.js服务的接口(比如https://yourapp.com/api/receive-email)
  2. 在Node.js中编写接收邮件的接口
    用Express的话,示例代码如下(需要安装express和body-parser):

    npm install express body-parser
    
    const express = require('express');
    const bodyParser = require('body-parser');
    const app = express();
    
    // 解析服务商发送的表单数据
    app.use(bodyParser.urlencoded({ extended: true }));
    
    app.post('/api/receive-email', (req, res) => {
      // 服务商推送的邮件数据通常包含在req.body里
      const sender = req.body.sender;
      const subject = req.body.subject;
      const body = req.body.body_plain; // 纯文本内容,也可以取body_html获取HTML内容
    
      console.log('收到新邮件:', { sender, subject });
      console.log('邮件内容:', body);
    
      // 在这里可以做后续处理,比如存储到数据库、触发业务逻辑等
      res.status(200).send('邮件已接收');
    });
    
    app.listen(3000, () => {
      console.log('服务启动,监听端口3000');
    });
    
  3. 验证Webhook配置
    服务商通常会给你一个验证链接,或者发送测试邮件到你的域名,确保你的接口能正确接收并返回200状态码,这样服务商就会持续推送邮件了。

关键注意事项

  • 如果是自建邮件服务器:要确保服务器有公网IP,开放IMAP/POP3的端口(993/995),并且配置好SPF、DKIM、DMARC等DNS记录,否则邮件可能被拒收或者标记为垃圾。
  • 处理复杂邮件:如果邮件包含附件、多部分内容,推荐用mailparser库来解析,它能帮你提取附件、HTML内容、纯文本内容等。
  • 安全问题:不管用哪种方式,都不要硬编码邮箱密码/授权码,建议用环境变量(比如process.env.EMAIL_PASSWORD)来存储敏感信息。

内容的提问来源于stack exchange,提问作者Athomas1

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:09:40