使用 C++ 通過 SMTP 協議發送郵件,直接發送純文本數據無法對齊,需求以表格形式呈現,保證列對齊、可讀性強。
SMTP 發送的郵件正文支持 MIME 類型,設置 Content-Type: text/html 即可渲染 HTML 表格。
std::string buildHtmlTable(const std::vector>& data) {
std::ostringstream oss;
oss << "";
// 表頭
oss << "";
for (const auto& header : data[0]) {
oss << "" << header << " ";
}
oss << " ";
// 數據行
for (size_t i = 1; i < data.size(); ++i) {
oss << "";
for (const auto& cell : data[i]) {
oss << "" << cell << " ";
}
oss << " ";
}
oss << "
";
return oss.str();
}
<table>:表格容器,border='1' 顯示邊框。<tr>:表格行。<th>:表頭單元格,默認加粗居中。<td>:數據單元格。style='border-collapse:collapse;':合併邊框,避免雙線。Content-Type: multipart/alternative,同時提供 text/plain(純文本備用)和 text/html(富文本)兩個部分。MIME-Version: 1.0
Content-Type: multipart/alternative; boundary="boundary_string"
--boundary_string
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: base64
[純文本內容Base64]
--boundary_string
Content-Type: text/html; charset=utf-8
Content-Transfer-Encoding: base64
[HTML表格Base64]
--boundary_string--
SMTPClientSession、MailMessage 等高級封裝。C++ 發送對齊表格郵件的關鍵在於構建 HTML 表格字符串並作為 text/html MIME 部分發送。採用成熟庫(如 VMime、POCO)可大幅減少協議細節處理,專注於業務數據到 HTML 的轉換邏輯。