バックグラウンド
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}
EDIT - 新しいソリューションを試しました:
アタッチメントを次の配列に変更すると、新しい 3 行のエラーが追加されます。
'path' => 'dom.txt', 'type'=>'text/plain', 'filename' => 'dom.txt',
警告: file_get_contents(d): ストリームを開くことができませんでした: No such file or directory in C:\XAMPP\htdocs\tutorials\attachment_email.php on line 77 警告: C:\XAMPP\htdocs\tutorials の無効な文字列オフセット 'type' \attachment_email.php 行 81 警告: C:\XAMPP\htdocs\tutorials\attachment_email.php 行 81 の不正な文字列オフセット 'パス'
を使用
'path' => './dom.txt'
すると、file_get_contents エラーが次のように変更されます。警告: file_get_contents(.): ストリームを開くことができませんでした: C:\XAMPP\htdocs\tutorials\attachment_email.php 行 77 で許可が拒否されました
配列を以下に変更しても、何もしません。
'path'=>'./dom.txt', 'type'=>'MIME/type'