如何使用PHPMailer附加服务器路径下的多文件发送邮件
PHPMailer附加服务器本地多文件的实现方案
PHPMailer原生支持直接读取服务器本地路径的文件作为附件,不需要依赖实时上传的文件流,直接调用内置的addAttachment方法就能实现。
单文件附加写法
调用addAttachment时第一个参数传入文件在服务器上的存储路径即可,可选传入第二个参数自定义收件人看到的附件显示名称:
// 此处省略你原有的SMTP配置、发件人/收件人设置等初始化代码 // 直接传入服务器本地文件绝对路径附加附件 $mail->addAttachment('/home/www/storage/upload/activity_poster.jpg'); // 自定义附件显示名 $mail->addAttachment('/home/www/storage/upload/product_spec.pdf', '产品参数说明.pdf');
多文件批量附加写法
把所有需要附加的服务器文件路径整理为数组,循环调用addAttachment即可,建议增加文件可读性校验避免路径错误导致发送失败:
// 待附加的服务器本地文件路径列表 $fileList = [ '/home/www/storage/upload/img_1.jpg', '/home/www/storage/upload/img_2.png', '/home/www/storage/upload/img_3.jpeg' ]; foreach ($fileList as $path) { if (file_exists($path) && is_readable($path)) { $mail->addAttachment($path); } }
常见注意事项
- 路径优先使用服务器绝对路径,不要传入图片的Web访问URL,否则会因为PHP运行权限、网络请求限制导致读取失败;如果使用相对路径,请确认当前PHP脚本的工作目录和文件存储目录的相对关系正确
- 如果需要把图片嵌入邮件正文而非作为独立附件,可使用
addEmbeddedImage方法,传入本地路径和自定义内容ID,正文内通过<img src="cid:自定义内容ID">的格式引用即可 - 该方法和实时上传文件场景的唯一区别是:实时上传时你传入的是
$_FILES['xxx']['tmp_name']的临时文件路径,本地存储文件场景传入的是文件在服务器上的固定存储路径,不需要额外做文件流读取、上传接收的处理,PHPMailer会自动完成文件加载。
内容的提问来源于stack exchange,提问作者Patrick Collins
相关产品推荐
相关产品推荐

