调用Brevo SMTP API发送含终端可点击链接邮件的JSON格式问题
问题分析与解决
核心问题
你用的是终端专属的OSC 8超链接语法(\e]8;;URL\e\文本\e]8;;\e\),这是给终端渲染用的特殊转义序列,但Brevo的SMTP API需要的是标准HTML格式的邮件内容,同时JSON不允许包含未转义的控制字符(比如\e对应的ESC不可打印字符),这才导致了「Input must be a valid JSON object」错误。
解决方案
1. 替换终端链接为标准HTML超链接
把终端专属的链接语法换成邮件客户端能识别的HTML <a> 标签:
printf -v email_body "Click here: <a href='file://1.2.3.4/backup/backup.txt'>Backup.txt</a>"
2. 正确生成合法的JSON字符串
手动转义JSON特殊字符(双引号、反斜杠、换行等)容易出错,推荐用jq工具自动处理JSON生成,避免格式问题:
假设你的完整请求需要组合header、body、footer,示例如下:
# 定义各部分内容 email_header="<h1>Backup Notification</h1>" email_body="Click here: <a href='file://1.2.3.4/backup/backup.txt'>Backup.txt</a>" email_footer="<p>Automated message</p>" # 用jq生成合法的JSON请求体 json_payload=$(jq -n \ --arg header "$email_header" \ --arg body "$email_body" \ --arg footer "$email_footer" \ '{ "subject": "Your Backup is Ready", "htmlContent": $header + $body + $footer, "sender": {"name": "Backup Bot", "email": "bot@example.com"}, "to": [{"email": "user@example.com"}] }') # 用curl发送请求 curl -X POST "https://api.brevo.com/v3/smtp/email" \ -H "Content-Type: application/json" \ -H "api-key: YOUR_BREVO_API_KEY" \ -d "$json_payload"
为什么之前的转义没用?
你之前尝试转义\e为\\e,但\\e在bash里会被解析成字面量\e,而JSON里的\e并不是合法的转义序列(JSON只支持\"、\\、\/、\b、\f、\n、\r、\t这些转义),加上终端的OSC 8语法本身就不是HTML/JSON兼容的格式,所以无论怎么转义终端控制字符都没用,必须换成标准HTML链接。
内容的提问来源于stack exchange,提问作者viktak
相关产品推荐
相关产品推荐

