質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
CakePHP

CakePHPは、PHPで書かれたWebアプリケーション開発用のフレームワークです。 Ruby on Railsの考え方を多く取り入れており、Railsの高速性とPHPの機動性を兼ね備えています。 MVCやORMなどを「規約優先の考え方」で利用するため、コードを書く手間を省くことができます。 外部のライブラリに依存しないので、単体での利用が可能です。

Q&A

解決済

2回答

1226閲覧

cakephp メール ファイル添付

退会済みユーザー

退会済みユーザー

総合スコア0

CakePHP

CakePHPは、PHPで書かれたWebアプリケーション開発用のフレームワークです。 Ruby on Railsの考え方を多く取り入れており、Railsの高速性とPHPの機動性を兼ね備えています。 MVCやORMなどを「規約優先の考え方」で利用するため、コードを書く手間を省くことができます。 外部のライブラリに依存しないので、単体での利用が可能です。

0グッド

0クリップ

投稿2019/08/30 04:59

編集2019/08/30 06:06

フォームの中で添付したファイルをメールに添付して送信したいです。

html

1<?= $this->Form->create('', ["enctype" => "multipart/form-data"]); ?> 2 <div> 3 <input type="file" id="" name="file" value=""> 4 </div> 5 <div> 6 <input type="submit" name=""> 7 </div> 8<?= $this->Form->end(); ?>

php

1Controller 2 3if ($this->request->is(['patch', 'post', 'put'])) { 4 $data = $this->request->getData(); 5debug($data); 6exit; 7 $emailbody = <<<EOF 8EOF; 9 $email = new Email('default'); 10 $email->attachments($data['file']); 11 $email->to($data['email']); 12 ->send($emailbody); 13 }

ちなみにrequest dataの中のfileをdebugすると
'file' => [
'tmp_name' => '/tmp/phpMTdXPt',
'error' => (int) 0,
'name' => 'hogehoge.pdf',
'type' => 'application/pdf',
'size' => (int) 24033028
]

$email->attachmentsでうまく添付ファイルの送信ができませんでした。
File not found: "0" というエラーが出ます。
Controller側でどのような処理が必要でしょうか?
ご教示いただけると幸いです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

FKM

2019/08/30 05:07

その添付ファイル、普通のメーラーで送れます? サイズが24MBありそうですけど
nojimage

2019/08/30 05:47

$email->attachments をどのように書いたら送信できなかったのか示してください。
CHERRY

2019/08/30 06:24

> うまく添付ファイルの送信ができませんでした。 どのような状況になるのでしょうか? Web サーバーのログに何か出ていたりしますか?
guest

回答2

0

解決済のようですが、解説しておきます。

Eamil::attachments() (CakePHP 3.4以降は setAttachments)の引数は以下のような形式を受け付けます。

文字列: $email->attachments('/full/file/path/file.png') は、 file.png というファイル名でこのファイルを添付します。 配列: $email->attachments(['/full/file/path/file.png']) は、 文字列の場合と同じ振る舞いをします。 キー付き配列: $email->attachments(['photo.png' => '/full/some_hash.png']) は、 photo.png というファイル名で some_hash.png ファイルを添付します。 受信者からは、some_hash.png ではなく photo.png として見えます。

添付ファイルの送信 | Email - 3.8 より引用

例示のコードでは、 $email->attachments($data['file']); としているので、

php

1$email->attachments([ 2 'tmp_name' => '/tmp/phpMTdXPt', 3 'error' => 0, 4 'name' => 'hogehoge.pdf', 5 'type' => 'application/pdf', 6 'size' => 24033028 7])

という状態になります。引数がキー付き配列指定の場合は、'送信ファイル名' => '実ファイルパス' と解釈されますので、 'error' => 0 の処理時に 0 というファイルパスを探しますがそのようなファイルはないのでエラーとなります。

ですので、今回の要件であれば、

php

1$email->attachments([ 2 $data['file']['name'] => $data['file']['tmp_name'], 3]);

とすれば、アップロードのテンポラリファイルを参照して、アップロードされたファイル名で添付ファイルを送信できます。

なお、質問のコードでは入力に対してバリデーションなしで受取り送信していますが、実アプリケーションではちゃんとバリデーションを通しましょう。

投稿2019/08/30 09:47

nojimage

総合スコア957

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

webrootに保存してから$email->attachmentsで添付したらできました。

投稿2019/08/30 06:50

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問