[GH-ISSUE #14] catch all 规则没有获取邮件 #9

Closed
opened 2026-02-26 12:17:33 +03:00 by kerem · 9 comments
Owner

Originally created by @mainjaylai on GitHub (Dec 26, 2024).
Original GitHub issue: https://github.com/beilunyang/moemail/issues/14

我已经在我的个人域名上部署好了 :https://mail.limingjie.us.kg 欢迎大家注册😀

但是我测试的时候发现了,catch all 并没有获取到邮件,随后我便在 cloudflare 中设置了自定义规则路由(如下图),发现这样才能捕获到。

Screenshot 2024-12-26 at 6 56 57 PM

捕获成功的样子⬇️

Screenshot 2024-12-26 at 6 56 05 PM

但是这样注册的每个邮箱都得添加规则,有点麻烦,不知道是不是我配置的原因还是 cloudflare 本身的原因,catch all 没有捕获到我新建的邮箱

Originally created by @mainjaylai on GitHub (Dec 26, 2024). Original GitHub issue: https://github.com/beilunyang/moemail/issues/14 我已经在我的个人域名上部署好了 :https://mail.limingjie.us.kg 欢迎大家注册😀 但是我测试的时候发现了,catch all 并没有获取到邮件,随后我便在 cloudflare 中设置了自定义规则路由(如下图),发现这样才能捕获到。 <img width="994" alt="Screenshot 2024-12-26 at 6 56 57 PM" src="https://github.com/user-attachments/assets/40693b50-754d-4aa9-b70f-c6516716200d" /> 捕获成功的样子⬇️ <img width="1200" alt="Screenshot 2024-12-26 at 6 56 05 PM" src="https://github.com/user-attachments/assets/fea9b735-e6d5-4304-acab-39abfcff4262" /> 但是这样注册的每个邮箱都得添加规则,有点麻烦,不知道是不是我配置的原因还是 cloudflare 本身的原因,catch all 没有捕获到我新建的邮箱
kerem closed this issue 2026-02-26 12:17:33 +03:00
Author
Owner

@beilunyang commented on GitHub (Dec 27, 2024):

email worker 有报错吗

<!-- gh-comment-id:2563457403 --> @beilunyang commented on GitHub (Dec 27, 2024): email worker 有报错吗
Author
Owner

@mainjaylai commented on GitHub (Dec 30, 2024):

@beilunyang 部署是没有任何问题的

Screenshot 2024-12-30 at 9 32 51 AM

然后我看 cloudflare 里面的 email-receiver-worker 里面访问是显示这样子的

Screenshot 2024-12-30 at 9 36 07 AM
<!-- gh-comment-id:2564940177 --> @mainjaylai commented on GitHub (Dec 30, 2024): @beilunyang 部署是没有任何问题的 <img width="469" alt="Screenshot 2024-12-30 at 9 32 51 AM" src="https://github.com/user-attachments/assets/854e6cc7-33f2-4bb1-9497-4b4cf4422aa5" /> 然后我看 cloudflare 里面的 email-receiver-worker 里面访问是显示这样子的 <img width="537" alt="Screenshot 2024-12-30 at 9 36 07 AM" src="https://github.com/user-attachments/assets/eda7e7b3-8d80-422e-994e-c27d56edb443" />
Author
Owner

@beilunyang commented on GitHub (Dec 30, 2024):

@beilunyang 部署是没有任何问题的

Screenshot 2024-12-30 at 9 32 51 AM 然后我看 cloudflare 里面的 email-receiver-worker 里面访问是显示这样子的 Screenshot 2024-12-30 at 9 36 07 AM

你去 dashboard 启用下 email-receiver-worker 的日志功能, 然后看看有没有报错

<!-- gh-comment-id:2565307945 --> @beilunyang commented on GitHub (Dec 30, 2024): > @beilunyang 部署是没有任何问题的 > > <img alt="Screenshot 2024-12-30 at 9 32 51 AM" width="469" src="https://private-user-images.githubusercontent.com/73374331/399198575-854e6cc7-33f2-4bb1-9497-4b4cf4422aa5.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzU1NTU0MTgsIm5iZiI6MTczNTU1NTExOCwicGF0aCI6Ii83MzM3NDMzMS8zOTkxOTg1NzUtODU0ZTZjYzctMzNmMi00YmIxLTk0OTctNGI0Y2Y0NDIyYWE1LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDEyMzAlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQxMjMwVDEwMzgzOFomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWE5NTA0ZThjMzcyNGIyZDVhMTMzOWNjMTE2NDE0YTdmZTM4MzFhYjYyMzY1OTM4MGUwZWQyMmRiNGIxN2E4YjAmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.qYx5izDRHUsZPYqAkPKID5Wx55Tcoqp_HfIr85_dCX0"> > 然后我看 cloudflare 里面的 email-receiver-worker 里面访问是显示这样子的 > > <img alt="Screenshot 2024-12-30 at 9 36 07 AM" width="537" src="https://private-user-images.githubusercontent.com/73374331/399198623-eda7e7b3-8d80-422e-994e-c27d56edb443.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzU1NTU0MTgsIm5iZiI6MTczNTU1NTExOCwicGF0aCI6Ii83MzM3NDMzMS8zOTkxOTg2MjMtZWRhN2U3YjMtOGQ4MC00MjJlLTk5NGUtYzI3ZDU2ZWRiNDQzLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDEyMzAlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQxMjMwVDEwMzgzOFomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTk2N2FhNmU0ODBlMDEzZmQ3MjE3OTlmMDI5ZjUyYjIzZTVkYTY4OWY3ZTM0N2E3YjAyODc5ZTU0ZGFkMTQyMGUmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.Go6IJBFf3-tbsDiL-pPWGVbkazdwDDeDrTNRjMMEJKY"> 你去 dashboard 启用下 email-receiver-worker 的日志功能, 然后看看有没有报错
Author
Owner

@mainjaylai commented on GitHub (Dec 31, 2024):

@beilunyang 没有报错,不过还是和之前一样的问题

Screenshot 2024-12-31 at 9 41 46 AM

就是只有我指定特定的邮箱发送到 email-receiver-worker 才能接收到(比如我特定指定了 123@limingjie.us.kg),但是比如我没有指定的邮箱(比如 111@limingjie.us.kg),然后 email-receiver-worker 并没有接收到,所以我怀疑是 catch-all 规则的问题

Screenshot 2024-12-31 at 9 45 12 AM
<!-- gh-comment-id:2566064183 --> @mainjaylai commented on GitHub (Dec 31, 2024): @beilunyang 没有报错,不过还是和之前一样的问题 <img width="1064" alt="Screenshot 2024-12-31 at 9 41 46 AM" src="https://github.com/user-attachments/assets/65a21d7e-44cf-45c8-8a91-d2fbcb2b3aba" /> 就是只有我指定特定的邮箱发送到 email-receiver-worker 才能接收到(比如我特定指定了 123@limingjie.us.kg),但是比如我没有指定的邮箱(比如 111@limingjie.us.kg),然后 email-receiver-worker 并没有接收到,所以我怀疑是 catch-all 规则的问题 <img width="1068" alt="Screenshot 2024-12-31 at 9 45 12 AM" src="https://github.com/user-attachments/assets/25c25d50-b646-489e-af68-1279e367d345" />
Author
Owner

@beilunyang commented on GitHub (Jan 6, 2025):

https://community.cloudflare.com/t/the-status-of-the-email-routing-rules-cannot-be-enabled/681051
你的账户下状态一列一直在loading,正常应该是显示”活动“, 你的账户可能触发了 Cloudflare 的 Bug

image

<!-- gh-comment-id:2572646111 --> @beilunyang commented on GitHub (Jan 6, 2025): https://community.cloudflare.com/t/the-status-of-the-email-routing-rules-cannot-be-enabled/681051 你的账户下状态一列一直在loading,正常应该是显示”活动“, 你的账户可能触发了 Cloudflare 的 Bug ![image](https://github.com/user-attachments/assets/5ef69476-8d7d-4389-8928-a60305bf267a)
Author
Owner

@beilunyang commented on GitHub (Jan 6, 2025):

问题描述

我新建了一个cloudflare账户,复现了这个问题,默认 Catch-all 规则是禁用的,需要手动点击状态一列的开关,来启用。但由于cloudflare 的 bug,状态一列一直显示 loading, 无法显示启用开关,导致无法启用 Catch-all 规则。

解决方法

Cloudflare 有 提供 API , 可以不通过 dashboard 界面来启用 Catch-all 规则。API 文档:
https://developers.cloudflare.com/api/node/resources/email_routing/subresources/rules/subresources/catch_alls/methods/update/

我写了个脚本,填写参数,运行即可

import Cloudflare from 'cloudflare';

const client = new Cloudflare({
  apiToken: '<具有Email Routing Rules 编辑权限的 API_TOKEN>',
});

const emailRoutingRule = await client.emailRouting.rules.catchAlls.update('<你的ZONE_ID>', {
  actions: [{ type: 'worker', value: ['email-receiver-worker'] }],
  matchers: [{  type: 'all'  }],
  enabled: true,
  name: 'Catch-all rule',
});

console.log(emailRoutingRule);
<!-- gh-comment-id:2572899675 --> @beilunyang commented on GitHub (Jan 6, 2025): ### 问题描述 我新建了一个cloudflare账户,复现了这个问题,默认 Catch-all 规则是禁用的,需要手动点击状态一列的开关,来启用。但由于cloudflare 的 bug,状态一列一直显示 loading, 无法显示启用开关,导致无法启用 Catch-all 规则。 ### 解决方法 Cloudflare 有 提供 API , 可以不通过 dashboard 界面来启用 Catch-all 规则。API 文档: https://developers.cloudflare.com/api/node/resources/email_routing/subresources/rules/subresources/catch_alls/methods/update/ 我写了个脚本,填写参数,运行即可 ```js import Cloudflare from 'cloudflare'; const client = new Cloudflare({ apiToken: '<具有Email Routing Rules 编辑权限的 API_TOKEN>', }); const emailRoutingRule = await client.emailRouting.rules.catchAlls.update('<你的ZONE_ID>', { actions: [{ type: 'worker', value: ['email-receiver-worker'] }], matchers: [{ type: 'all' }], enabled: true, name: 'Catch-all rule', }); console.log(emailRoutingRule); ```
Author
Owner

@mainjaylai commented on GitHub (Jan 6, 2025):

成功了!!大佬太强了👍 感谢大佬 @beilunyang

<!-- gh-comment-id:2572958826 --> @mainjaylai commented on GitHub (Jan 6, 2025): 成功了!!大佬太强了👍 感谢大佬 @beilunyang
Author
Owner

@xiciya201477 commented on GitHub (Jan 28, 2025):

大佬,大佬,这个参数怎么写,我有点理解不了,然后这个在哪运行,我不清楚,我是小白@beilunyang

<!-- gh-comment-id:2618550740 --> @xiciya201477 commented on GitHub (Jan 28, 2025): 大佬,大佬,这个参数怎么写,我有点理解不了,然后这个在哪运行,我不清楚,我是小白@beilunyang
Author
Owner

@bravexist commented on GitHub (Apr 12, 2025):

大佬,大佬,这个参数怎么写,我有点理解不了,然后这个在哪运行,我不清楚,我是小白@beilunyang

我用ai改成了python,并且我用上述的,一直不会创建编辑路由规则的api,索性使用了全局api。

import requests
import json
import os
# 改前三个环境变量即可。
# 使用环境变量或直接填写
EMAIL = os.environ.get("CLOUDFLARE_EMAIL", "你的邮箱")
API_KEY = os.environ.get("CLOUDFLARE_API_KEY", "你的全局api")
ZONE_ID = "zone-id"  # 你可以在Cloudflare仪表板域名概述页面找到,区域id



# 设置请求头
headers = {
    'X-Auth-Email': EMAIL,
    'X-Auth-Key': API_KEY,
    'Content-Type': 'application/json'
}

# 1. 首先获取Email Routing状态
get_url = f'https://api.cloudflare.com/client/v4/zones/{ZONE_ID}/email/routing'

try:
    # 先获取当前状态
    get_response = requests.get(get_url, headers=headers)
    print(f"获取状态码: {get_response.status_code}")
    print(f"获取响应内容: {get_response.text}")
    
    # 尝试启用Email Routing (使用PATCH方法)
    enable_payload = {"enabled": True}
    enable_response = requests.patch(get_url, headers=headers, data=json.dumps(enable_payload))
    
    print(f"启用状态码: {enable_response.status_code}")
    print(f"启用响应内容: {enable_response.text}")
    
    # 只有在成功的情况下继续下一步
    if enable_response.status_code in [200, 201, 202]:
        print("Email Routing启用成功,继续设置Catch-all规则")
        
        # 2. 更新catch-all规则
        catchall_url = f'https://api.cloudflare.com/client/v4/zones/{ZONE_ID}/email/routing/rules/catch_all'
        catchall_payload = {
            'actions': [{'type': 'worker', 'value': ['email-receiver-worker']}],
            'matchers': [{'type': 'all'}],
            'enabled': True,
            'name': 'Catch-all rule'
        }
        
        catchall_response = requests.put(catchall_url, headers=headers, data=json.dumps(catchall_payload))
        print(f"\nCatch-all规则状态码: {catchall_response.status_code}")
        print(f"Catch-all规则响应内容: {catchall_response.text}")
        
        if catchall_response.status_code in [200, 201, 202]:
            print("成功更新Catch-all规则!")
        else:
            print("更新Catch-all规则失败")
    else:
        print(f"启用Email Routing失败,不继续执行下一步")

except Exception as e:
    print(f"发生错误: {str(e)}")
    import traceback
    traceback.print_exc()
<!-- gh-comment-id:2798869404 --> @bravexist commented on GitHub (Apr 12, 2025): > 大佬,大佬,这个参数怎么写,我有点理解不了,然后这个在哪运行,我不清楚,我是小白[@beilunyang](https://github.com/beilunyang) 我用ai改成了python,并且我用上述的,一直不会创建编辑路由规则的api,索性使用了全局api。 ``` import requests import json import os # 改前三个环境变量即可。 # 使用环境变量或直接填写 EMAIL = os.environ.get("CLOUDFLARE_EMAIL", "你的邮箱") API_KEY = os.environ.get("CLOUDFLARE_API_KEY", "你的全局api") ZONE_ID = "zone-id" # 你可以在Cloudflare仪表板域名概述页面找到,区域id # 设置请求头 headers = { 'X-Auth-Email': EMAIL, 'X-Auth-Key': API_KEY, 'Content-Type': 'application/json' } # 1. 首先获取Email Routing状态 get_url = f'https://api.cloudflare.com/client/v4/zones/{ZONE_ID}/email/routing' try: # 先获取当前状态 get_response = requests.get(get_url, headers=headers) print(f"获取状态码: {get_response.status_code}") print(f"获取响应内容: {get_response.text}") # 尝试启用Email Routing (使用PATCH方法) enable_payload = {"enabled": True} enable_response = requests.patch(get_url, headers=headers, data=json.dumps(enable_payload)) print(f"启用状态码: {enable_response.status_code}") print(f"启用响应内容: {enable_response.text}") # 只有在成功的情况下继续下一步 if enable_response.status_code in [200, 201, 202]: print("Email Routing启用成功,继续设置Catch-all规则") # 2. 更新catch-all规则 catchall_url = f'https://api.cloudflare.com/client/v4/zones/{ZONE_ID}/email/routing/rules/catch_all' catchall_payload = { 'actions': [{'type': 'worker', 'value': ['email-receiver-worker']}], 'matchers': [{'type': 'all'}], 'enabled': True, 'name': 'Catch-all rule' } catchall_response = requests.put(catchall_url, headers=headers, data=json.dumps(catchall_payload)) print(f"\nCatch-all规则状态码: {catchall_response.status_code}") print(f"Catch-all规则响应内容: {catchall_response.text}") if catchall_response.status_code in [200, 201, 202]: print("成功更新Catch-all规则!") else: print("更新Catch-all规则失败") else: print(f"启用Email Routing失败,不继续执行下一步") except Exception as e: print(f"发生错误: {str(e)}") import traceback traceback.print_exc() ```
Sign in to join this conversation.
No labels
pull-request
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
starred/moemail#9
No description provided.