出身背景
我正在尝试使用PHP脚本(PHP 5.4.16)发送带有附件的电子邮件。最终我将尝试让它在Drupal中工作,但目前它是独立的。
问题
我正在努力实现这一点
script
,将发送带有附件的电子邮件,相关博客为
here
.
我正在运行以下代码,它调用了上面的脚本。它试图发送的文件是同一文件夹中的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):无法打开流:在C:\XAMPP\htdocs\tutorials\attachment_email.php的第77行中没有这样的文件或目录
警告:第81行C:\XAMPP\htdocs\tutorials\attachment_email.php中的非法字符串偏移量“type”
警告:C:\XAMPP\htdocs\tutorials\attachment_email.php中第81行的字符串偏移量“path”非法
-
使用
'path' => './dom.txt'
,将file_get_contents错误更改为:
警告:file_get_contents(.):无法打开流:第77行C:\XAMPP\htdocs\tutorials\attachment_email.php中的权限被拒绝
-
将数组更改为以下值也不会有任何作用。
'path'=>'./dom.txt',
'type'=>'MIME/type'