You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP中如何使用CURLOPT_PUT设置邮件的主题(标题)?

解决方案

基于你现有的CURLOPT_PUT配置完全可以实现邮件主题设置,不需要修改curl调用参数,只需调整写入文件的邮件内容结构即可。

实现原理

SMTP协议中,邮件主题、发件人、收件人展示信息等都属于邮件头部字段,你当前写入php://temp的内容仅包含邮件正文,缺少头部定义,所以收件方会显示无主题。CURLOPT_PUT模式下提交的是完整的原始邮件报文,你只要把标准邮件头拼到正文之前即可。

修改后的完整代码示例

//create email body etc
$to = 'dennis.kozevnikoff@outlook.com';
$server = 'smtps://smtp.gmail.com:465';

// 构造邮件头部
$headers = [
    'From: <d.kozevnikoff@outlook.com>',
    'To: <'.$to.'>',
    'Subject: 自定义邮件主题', // 此处填写你需要的邮件主题
    'Content-Type: text/plain; charset=utf-8' // 如需发送HTML邮件可改为text/html
];
// 拼接头部和正文,头部和正文之间必须用\r\n\r\n分隔(空一行)
$message = implode("\r\n", $headers) . "\r\n\r\n" . 'test message';

$emailFile = fopen("php://temp", 'w+');
fwrite($emailFile, $message);
rewind($emailFile);
$fstat = fstat($emailFile);
$size = $fstat['size'];

//initialize and authenticate cURL
$ch = curl_init($server); 
curl_setopt($ch, CURLOPT_USERPWD, 'd.kozevnikoff@outlook.com' . ':' . 'samplepass');
curl_setopt($ch, CURLOPT_MAIL_RCPT, array("<" . $to . ">"));
curl_setopt($ch, CURLOPT_PUT, 1);
curl_setopt($ch, CURLOPT_INFILE, $emailFile);
curl_setopt($ch, CURLOPT_INFILESIZE, $size);

curl_exec($ch); // 补充原代码遗漏的执行步骤
fclose($emailFile);
curl_close($ch);

注意事项

  • 每行邮件头部结尾必须用\r\n,符合SMTP协议规范,避免部分邮件服务商解析异常
  • 邮件头部和正文之间必须用\r\n\r\n(空一行)分隔,这是邮件报文的标准格式要求
  • 发件人地址建议和CURLOPT_USERPWD中使用的发信账号保持一致,降低被判定为垃圾邮件的概率
  • 后续如果需要添加抄送、HTML格式、附件等能力,都可以通过新增对应邮件头字段实现,不需要修改curl的配置项

内容的提问来源于stack exchange,提问作者Dennis Kozevnikoff

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 12:39:03