python自动化测试时需要获取邮件中的验证码或者其他信息
根据邮件中的主题从最近的几封邮件中筛选出邮件,再选取最新的邮件,获取邮件中的验证码,我这里验证码都是数字,使用正则提取
def decode_str(s):
try:
value, charset = decode_header(s)[0]
if charset:
value = value.decode(charset)
return value
except Exception as e:
logging.error(logging.error(f"decode_str方法出错了:{e}"))
def get_email_code(email_config):
# print("开始获取邮件code")
server = poplib.POP3_SSL(email_config["email_server"])
server.user(email_config["email"])
server.pass_(email_config["password"])
# 登录的过程
resp, mails, octets = server.list()
index = len(mails) # 邮件的总数
# 此处的循环是取最近的几封邮件
index_list = []
index_dic = {}
for i in range(index - 2, index + 1):
resp, lines, octets = server.retr(i) # 取邮件
msg_content = b'\r\n'.join(lines).decode('utf-8', 'ignore')
msg = Parser().parsestr(msg_content)
# server.del(index) 删除邮件
Subject = decode_str(msg.get('Subject', ''))
if email_config["content"] in Subject:
compileX = re.compile("\d")
code = ''.join(map(str, compileX.findall(Subject)))
index_dic[i] = code
index_list.append(i)
code = index_dic[max(index_list)]
return code
email_config = {"email": "11111@xx.com", "password": "******", "email_server": "pop.exmail.qq.com", "content": "邮件主题中文案"}
get_email_code(email_config)