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

如何用Mailgun与Python验证邮箱有效性并解决401错误及列表清洗问题

解决Mailgun邮箱验证的401错误与is_valid判断逻辑

首先,咱们先搞定401 Unauthorized这个错误——这明显是API认证失败了!你代码里的"key"是占位符,得换成你从Mailgun控制台拿到的真实API密钥,格式应该是key-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx那种。另外要确认这个密钥有没有启用地址验证的权限,Mailgun的免费套餐可能有调用次数限制,也要留意一下。

接下来,咱们修改代码来实现is_valid的判断逻辑,同时处理API响应的各种情况:

完整修改后的代码示例

import requests
import csv

def get_validate(email):
    # 替换成你自己的Mailgun API密钥!
    API_KEY = "key-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
    response = requests.get(
        "https://api.mailgun.net/v3/address/validate",
        auth=("api", API_KEY),
        params={"address": email}
    )
    # 先处理响应状态码
    if response.status_code == 200:
        # 解析JSON响应
        result = response.json()
        return result.get("is_valid")  # 直接返回布尔值
    elif response.status_code == 401:
        raise Exception("API认证失败,请检查你的API密钥是否正确")
    else:
        # 处理其他错误,比如请求超限、邮箱格式完全错误等
        print(f"验证邮箱 {email} 时出错,状态码: {response.status_code}")
        return None

# 处理CSV文件,过滤无效邮箱
valid_emails = []
invalid_emails = []

with open('emails.csv', 'r') as file:
    reader = csv.reader(file)
    # 如果你的CSV有表头,先跳过第一行
    next(reader)
    for row in reader:
        if not row:
            continue  # 跳过空行
        email = row[0].strip()  # 假设邮箱在第一列
        try:
            is_valid = get_validate(email)
            if is_valid is True:
                valid_emails.append(email)
            elif is_valid is False:
                invalid_emails.append(email)
            else:
                print(f"无法确定邮箱 {email} 的有效性")
        except Exception as e:
            print(f"处理邮箱 {email} 时发生异常: {str(e)}")
            break  # 如果认证失败,直接停止运行

# 保存有效邮箱到新文件
with open('valid_emails.csv', 'w', newline='') as valid_file:
    writer = csv.writer(valid_file)
    writer.writerow(["Valid Email"])  # 写表头
    for email in valid_emails:
        writer.writerow([email])

# 保存无效邮箱到新文件(可选)
with open('invalid_emails.csv', 'w', newline='') as invalid_file:
    writer = csv.writer(invalid_file)
    writer.writerow(["Invalid Email"])
    for email in invalid_emails:
        writer.writerow([email])

print(f"处理完成!有效邮箱: {len(valid_emails)} 个,无效邮箱: {len(invalid_emails)} 个")

关键要点说明

  • 认证修复:一定要替换API_KEY为你自己的真实密钥,Mailgun的API密钥在你的账户控制台里可以找到。
  • 响应解析:调用response.json()把API返回的JSON字符串转成字典,然后用get("is_valid")获取布尔值,避免键不存在的情况。
  • 错误处理:增加了状态码判断和异常捕获,能及时发现认证失败、请求错误等问题,不会让程序直接崩溃。
  • CSV处理:跳过表头(如果有的话),处理空行,最后把有效/无效邮箱分别保存到新文件,方便后续使用。

额外提醒

  • Mailgun的地址验证API有调用频率限制,免费版一般是每月500次调用,如果你有大量邮箱要验证,可能需要升级套餐或者分批处理。
  • 有些邮箱可能会返回None(比如API请求失败),建议把这些邮箱单独列出来,后续手动检查或者重新验证。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 04:12:17