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

如何通过Mailjet API重新激活已删除的域名发件人?

Mailjet API重新激活已删除域名发件人解决方案

通过Mailjet API添加域名发件人时,删除后再次添加会抛出MailjetClientRequestException,错误提示为already existing deleted sender。已知可通过管理控制台重新激活发件人,以下是通过API实现该操作的具体方案:

现有代码

fun addSender(campaign: Campaign, email: String, name: String): CampaignSender {
        try {
            campaign.sender?.let { existingSender ->
                deleteSender(existingSender)
            }

            val request = MailjetRequest(Sender.resource)
                .property(Sender.EMAIL, "*@" + extractDomainFromEmail(email))
                .property(Sender.NAME, name)

            val response = mailjetClient.post(request)

            if (response.status != 201) {
                throw RuntimeException("Failed to add sender: ${response.data}")
            }

            val senderData = response.data.getJSONObject(0)
            val mailjetSenderId = senderData.getLong("ID")
            val mailjetDnsId = senderData.optLong("DNSID")

            return campaignSenderRepository.save(
                CampaignSender(
                    campaign = campaign,
                    senderEmail = email,
                    senderName = name,
                    mailjetDnsId = mailjetDnsId,
                    mailjetSenderId = mailjetSenderId,
                    status = SenderStatus.EMAIL_SENT
                )
            )
        } catch (e: MailjetClientRequestException) {
            if (e.message?.contains("already existing deleted sender") == true) {
                return reactivateExistingSender(campaign, email, name)   /// ??? How
            }
            throw e
        }
    }

API激活实现步骤

Mailjet没有直接的“激活”接口,需通过查询已删除发件人+更新状态完成激活:

  1. 查询匹配目标域名的已删除发件人,获取其ID
  2. 调用PUT请求更新该发件人的状态为激活

实现reactivateExistingSender方法

private fun reactivateExistingSender(campaign: Campaign, email: String, name: String): CampaignSender {
    val domain = extractDomainFromEmail(email)
    val targetEmail = "*@$domain"

    // 1. 查询已删除的发件人
    val listRequest = MailjetRequest(Sender.resource)
        .filter(Sender.FILTER_EMAIL, targetEmail)
        .filter(Sender.FILTER_STATUS, "Deleted") // Mailjet中删除状态的标识为"Deleted"

    val listResponse = mailjetClient.get(listRequest)
    if (listResponse.status != 200 || listResponse.data.length() == 0) {
        throw RuntimeException("No deleted sender found for domain: $domain")
    }

    val deletedSender = listResponse.data.getJSONObject(0)
    val senderId = deletedSender.getLong("ID")
    val dnsId = deletedSender.optLong("DNSID")

    // 2. 发送激活请求(通过PUT更新状态为Active)
    val activateRequest = MailjetRequest(Sender.resource, senderId)
        .property(Sender.STATUS, "Active")
        .property(Sender.NAME, name) // 可同步更新名称

    val activateResponse = mailjetClient.put(activateRequest)
    if (activateResponse.status != 200) {
        throw RuntimeException("Failed to reactivate sender: ${activateResponse.data}")
    }

    // 保存到数据库
    return campaignSenderRepository.save(
        CampaignSender(
            campaign = campaign,
            senderEmail = email,
            senderName = name,
            mailjetDnsId = dnsId,
            mailjetSenderId = senderId,
            status = SenderStatus.EMAIL_SENT
        )
    )
}

注意事项

  • 确保Sender.FILTER_STATUS和Sender.STATUS的枚举值与Mailjet API文档一致,部分版本可能使用枚举常量而非字符串(比如SenderStatus.Deleted/SenderStatus.Active)
  • 若查询到多个已删除发件人,需根据业务逻辑选择目标对象(示例中默认取第一个匹配项)

内容的提问来源于stack exchange,提问作者Hugo Lassiège

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 08:43:17