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

使用Playwright与Mailosaur测试时收件箱不刷新问题咨询

解决Mailosaur重复获取旧邮件的问题

你遇到的问题核心是同一邮箱未清理旧邮件,导致mailosaur.messages.get每次返回最早匹配的邮件。可以通过两种方式解决:

方法一:测试完成后删除邮件

在测试流程结束(比如重置密码操作完成后),删除当前获取到的邮件,确保下一次测试时收件箱无旧数据。修改代码如下:

// 获取重置邮件
const email = await mailosaur.messages.get(server_Id, { sentTo: user_email });
expect(email.subject).toEqual('Password reset request by hello@9etco9lx.mailosaur.net');

// 提取链接并跳转
const resetPasswordLink = email.html?.links?.[1].href ?? '';
await this.page.goto(resetPasswordLink);

// 执行完重置操作后,删除该邮件
await mailosaur.messages.del(email.id);

如果需要在测试开始前批量清空指定邮箱的所有邮件,也可以用这个接口:

// 测试启动前,清空目标邮箱的所有历史邮件
await mailosaur.messages.deleteAll(server_Id, { sentTo: user_email });

方法二:精准获取最新邮件

通过添加查询条件,确保只获取测试启动后收到的最新邮件,避免匹配旧邮件。有两种实现方式:

方式1:基于时间过滤

记录测试开始时间,只查询该时间点之后收到的邮件:

// 记录测试启动时间
const testStartTime = new Date();

// 先触发忘记密码请求(这一步必须在获取邮件之前执行)
await this.page.click('#forgot-password-button');
// ...其他前置操作

// 只获取测试启动后收到的邮件
const email = await mailosaur.messages.get(server_Id, {
  sentTo: user_email,
  receivedAfter: testStartTime
});

方式2:按接收时间倒序取最新一封

通过列表查询接口,按接收时间倒序排列,直接取第一封最新邮件:

const emailList = await mailosaur.messages.list(server_Id, {
  sentTo: user_email,
  orderBy: 'received',
  direction: 'desc', // 倒序排列,最新邮件排在最前
  limit: 1 // 只返回1封邮件
});

const email = emailList.items[0];
if (!email) {
  throw new Error('未找到重置密码邮件');
}

关键注意点

  • 务必确保邮件查询操作是在触发忘记密码请求之后执行,避免提前查询拿到旧邮件。
  • 批量删除邮件时,严格通过sentTo参数过滤目标邮箱,防止误删其他测试用的邮件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 22:49:55