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
相关产品推荐
相关产品推荐

