【问题标题】:Mail::send() not working in Laravel 5Mail::send() 在 Laravel 5 中不起作用
【发布时间】:2015-05-07 04:17:47
【问题描述】:

我在我的 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 中遇到错误。任何帮助将不胜感激。

【问题讨论】:

  • 你使用过邮件特性吗? use Mail;

标签: php email laravel


【解决方案1】:

在 Laravel 5.8 中,我通过在控制器中添加它来解决它:

这个:

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

代替:

use Mail;

【讨论】:

  • 这实际上在 Laravel 6 中对我有用,而其他一切都失败了。谢谢。
【解决方案2】:

设置您的app/config/mail.php

return array(

    'driver' => 'smtp',
    'host' => 'smtp.gmail.com',
    'port' => 465,
    'from' => array('address' => 'your@gmail.com', 'name' => 'Welcome'),
    'encryption' => 'ssl',
    'username' => 'your@gmail.com',
    '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('your@gmail.com');
$message->to('your@gmail.com', 'Amaresh')->subject(`Welcome!`);
});

在此设置后,如果显示任何权限错误,则发送电子邮件,然后单击此 url 并选中此单选按钮

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

配置后它在#laravel、#symfony 和任何 php 框架中都可以正常工作

谢谢

【讨论】:

    【解决方案3】:

    另一种方法是使用邮件门面

    use Illuminate\Support\Facades\Mail;
    

    在你的控制器中

    【讨论】:

      【解决方案4】:

      Mail全局命名空间 中的别名。当您想从命名空间中引用它时(例如 App\Http\Controllers 在您的情况下),您必须:

      添加反斜杠:

      \Mail::send(...)
      

      或者在你的类声明之前添加一个use 声明:

      namespace App\Http\Controllers;
      
      use Mail;  // <<<<
      
      class MyController extends Controller {
      

      您使用的其他外观也是如此。喜欢SessionRedirect

      【讨论】:

      • 这与实际问题没有太大关系,但您可能还想查看dependency injection 而不是使用外观...
      • 从 Laravel 5.3 开始不要忘记添加use App\Mail\YourClass;
      猜你喜欢
      • 1970-01-01
      • 2019-03-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-11
      相关资源
      最近更新 更多