PHP中如何从SendGrid响应头提取X-Message-Id?求示例代码
从SendGrid响应头提取X-Message-Id的PHP实现
你的SendGrid响应头是以数组形式返回的,每个元素是"键: 值"格式的字符串。可以通过遍历数组、拆分键值对的方式提取X-Message-Id,示例代码如下:
try { $Response = $sendgrid->send($SgEmail); $headers = $Response->headers(); $messageId = null; foreach ($headers as $header) { // 跳过空的头信息行 if (empty(trim($header))) continue; // 按冒号分割键和值,仅分割一次避免值中包含冒号导致错误 $parts = explode(':', $header, 2); if (count($parts) !== 2) continue; $key = trim($parts[0]); $value = trim($parts[1]); // 匹配目标头字段 if ($key === 'X-Message-Id') { $messageId = $value; break; // 找到后立即终止循环,提升效率 } } if ($messageId) { echo "提取到的X-Message-Id: " . $messageId; } else { echo "未在响应头中找到X-Message-Id"; } } catch (Exception $e) { // 捕获并处理发送邮件时的异常 echo "邮件发送失败: " . $e->getMessage(); }
关键说明:
- 使用
explode(':', $header, 2)限制分割次数,防止值中包含冒号(比如部分URL)导致拆分错误 - 跳过空的头信息行,避免无效处理
- 找到目标字段后立即跳出循环,减少不必要的遍历
- 补充异常捕获逻辑,完善错误处理
你的原始响应内容翻译后:
Array ( [0] => HTTP/1.1 202 已接受 [1] => Server: nginx [2] => Date: 2023年12月22日 星期五 15:00:54 GMT [3] => Content-Length: 0 [4] => Connection: keep-alive [5] => X-Message-Id: BjsVqpBVTq63Z2fuITBUKw [6] => Access-Control-Allow-Origin: https://sendgrid.api-docs.io [7] => Access-Control-Allow-Methods: POST [8] => Access-Control-Allow-Headers: Authorization, Content-Type, On-behalf-of, x-sg-elas-acl [9] => Access-Control-Max-Age: 600 [10] => X-No-CORS-Reason: https://sendgrid.com/docs/Classroom/Basics/API/cors.html [11] => Strict-Transport-Security: max-age=600; includeSubDomains [12] => [13] => ) ('to','To_Name','Email@address.com')
内容的提问来源于stack exchange,提问作者Travis
相关产品推荐
相关产品推荐

