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

Python调用Twilio API发短信报缺少客户端凭证错如何解决

故障原因

直接触发Credentials are required to create a TwilioClient报错的核心原因是环境变量加载顺序错误:
代码中先执行os.getenv()读取ACCOUNT_SID、AUTH_TOKEN等配置,之后才调用load_dotenv()加载.env文件内的凭证。执行读取操作时,.env存储的配置还未注入环境变量,读取到的所有凭证值均为None,传入Twilio客户端时自然会判定为凭证缺失抛出异常。

除此之外代码还有3处会影响运行的问题:

  • 存在冗余导入:重复导入了2次os模块,还导入了完全未使用的email.message模块
  • 变量引用错误:短信发送成功后返回的对象变量名为messages,但日志打印时写的是message.sid,message是从email模块误导入的对象,不存在sid属性,就算凭证问题修复,运行到这行也会抛出属性错误
  • 未做空值校验:如果.env中漏写配置项,没有提前拦截的话还是会触发同类报错
修复步骤
  1. 调整代码执行顺序:将load_dotenv()的调用挪到所有os.getenv()读取操作之前,保证读取配置时.env的内容已经加载完成
  2. 删除冗余、错误的导入语句
  3. 修正日志打印时的变量名错误
  4. 可选增加配置空值校验,提前定位配置缺失问题

修复后的可运行代码如下:

import os
import logging
from dotenv import load_dotenv
from twilio.rest import Client

logging.basicConfig(level=logging.DEBUG, format='%(asctime)s - %(levelname)s - %(message)s')

# 先加载.env文件,再读取环境变量
load_dotenv()

# 读取配置
ACCOUNT_SID = os.getenv("ACCOUNT_SID")
AUTH_TOKEN = os.getenv("AUTH_TOKEN")
PHONE = os.getenv("PHONE")
RECIPIENT = os.getenv("RECIPIENT")

# 配置校验(可选)
required_configs = [ACCOUNT_SID, AUTH_TOKEN, PHONE, RECIPIENT]
if any([not config for config in required_configs]):
    raise ValueError("请检查.env文件,确保ACCOUNT_SID、AUTH_TOKEN、PHONE、RECIPIENT均已正确配置")

# 初始化客户端发送短信
twilioCli = Client(ACCOUNT_SID, AUTH_TOKEN)
message = twilioCli.messages.create(
    body="The boring task is finished",
    from_=PHONE,
    to=RECIPIENT
)

logging.debug(f"{message.sid}")

注意:运行前请确保.env文件和脚本处于同一目录,文件内配置的Twilio号码、收件人号码均符合E.164格式要求(例如中国号码格式为+86xxxxxxxxxxx,美国号码为+1xxxxxxxxxx)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 03:48:09