Cloudflare Worker调用SparkPost API遇字符串类型错误及换行需求
解决SparkPost API「content.text/html must be a string」错误及换行问题
一、错误原因
- 「content.text must be a string」:
jsonData.city或jsonData.state可能未传入(请求无该字段),或本身非字符串类型,导致拼接后的message不符合API要求的字符串格式。 - 「content.html must be a string」:模板字符串误用双引号包裹,
${city}未被解析为变量值;若变量未定义,最终生成的html内容也会不符合字符串要求。
二、修正代码示例
1. 纯文本邮件(解决text字段错误+换行)
async function sendEmail(request, SPARKPOST_API_KEY) { const jsonData = await request.json(); // 给字段设置默认空字符串,避免undefined const city = jsonData.city || ''; const state = jsonData.state || ''; // 用\n实现纯文本换行 const message = `${city}\n${state}`; const body = JSON.stringify({ options: { sandbox: false, }, content: { from: FROM_EMAIL, subject: 'Data Submission', text: message }, recipients: [{ address: TO_EMAIL }], }); // 补充SparkPost API请求逻辑 const response = await fetch('https://api.sparkpost.com/api/v1/transmissions', { method: 'POST', headers: { 'Authorization': SPARKPOST_API_KEY, 'Content-Type': 'application/json' }, body: body }); return response; }
2. HTML邮件(解决html字段错误+换行)
async function sendEmail(request, SPARKPOST_API_KEY) { const jsonData = await request.json(); const city = jsonData.city || ''; const state = jsonData.state || ''; // 用<p>标签或<br>实现HTML换行 const message = `<p>${city}</p><p>${state}</p>`; // 也可写成:`${city}<br>${state}` const body = JSON.stringify({ options: { sandbox: false, }, content: { from: FROM_EMAIL, subject: 'Data Submission', html: message }, recipients: [{ address: TO_EMAIL }], }); // 补充SparkPost API请求逻辑 const response = await fetch('https://api.sparkpost.com/api/v1/transmissions', { method: 'POST', headers: { 'Authorization': SPARKPOST_API_KEY, 'Content-Type': 'application/json' }, body: body }); return response; }
三、关键注意事项
- 始终给
city、state设置默认空字符串,避免出现undefined或null导致非字符串值。 - 模板字符串必须用**反引号(
)**包裹,才能正确解析${变量}`语法。 - 纯文本邮件用
\n换行,HTML邮件用<br>标签或<p>标签实现换行。
内容的提问来源于stack exchange,提问作者amren
相关产品推荐
相关产品推荐

