撰于 阅读 25

使用 cloudflare 域名邮箱实现新邮件微信通知

Cloudflare 一直有个域名邮箱功能,无法发送邮件,但是可以无限前缀转发到自己邮箱。

现在它的域名邮箱功能,开始支持 worker 了,worker 可以通过新邮件到达触发。

这样就可以做到,使用 worker 发送通知,不需要手机一直开着邮箱 APP 接收邮件了。

不喜欢 APP 一直在后台,不只是耗电,也很担心隐私的问题。

Worker 可以获取新邮件的发送人和内容,我只想要通知,然后使用 outlook 客户端查看邮件。

其实因为有 worker ,不只是简单的邮件通知,还可以玩很多的东西,毕竟一封邮件就可以触发了。

export default {
  async email(message, env, ctx) {
    // 获取原始发件人邮箱
    let originalSender = '';
    const fromHeader = message.headers.get("From");
    if (fromHeader) {
      // 使用正则表达式提取邮箱地址
      const match = fromHeader.match(/<([^>]+)>/);
      originalSender = match ? match[1] : fromHeader.trim();
    }
    // 如果没有找到发件人,尝试从其他头部获取
    if (!originalSender) {
      const senderHeader = message.headers.get("Sender");
      if (senderHeader) {
        const match = senderHeader.match(/<([^>]+)>/);
        originalSender = match ? match[1] : senderHeader.trim();
      }
    }

    // 如果仍然没有找到,使用一个默认值
    if (!originalSender) {
      originalSender = "未知发件人";
    }
    // 获取邮件主题
    const subject = message.headers.get("Subject") || "无主题";

    // 发送企业微信消息
    const wechatWebhookUrl = 'https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key='
    const wechatMessage = {
      msgtype: 'text',
      text: {
        content: `收到一封新邮件!\n发件人: ${originalSender}`
      }
    }

    // 将消息发送到企业微信机器人
    const response = await fetch(wechatWebhookUrl, {
      method: 'POST',
      headers: {
        'Content-Type': 'application/json'
      },
      body: JSON.stringify(wechatMessage)
    })

    // 返回响应
    if (response.ok) {
      return new Response('微信消息发送成功', { status: 200 })
    } else {
      return new Response('微信消息发送失败', { status: 500 })
    }
  }
}