web-dev-qa-db-ja.com

Mail :: send()がLaravel 5で機能しない

UserController.phpでこのエラー「Class 'App\Http\Controllers\Mail' not found」エラーが発生し続ける

    public function store(CreateUserRequest $request)
{
    $result = DB::table('clients')->select('client_code','name','email')
                                  ->where('client_code','=',$request->code)
                                  ->where('email','=',$request->email)
                                  ->first();

    if($result){
        $tmp_pass = str_random(10);
        $user = User::create([
            'username'      => $result->name,
            'email'         => $request->email,
            'password'      => $tmp_pass,
            'tmp_pass'      => '',
            'active'        => 0,
            'client_code'   => $request->code
        ]);

        if($user){
            Mail::send('emails.verify',array('username' => $result->name, 'tmp_pass' => $tmp_pass), function($message) use ($user){
                $message->to($user->email, $user->username)
                    ->subject('Verify your Account');
            });
            return Redirect::to('/')
                ->with('message', 'Thanks for signing up! Please check your email.');
        }
        else{
            return Redirect::to('/')
                            ->with('message', 'Something went wrong');
        }
    }
    else{
        Session::flash('message', "Invalid code or email.");
        return redirect('/');
    }
}

以前はLaravel 4で機能していたメール機能ですが、Laravel 5.でエラーが発生します。

7
user3127109

Mailglobal namespace内のエイリアスです。名前空間の内部(この場合はApp\Http\Controllersなど)から参照する場合は、次のいずれかを行う必要があります。

バックスラッシュを追加します:

\Mail::send(...)

または、クラス宣言の前にuseステートメントを追加します。

namespace App\Http\Controllers;

use Mail;  // <<<<

class MyController extends Controller {

同じことは、使用する他のファサードにも当てはまります。 SessionRedirectのように。

28
lukasgeiter

別の方法は、Mailファサードを使用することです

use Illuminate\Support\Facades\Mail;

あなたのコントローラーで

5
user2338925

app/config/mail.php

return array(

    'driver' => 'smtp',
    'Host' => 'smtp.gmail.com',
    'port' => 465,
    'from' => array('address' => '[email protected]', 'name' => 'Welcome'),
    'encryption' => 'ssl',
    'username' => '[email protected]',
    'password' => 'passowrd',
    'sendmail' => '/usr/sbin/sendmail -bs',
    'pretend' => false,

);

コントローラでのセットアップより:

use Mail;

 \Mail::send('tickets.emails.tickets',array('ticketsCurrentNewId'=>
$ticketsCurrentNewId->id,'ticketsCurrentSubjectId'=>$ticketsCurrentNewId->subject,'ticketsCurrentLocationsObj'=>$ticketsCurrentLocationsObjname), function($message)
{
//$message->from('[email protected]');
$message->to('[email protected]', 'Amaresh')->subject(`Welcome!`);
});

このセットアップメールの後に、権限エラーが表示されている場合はメールが送信され、このURLをクリックしてこのラジオボタンをオンにします

https://www.google.com/settings/security/lesssecureapps

設定後、#laravel、#symfony、および任意のphpフレームワークで正常に動作します

ありがとうございました

1
Amaresh Kumar

Laravel= 5.8では、これをコントローラにも追加して解決しました:

この:

use App\Mail\<<THE_NAME_OF_YOUR_MAIL_CLASS>>;
use Illuminate\Support\Facades\Mail;

の代わりに:

use Mail;
1
kevind