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

使用PHP调用Outlook发送邮件时如何添加附件

PHP调用Outlook COM组件发送带附件邮件实现方案

现有代码已经完成基础纯文本邮件发送能力,添加附件只需要调用Outlook邮件对象的Attachments->Add()方法即可,不需要引入其他依赖。

核心实现逻辑

Outlook的MailItem对象提供了Attachments集合用于管理邮件附件,调用Add方法即可追加附件,方法基础参数说明:

  • 第一个参数:必填,附件文件的绝对本地物理路径,不支持相对路径、远程URL
  • 第二个参数:可选,附件类型,普通内嵌附件传常量olByValue(对应值1)即可,也是默认值
  • 第三个参数:可选,附件在邮件正文内的插入位置,仅当发送HTML格式邮件嵌入图片等场景需要配置
  • 第四个参数:可选,附件显示在邮件里的名称,不传则默认取文件本身的文件名

注意事项

  • 附件添加代码必须放在$oMsg->Save()、$oMsg->Send()调用之前
  • PHP运行进程的系统身份(Web服务运行账户/CLI运行账户)必须对附件文件有读取权限,否则会抛出COM调用异常
  • 需要添加多个附件时,重复调用$oMsg->Attachments->Add()传入不同文件路径即可
  • 确保php.ini中已开启COM相关配置:com.allow_dcom = On,且运行环境为Windows系统、已安装并提前配置好桌面版Outlook客户端

修改后可直接运行的完整代码

$subject = "Hi from your city";
$message = "hello my darling";
$to = "example@gmail.com";

// 定义附件路径,替换为你自己的文件绝对路径
$attachmentPath = "C:\\Users\\xxx\\Documents\\test.pdf";
// 如需多个附件,追加路径到数组即可
$attachments = [
    $attachmentPath,
    // "C:\\Users\\xxx\\Pictures\\demo.png"
];

// 初始化Outlook COM对象
com_load_typelib("outlook.application"); 
if (!defined("olMailItem")) {
    define("olMailItem", 0);
}
if (!defined("olByValue")) {
    define("olByValue", 1); // 普通附件类型常量
}

$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);  
$oMsg->Recipients->Add($to);
$oMsg->Subject = $subject;        
$oMsg->Body = $message;

// 循环添加所有附件
foreach ($attachments as $file) {
    if (file_exists($file) && is_readable($file)) {
        $oMsg->Attachments->Add($file, olByValue);
    }
}

$oMsg->Save();        
$oMsg->Send();

小提示:如果需要发送HTML格式邮件,只需要把$oMsg->Body = $message替换为$oMsg->HTMLBody = "<h1>邮件标题</h1><p>HTML内容</p>"即可,附件添加逻辑不受影响。

内容的提问来源于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 14:33:22