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

PHP调用Outlook发送邮件添加CC/BCC收件人问题(非PHPMailer)

PHP调用Outlook COM组件添加抄送、密送实现方法

你现有代码已经完成基础发信逻辑,添加CC(抄送)、BCC(密送)只需要给Recipients集合下新增的收件人对象设置对应类型属性即可,Outlook会根据类型值自动区分主送、抄送、密送。

收件人类型对应常量值

Outlook的收件人对象通过Type属性区分类别,对应数值如下:

  • 主送(To):值为1,对应常量olTo
  • 抄送(CC):值为2,对应常量olCC
  • 密送(BCC):值为3,对应常量olBCC

实现步骤

  1. 预先定义好三类收件人的常量值,避免直接使用魔法数字
  2. 调用Recipients->Add(邮箱地址)添加收件人后,拿到返回的收件人实例,给Type属性赋对应的值
  3. 所有收件人添加完成后,调用Recipients->ResolveAll()批量校验地址有效性,减少发送报错
  4. 后续设置主题、正文、发送的逻辑和原有代码一致

完整修改后代码

$subject = "Hi from your city";
$message = "hello my darling";

$to = "example@gmail.com";
$cc = "cc_demo@gmail.com"; // 替换为实际抄送地址
$bcc = "bcc_demo@gmail.com"; // 替换为实际密送地址

// 加载Outlook类型库
com_load_typelib("outlook.application"); 

if (!defined("olMailItem")) {define("olMailItem",0);}
// 定义收件人类型常量
if (!defined("olTo")) {define("olTo",1);}
if (!defined("olCC")) {define("olCC",2);}
if (!defined("olBCC")) {define("olBCC",3);}

$outlook_Obj = new COM("outlook.application") or die("Unable to start Outlook");

echo "Loaded MS Outlook, version {$outlook_Obj->Version}\n";        
$oMsg = $outlook_Obj->CreateItem(olMailItem);  

// 添加主送收件人
$toRecipient = $oMsg->Recipients->Add($to);
$toRecipient->Type = olTo;

// 添加抄送收件人,多抄送重复Add设置Type即可
$ccRecipient = $oMsg->Recipients->Add($cc);
$ccRecipient->Type = olCC;

// 添加密送收件人,多密送重复Add设置Type即可
$bccRecipient = $oMsg->Recipients->Add($bcc);
$bccRecipient->Type = olBCC;

// 校验所有收件人地址有效性
$oMsg->Recipients->ResolveAll();

$oMsg->Subject = $subject;        
$oMsg->Body = $message;        
$oMsg->Save();        
$oMsg->Send();

注意事项

  • 该调用方式依赖Windows环境下的COM组件,运行PHP的服务器必须提前安装并登录配置好Outlook客户端
  • 如果需要添加多个同类型收件人,重复调用$oMsg->Recipients->Add(邮箱)并设置对应Type即可,没有数量限制
  • 如果不需要校验地址,也可以省略ResolveAll()调用,但遇到无效地址时会直接在Send步骤抛出异常

内容的提问来源于stack exchange,提问作者Hasan Yilmaz

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 17:12:28