PHP调用Outlook发送邮件添加CC/BCC收件人问题(非PHPMailer)
PHP调用Outlook COM组件添加抄送、密送实现方法
你现有代码已经完成基础发信逻辑,添加CC(抄送)、BCC(密送)只需要给Recipients集合下新增的收件人对象设置对应类型属性即可,Outlook会根据类型值自动区分主送、抄送、密送。
收件人类型对应常量值
Outlook的收件人对象通过Type属性区分类别,对应数值如下:
- 主送(To):值为
1,对应常量olTo - 抄送(CC):值为
2,对应常量olCC - 密送(BCC):值为
3,对应常量olBCC
实现步骤
- 预先定义好三类收件人的常量值,避免直接使用魔法数字
- 调用
Recipients->Add(邮箱地址)添加收件人后,拿到返回的收件人实例,给Type属性赋对应的值 - 所有收件人添加完成后,调用
Recipients->ResolveAll()批量校验地址有效性,减少发送报错 - 后续设置主题、正文、发送的逻辑和原有代码一致
完整修改后代码
$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
相关产品推荐
相关产品推荐

