在本文中,我們將探討smtp4dev提供的一系列API,這些API能夠幫助我們自動(dòng)化測(cè)試流程!

官方提供的API文檔解釋不足,需要花費(fèi)了不少時(shí)間才弄清楚每個(gè)API的具體功能以及它們各自的用途。

在此,我將分享這些API的詳細(xì)信息,包括你可能需要使用這些API的測(cè)試場(chǎng)景,希望這樣能幫助你們避免我之前所經(jīng)歷的困擾!

先決條件

本文假設(shè)你已經(jīng)安裝并啟動(dòng)了你的模擬服務(wù)器。

啟動(dòng)你的服務(wù)器,我們這就開(kāi)始吧!

首先,你可以通過(guò)訪問(wèn) http://localhost:5000/api 來(lái)獲取OpenAPI文檔。

遺憾的是,文檔中并沒(méi)有對(duì)每個(gè)API的具體功能進(jìn)行描述(這就是我們?cè)谶@里的原因)?。ㄟ€有,為什么會(huì)有人在URL中使用大寫(xiě)字母?。?/p>

設(shè)置服務(wù)器

在開(kāi)始從你的應(yīng)用程序發(fā)送電子郵件之前,你可能需要配置幾件事情,即用戶和郵箱。

用戶允許你進(jìn)行身份驗(yàn)證,而郵箱是你設(shè)置收件人的地方,最終也是你檢查收到的郵件的地方。

為此,我們將使用POST請(qǐng)求 http://localhost:5000/api/Server。然而,所需的請(qǐng)求體包含許多你可能想要保留為默認(rèn)值的參數(shù)。

以下是我處理這個(gè)問(wèn)題的方法。首先,使用GET請(qǐng)求 http://localhost:5000/api/Server,以便我們獲取當(dāng)前的服務(wù)器設(shè)置。響應(yīng)將如下所示。

{
"settingsAreEditable": true,
"lockedSettings": {},
"isRunning": true,
"exception": null,
"port": 25,
"hostName": "EC2AMAZ-FG4OBNC",
"allowRemoteConnections": true,
"numberOfMessagesToKeep": 100,
"numberOfSessionsToKeep": 100,
"imapPort": 143,
"disableMessageSanitisation": false,
"tlsMode": "None",
"authenticationRequired": false,
"credentialsValidationExpression": "",
"secureConnectionRequired": false,
"recipientValidationExpression": "",
"messageValidationExpression": "",
"disableIPv6": false,
"users": [],
"mailboxes": [
{
"name": "12@d.c",
"recipients": "12@d.c"
}
],
"relaySmtpServer": "",
"relaySmtpPort": 25,
"relayAutomaticEmails": [],
"relaySenderAddress": "",
"relayLogin": "",
"relayPassword": "",
"relayTlsMode": "None",
"relayAutomaticRelayExpression": "",
"webAuthenticationRequired": false,
"desktopMinimiseToTrayIcon": false,
"isDesktopApp": false,
"smtpAllowAnyCredentials": true,
"smtpEnabledAuthTypesWhenSecureConnection": [
"PLAIN",
"LOGIN",
"CRAM-MD5"
],
"smtpEnabledAuthTypesWhenNotSecureConnection": [
"PLAIN",
"LOGIN",
"CRAM-MD5"
],
"currentUserName": null,
"currentUserDefaultMailboxName": "Default"
}

然后,我們可以使用這個(gè)響應(yīng)作為我們的POST請(qǐng)求體,并只修改我們想要更改的參數(shù)。例如,如果我們想要添加一個(gè)新的郵箱,名為 to@example.com,收件人為 to@example.com,我們只需要將mailboxes鍵更改為以下內(nèi)容。

"mailboxes": [
{
"name": "12@d.c",
"recipients": "12@d.c"
},
{
"name": "to@example.com",
"recipients": "to@example.com"
}
]

獲取所有郵箱

如果你想在測(cè)試中遍歷所有的郵箱,你可以通過(guò)使用上述的GET /api/Server獲取它們,或者你也可以使用GET http://localhost:5000/api/Mailboxes API。

這將返回一個(gè)郵箱列表,如下所示。

[
{
"id": "42588956-8078-49c2-b9a1-82bcc8fec9f4",
"name": "Default"
},
{
"id": "51251730-80c1-4fa3-8eeb-18afe848294b",
"name": "12@d.c"
},
{
"id": "1b4dff75-8490-485d-a6e5-a83493721bea",
"name": "to@example.com"
}
]

你需要郵箱的名稱來(lái)獲取其中的消息(如果它不是默認(rèn)郵箱)。

獲取所有電子郵件

現(xiàn)在我們已經(jīng)為我們的收件人設(shè)置了郵箱,讓我們從我們的應(yīng)用程序發(fā)送一些電子郵件給它。

要獲取目標(biāo)郵箱中的所有消息,我們可以使用兩個(gè)API。

GET http://localhost:5000/api/Messages GET http://localhost:5000/api/Messages/new 并設(shè)置查詢參數(shù)mailboxName為目標(biāo)郵箱的名稱。

例如,如果我們想要獲取發(fā)送到12@d.c的電子郵件,我們只需執(zhí)行GET http://localhost:5000/api/Messages/new?mailboxName=12%40d.c。響應(yīng)將如下所示。

[
{
"isRelayed": false,
"deliveredTo": "12@d.c",
"id": "32a199b9-bdc5-4dfd-9556-00486c0c9372",
"from": "from@example.com",
"to": [
"12@d.c"
],
"receivedDate": "2024-07-05T06:43:02.1692009Z",
"subject": "test2",
"attachmentCount": 0,
"isUnread": false
},
{
"isRelayed": false,
"deliveredTo": "12@d.c",
"id": "bfcaacb6-4e31-4897-8d86-b51e0a9dc329",
"from": "from@example.com",
"to": [
"12@d.c"
],
"receivedDate": "2024-07-05T03:33:33.9320652Z",
"subject": "test1",
"attachmentCount": 0,
"isUnread": false
}
]

你以為“/new”意味著只獲取未讀郵件?不是的!如果你只對(duì)未讀消息感興趣,你得自己檢查isUnread字段!

那么“/new”是什么意思呢?這只是我的猜測(cè),但我認(rèn)為它允許你指定lastSeenMessageId,這樣任何在那之前的消息(包括那條消息)都不會(huì)被包含在內(nèi)。

你應(yīng)該使用哪一個(gè)?如果你想要基于最后一條消息ID來(lái)過(guò)濾消息,或者不需要其他類型的排序或過(guò)濾,使用/Messages/new。

如果你想要設(shè)置排序順序或使用特定的搜索詞查詢,使用/Messages。對(duì)我來(lái)說(shuō),這兩個(gè)API是可以互換的。

獲取電子郵件內(nèi)容

現(xiàn)在我們已經(jīng)得到了電子郵件(或者你稱之為消息)的ID,我們準(zhǔn)備獲取它的正文了!

分為兩步。

  1. 使用GET http://localhost:5000/api/Messages/{id}獲取電子郵件的所有部分。
  2. 遍歷這些部分,并通過(guò)GET http://localhost:5000/api/Messages/{id}/part/{part_id}/content獲取每個(gè)部分的內(nèi)容。

讓我們更詳細(xì)地看看這個(gè)過(guò)程。

首先,我們將使用Messages/{id}來(lái)獲取我們電子郵件的結(jié)構(gòu)。在響應(yīng)中,除了部分內(nèi)容外,還有其他信息,比如頭部信息。

{
"sessionEncoding": "iso-8859-1",
"eightBitTransport": null,
"hasHtmlBody": false,
"hasPlainTextBody": true,
"id": "32a199b9-bdc5-4dfd-9556-00486c0c9372",
"from": "...",
"to": [
"\"123\" <12@d.c>"
],
"cc": [],
"bcc": [],
"deliveredTo": [
"12@d.c"
],
"receivedDate": "2024-07-05T06:43:02.1692009Z",
"secureConnection": false,
"subject": "test2",
"parts": [
{
"id": "0",
"headers": [
{
"name": "Content-Type",
"value": "text/plain; charset=UTF-8"
},
{
"name": "Content-Transfer-Encoding",
"value": "base64"
}
],
"childParts": [],
"name": "0 - text/plain",
"messageId": "32a199b9-bdc5-4dfd-9556-00486c0c9372",
"contentId": null,
"attachments": [],
"warnings": [],
"size": 894,
"isAttachment": false
}
],
"headers": [
{
"name": "Date",
"value": "Fri, 5 Jul 2024 15:43:01 +0900 (JST)"
},
{
"name": "From",
"value": "..."
},
{
"name": "To",
"value": "123 <12@d.c>"
},
{
"name": "Message-ID",
"value": "<1922961261.6.1720161781968@localhost>"
},
{
"name": "Subject",
"value": "test2"
},
{
"name": "MIME-Version",
"value": "1.0"
},
{
"name": "X-Mailer",
"value": "ColdFusion 2018 Application Server"
}
],
"mimeParseError": null,
"relayError": ""
}

然后,我們將遍歷parts數(shù)組,并使用GET請(qǐng)求/Messages/{id}/part/{part_id}/content。這里的part_id將是parts數(shù)組中的id鍵。

part_id = 0為例:GET http://localhost:5000/api/Messages/32a199b9-bdc5-4dfd-9556-00486c0c9372/part/0/content,這是我們得到響應(yīng)的內(nèi)容。

Some body string

標(biāo)記郵件為已讀

由于我們只對(duì)獲取未讀郵件的內(nèi)容感興趣,因此以下做法是個(gè)好習(xí)慣:

在從應(yīng)用程序發(fā)送任何內(nèi)容之前,將所有郵件標(biāo)記為已讀(以防萬(wàn)一),
在我們獲取了郵件內(nèi)容之后,將該郵件標(biāo)記為已讀。

要將單個(gè)郵箱中的所有郵件標(biāo)記為已讀,我們將使用POST請(qǐng)求http://localhost:5000/api/Messages/markAllRead,并設(shè)置查詢參數(shù)mailboxName為目標(biāo)郵箱名稱。

而要將單個(gè)郵件標(biāo)記為已讀,我們可以調(diào)用POST請(qǐng)求http://localhost:5000/api/Messages/{id}/markRead。注意,在這種情況下不需要查詢參數(shù)mailboxName。

如何找到更多同類API?

冪簡(jiǎn)集成是國(guó)內(nèi)領(lǐng)先的API集成管理平臺(tái),專注于為開(kāi)發(fā)者提供全面、高效、易用的API集成解決方案。冪簡(jiǎn)API平臺(tái)可以通過(guò)以下兩種方式找到所需API:通過(guò)關(guān)鍵詞搜索API、或者從API Hub分類頁(yè)進(jìn)入尋找。

原文鏈接:https://blog.stackademic.com/use-smtp4dev-api-for-automate-smtp-email-server-testing-0faa45744a97

上一篇:

如何獲取 Parseur Pte Ltd. 開(kāi)放平臺(tái) API Key 密鑰(分步指南)

下一篇:

音頻 API 快速入門(mén)指南:在 Linux、Windows、FreeBSD 和 macOS 上播放和錄制聲音
#你可能也喜歡這些API文章!

我們有何不同?

API服務(wù)商零注冊(cè)

多API并行試用

數(shù)據(jù)驅(qū)動(dòng)選型,提升決策效率

查看全部API→
??

熱門(mén)場(chǎng)景實(shí)測(cè),選對(duì)API

#AI文本生成大模型API

對(duì)比大模型API的內(nèi)容創(chuàng)意新穎性、情感共鳴力、商業(yè)轉(zhuǎn)化潛力

25個(gè)渠道
一鍵對(duì)比試用API 限時(shí)免費(fèi)

#AI深度推理大模型API

對(duì)比大模型API的邏輯推理準(zhǔn)確性、分析深度、可視化建議合理性

10個(gè)渠道
一鍵對(duì)比試用API 限時(shí)免費(fèi)