如何用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
相关产品推荐
相关产品推荐

