Commit 4583897b authored by mark's avatar mark

feat: 添加脚本

parents
/**
* @fileoverview 使用 API 批量管理 Mailgun 发件域
* @author Mark
* @version 1.0.0
* @date 创建日期 (2024-05-24)
* @lastModified 最后修改日期 (2024-05-24)
*/
const username = '%USERNAME%'
const password = '%PASSWORD%'
function getAuth() {
return `Basic ${ btoa(`${ username }:${ password }`) }`
}
function getDomainPath(url, domain) {
return url.replace('{domain}', domain)
}
function request(method, path, formData) {
let headers = new Headers();
headers.append('Authorization', getAuth())
return fetch(`https://api.mailgun.net/${ path }`, {
method: method,
headers,
body: formData,
}).then(r => r.json())
.then(data => {
console.log(data)
return data
})
}
async function updateDomainTracking(domain, trackingType, activeValue) {
const formData = new FormData()
formData.append('active', activeValue)
await request('PUT', getDomainPath(`v3/domains/{domain}/tracking/${ trackingType }`, domain), formData)
}
async function createWebhooks(domain, id, ...urls) {
const form = new FormData()
form.append('id', id)
urls.forEach(url => form.append('url', url))
const data = await request('POST', getDomainPath('v3/domains/{domain}/webhooks', domain), form)
console.log(data)
}
function initiateX509Certificate(domain) {
return request('POST', getDomainPath(`v2/x509/{domain}`, domain))
}
function getX509CertificateStatus(domain) {
return request('GET', getDomainPath(`v2/x509/{domain}/status`, domain))
}
function updateDomain(domain, data) {
var form = new FormData();
for (var key in data) {
form.append(key, data[key]);
}
return request('PUT', getDomainPath(`v4/domains/{domain}`, domain), form)
}
async function getDomains() {
const data = await request('GET', 'v4/domains')
}
async function getDomainDetails(domain) {
return await request('GET', getDomainPath('v4/domains/{domain}', domain))
}
async function activeHttpsTracking(webPrefix, domain) {
const x509Domain = `${webPrefix}.${domain}`
initiateX509Certificate(x509Domain)
await delay(2000)
getX509CertificateStatus(x509Domain)
updateDomain(domain, {web_scheme: 'https'})
}
function delay(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
////////////////////////////////////
////////////////////////////////////
////////////////////////////////////
////// 以下是执行批量管理发送域的示例 //////
const mailgunWebhookUrl = [
'https://test.parcelpanel.com/mailgun/openAndClick',
'https://prod.parcelpanel.com/mailgun/openAndClick',
]
const domainList = [
'x1.parcelpanel.net',
'x2.parcelpanel.com',
]
domainList.forEach(async domain => {
await updateDomain(domain, {web_scheme: 'https'})
})
domainList.forEach(async domain => {
// 开启 https tracking
const {web_prefix, web_scheme} = (await getDomainDetails(domain)).domain
if (web_scheme !== 'https') {
await activeHttpsTracking(web_prefix, domain)
}
await updateDomainTracking(domain, 'open', 'true')
await updateDomainTracking(domain, 'click', 'true')
await createWebhooks(domain, 'clicked', ...mailgunWebhookUrl)
await createWebhooks(domain, 'opened', ...mailgunWebhookUrl)
})
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment