背景
我正在尝试使用 PHP 脚本(PHP 5.4.16)发送带有附件的电子邮件。最终我会尝试让它在 Drupal 中工作,但现在它是独立的。
问题
我正在尝试实现这个脚本,它将发送带有附件的电子邮件,相关博客在这里。
我正在运行以下代码,它调用上面的脚本。它尝试发送的文件是同一文件夹中的 dom.txt。
require_once('attachment_email.php');
$to="xxxxx@gmail.com";
$from="xxxxx@gmail.com";
$subject="Check out this report!";
$message="Yo! Check out this report!";
$attachment = array(
'url' => 'dom.txt',
'filename' => 'dom.txt',
);
print_r($attachment);
$email = new AttachmentEmail($to, $from, $subject, $message, $attachment);
$email->send();
电子邮件正常到达,但附件不起作用,我收到以下错误。
Warning: Illegal string offset 'path' in C:\XAMPP\htdocs\tutorials\attachment_email.php on line 77
Warning: file_get_contents(d): failed to open stream: No such file or directory in C:\XAMPP\htdocs\tutorials\attachment_email.php on line 77
Warning: Illegal string offset 'type' in C:\XAMPP\htdocs\tutorials\attachment_email.php on line 81
Warning: Illegal string offset 'path' in C:\XAMPP\htdocs\tutorials\attachment_email.php on line 81
Warning: Illegal string offset 'path' in C:\XAMPP\htdocs\tutorials\attachment_email.php on line 77
Warning: file_get_contents(d): failed to open stream: No such file or directory in C:\XAMPP\htdocs\tutorials\attachment_email.php on line 77
Warning: Illegal string offset 'type' in C:\XAMPP\htdocs\tutorials\attachment_email.php on line 81
Warning: Illegal string offset 'path' in C:\XAMPP\htdocs\tutorials\attachment_email.php on line 81
我认为我在路径上做错了,但我不知道是什么。我究竟做错了什么?
我试过的
'path' => 'dom.txt',
'path' => './dom.txt',
'url' => 'http://localhost/tutorials/dom.txt',
还有各种各样的变化,但我真的在犯错。
我开始从上面的脚本中打印出变量public function get_binary_attachments()
,看看哪里出了问题,打印 $attachment 给出:
Array ( [url] => ./dom.txt
[filename] => dom.txt )
但是 $attachment_bin 是空的,所以那里有些东西坏了。但它可能仍然与路径有关。
编辑 -
这是脚本的相关部分:
73 public function get_binary_attachments() {
74 $output = '';
75 foreach($this->attachments as $attachment) {
76
77 echo $attachment;
78
79 $attachment_bin = file_get_contents($attachment['path']);
80 $attachment_bin = chunk_split(base64_encode($attachment_bin));
81
82 dpm($attachment_bin);
83 $output .= '--'. $this->boundary . PHP_EOL;
84 $output .= 'Content-Type: '. $attachment['type'] .'; name="'. basename($attachment['path']) .'"' . PHP_EOL;
85 $output .= 'Content-Transfer-Encoding: base64' . PHP_EOL;
86 $output .= 'Content-Disposition: attachment' . PHP_EOL . PHP_EOL;
87 $output .= $attachment_bin . PHP_EOL . PHP_EOL;
88 }
89 return $output;
90 }
91}
编辑——尝试了新的解决方案:
将附件更改为以下数组会添加三个新的错误行:
'path' => 'dom.txt', 'type'=>'text/plain', 'filename' => 'dom.txt',
警告:file_get_contents(d):无法打开流:第 77 行的 C:\XAMPP\htdocs\tutorials\attachment_email.php 中没有这样的文件或目录警告:C:\XAMPP\htdocs\tutorials 中的非法字符串偏移“类型”第 81 行的 \attachment_email.php 警告:第 81 行的 C:\XAMPP\htdocs\tutorials\attachment_email.php 中的非法字符串偏移“路径”
使用
'path' => './dom.txt'
,将 file_get_contents 错误更改为:警告:file_get_contents(.):未能打开流:第 77 行 C:\XAMPP\htdocs\tutorials\attachment_email.php 中的权限被拒绝
将数组更改为下方,也无济于事。
'path'=>'./dom.txt', 'type'=>'MIME/type'