SendGrid API更新后,如何用CURL发送自定义HTML邮件?
解决SendGrid API通过CURL发送自定义HTML邮件的问题
你当前代码的核心问题有两个:一是保留了SendGrid模板配置,会覆盖自定义HTML;二是获取HTML内容的方式有误(若目标文件含PHP逻辑)。以下是具体修改步骤:
1. 移除模板相关配置
删除所有和$template_id、$js数组以及x-smtpapi参数相关的代码——这部分用于调用SendGrid官方模板,会优先覆盖你传入的自定义HTML内容。
2. 正确获取自定义HTML内容
如果custom/WelcomeHTML.php包含PHP动态逻辑,file_get_contents()只会读取文件源码,不会执行PHP。改用输出缓冲捕获执行后的HTML:
ob_start(); include 'custom/WelcomeHTML.php'; $Content = ob_get_clean();
修改后的完整代码
$url = 'https://api.sendgrid.com/'; $pass = "MY-API-KEY"; // 正确获取执行后的HTML内容 ob_start(); include 'custom/WelcomeHTML.php'; $Content = ob_get_clean(); $params = array( 'to' => "email@gmail.com", 'toname' => "First Last Name", 'from' => "From@gmail.com", 'fromname' => "From Name", 'subject' => " LIVE EVENT", 'text' => "Hoping this one works", 'html' => $Content ); $request = $url.'api/mail.send.json'; $session = curl_init($request); curl_setopt($session, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1_2); curl_setopt($session, CURLOPT_HTTPHEADER, array('Authorization: Bearer ' . $pass)); curl_setopt ($session, CURLOPT_POST, true); curl_setopt ($session, CURLOPT_POSTFIELDS, $params); curl_setopt($session, CURLOPT_HEADER, false); curl_setopt($session, CURLOPT_RETURNTRANSFER, true); $response = curl_exec($session); curl_close($session); print_r($response);
额外说明
- 若
WelcomeHTML.php是纯静态HTML文件,file_get_contents()可正常使用,但建议保留输出缓冲方式,兼容未来可能的动态逻辑修改。 - 可先通过
echo $Content验证获取到的HTML内容是否符合预期,排查路径或文件本身的问题。
内容的提问来源于stack exchange,提问作者Papa De Beau
相关产品推荐
相关产品推荐

