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

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

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

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

メール

メールは、コンピュータネットワークを利用し、 情報等を交換する手段のことです。

Q&A

解決済

1回答

6219閲覧

laravel メール送信で添付の仕方

cofee

総合スコア44

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

メール

メールは、コンピュータネットワークを利用し、 情報等を交換する手段のことです。

0グッド

0クリップ

投稿2018/03/26 05:37

編集2018/03/26 05:45

お世話になっております。

共有フォルダにあるファイルをメールに添付する処理を作成しています。
パスをブラウザで開くと正常に開くことを確認しています。
ですが、attachにファイルのパスをを指定すると「Unable to open file for reading 」とエラーが出てしまいます。
attachを書かなければ正常にメールが送られます。
エラー内容について調べたのですが情報がなかったので質問させていただきました。
よろしくお願いします。

php

1public function make_mail(Request $request){ 2 $username = $request->input('name'); 3 $file = $request->input('testfile'); 4 $filepath = "\\192.××××××××\sample\$username"; 5 6 $pdf = $filepath.'\'.$file; 7 8 $this->sendMailTo_w($pdf); 9 10 return view('admin::sample_index'); 11 } 12 13private function sendMailTo_w($pdf){ 14 15 $to = 'sample@gmail.com'; 16 $cc = ''; 17 $bcc = ''; 18 $fromAddress = 'sample@gmail.com'; 19 $fromName = 'AAA'; 20 $subject = 'test'; 21 22 $email = [ 23 'to' => $to, 24 'cc' => $cc, 25 'bcc' => $bcc, 26 'from_address' => $fromAddress, 27 'from_name' => $fromName, 28 'subject' => $subject, 29 'attach' => $pdf 30 ]; 31 32 \Mail::send('admin::mail_temp', compact('email'), function($message) use ($email) { 33 34 if (is_array($email['to'])) { 35 $toArray = $email['to']; 36 } else { 37 $toArray = [$email['to']]; 38 } 39 foreach ($toArray as $key => $value) { 40 $message->to($value); 41 } 42 43 $message->subject($email['subject']); 44 45 if ($email['from_address']) { 46 $message->from($email['from_address'], $email['from_name']); 47 } 48 49 if ($email['cc']) { 50 $message->cc($email['cc']); 51 } 52 53 if ($email['bcc']) { 54 $message->bcc($email['bcc']); 55 } 56 57 if (array_key_exists('attach', $email) && $email['attach']) { 58 $message->attach($email['attach']); 59 } 60 }); 61 }

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

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

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

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

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

guest

回答1

0

ベストアンサー

$pdf = $filepath.''.file;

$pdf = $filepath.''.$file;

では?

追記

PHPが動作しているサーバー内のファイルでなければ直接添付はできないはずです。
(laravelに限らず、おおよそどのWebプログラミング言語でも)
laravel側で想定されている「フルパス」とはあくまでPHPが動作しているサーバー内で
PHPが直接アクセス可能なところに置いてあるファイルパスであって、
外部ファイルのパスのことではないはずです。

どうしても外部ファイルを添付で送りたければ直接ではなく、例えば下記のような手順を踏む必要があります
0. 対象のファイルを自身のサーバ(PHPが動作しているサーバ)へアップロードする
0. アップロードしたファイルをattachする

投稿2018/03/26 05:40

編集2018/03/26 06:10
m.ts10806

総合スコア80850

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

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

cofee

2018/03/26 05:44

すみません。そこは単純に質問文での記載ミスでした。。。
m.ts10806

2018/03/26 05:46

なるほど。了解です。
m.ts10806

2018/03/26 05:53

「フルパスで指定する」というのがルールだったはずですが、本当に正常にフルパスが指定できているんでしょうか? $filepath の指定の後半 \$username が少し怪しいです。 $pdf を画面とかログに出力して意図通りのパスになっているか確認されては?
cofee

2018/03/26 05:58

ログに出力されたパスをコピーしてurlにペーストしたら正常にファイルが開いたので パスは合っているはずなのですが。。。
m.ts10806

2018/03/26 06:01 編集

ファイルパスを192.XXXX で指定されていますが、PHPが動作しているサーバー内のファイルではないということでしょうか? だとしたらセキュリティ上、許可されていないように思えます。
m.ts10806

2018/03/26 06:01

例えばPHPが動作しているサーバー内にあるファイルを指定してみてください。
m.ts10806

2018/03/26 06:05

それか送りたいファイルを試しにPHPが動作しているサーバに置いてやってみるとか。 >ファイルパスを192.XXXX で指定されていますが、PHPが動作しているサーバー内のファイルではないということでしょうか? と書きましたがすみません。質問内にありましたね。前の質問に出ていた社内共有フォルダのファイルということですね。失礼しました。
cofee

2018/03/26 06:08

すみません。 ログをよくみたら \192.××××××××\sample\豁エ-邇イ邱�2018-03-26.pdf のように日本語の箇所が文字化けしていました。 mb_convert_encodingを使用して試してみます。
m.ts10806

2018/03/26 06:11

おそらく文字化けは関係ないかと。。。 外部ファイルなので操作不可 というのが実状かと。
cofee

2018/03/26 06:16

添付して送れたのですが、添付された際の名前がまた文字化けしてしまいました。 大量のデータを扱うことになり、phpが動作しているサーバに置くのはあまり望ましくないみたいですのでこのようなやり方になってしまいました。
m.ts10806

2018/03/26 06:22

送信するのが目的であれば一度アップロードして送信したら削除すれば良いのでは?PHPサーバ側に残しておく必要はないと思います。
cofee

2018/03/26 06:31

個人情報なのでファイルの送信と保管が目的です。 phpのサーバ外では保存はできているので ①共有サーバ、phpサーバの両方にアップロード ➁メール送信し終わったらphpサーバの方だけファイル削除 という流れがベストでしょうか?
m.ts10806

2018/03/26 06:33

えっと、既に共有サーバにファイルはあってそのファイルを送信しようとしているんですよね? であれば回答に追記したように、 共有サーバに置いてあるファイルをinput type=fileを用いてPHPサーバにアップロードし、メールを送信 →PHPサーバにアップロードしたファイルを削除 で良いと思います。 (文字でしかやりとりしてないので私が状況を完全に把握できていないかもしれません)
cofee

2018/03/26 08:43

その通りですね。 メール処理の際にはすでに共有サーバにファイルは存在しています。 phpサーバからメール送信で正常に添付できました。 ありがとうございました! また何かありましたらお願いします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問