我创建了一个允许我从mailgun帐户中提取信息的功能。该函数本身可以工作,但是我们进入了竞争状态,在Mailgun存储引擎中可以访问事件之前,已经发生了对Event API的请求。为了解决这个问题,我们已经开始轮询电子邮件。代码如下所示。
我们遇到的问题是,即使在mailgun仪表板中显示为已接受/已发送,电子邮件也永远不会返回响应。每次我们都会收到200条响应,但是主体项目始终返回为空数组。我们可以对同一端点执行ping操作的频率是否有限制?我不确定为什么如果我们将响应调用超时30秒而不是连续轮询事件端点,为什么会起作用。
Cypress.Commands.add('get_target_email', (email, subject) => {
const currentTime = moment().unix();
const oldTime = moment()
.subtract(60, 's')
.unix();
const options = {
url: Cypress.env('MAILGUN_EVENTS_API_URL'),
auth: {
user: `api`,
pass: Cypress.env('MG_API_KEY'),
},
method: 'GET',
qs: {
event: 'accepted',
recipient: email,
begin: oldTime,
end: currentTime,
limit: 10,
subject,
},
};
const req = () => {
cy.request(options).then(res => {
if (res.body.items.length > 0) {
return res.body;
}
req();
});
};
return req();
});
…
对于每个请求,我都会得到200个响应。但是响应的主体返回一个空数组。如果我转到mailgun仪表板,则可以看到该电子邮件已被接受并发送。