PHP中使用Mailgun API添加附件报错:Invalid resource type: array 求助
解决Mailgun API发送邮件时的Invalid resource type: array错误
你的问题出在两个地方:attachment参数的格式错误,以及一个语法错误,导致Guzzle无法正确处理附件资源。
具体修正步骤:
- 移除不必要的嵌套数组:单个附件不需要包在二维数组里,直接用一维关联数组即可;如果是多个附件,才需要用数组嵌套数组的格式。
- 修复语法错误:
attachment数组行末尾的分号要改成逗号,因为$parameters是关联数组,元素之间必须用逗号分隔。 - 确保文件路径有效:
$attachment要传入文件的绝对路径,或者能被PHP正确找到的相对路径,避免因文件不存在导致后续错误。
修正后的代码:
$mgClient = new Mailgun('xxx'); $domain = "xxx"; $parameters = array( 'from' => 'xxx', 'to' => $to, 'subject' => $subject, 'text' => $text, 'attachment' => [ 'filePath' => $attachment, 'filename' => $file_name ] ); $result = @$mgClient->sendMessage("$domain", $parameters);
如果需要发送多个附件,格式如下:
'attachment' => [ [ 'filePath' => '/absolute/path/to/file1.pdf', 'filename' => 'invoice.pdf' ], [ 'filePath' => '/absolute/path/to/file2.jpg', 'filename' => 'receipt.jpg' ] ]
错误原因说明:
Mailgun的PHP SDK期望attachment参数要么是单个文件资源句柄(比如fopen()返回的资源),要么是包含filePath和filename的关联数组(单个附件),或者是这类关联数组的集合(多个附件)。你原本的代码把单个附件包在了二维数组里,导致Guzzle在尝试将其转换为PSR-7流时,无法识别这个数组结构,从而抛出Invalid resource type: array错误。另外,数组末尾的分号会破坏数组的语法结构,进一步引发解析问题。
内容的提问来源于stack exchange,提问作者christian nyembo
相关产品推荐
相关产品推荐

