如何在laravel中使用动态发件人发送电子邮件?

sma*_*hat 1 email laravel-5.1

我正在 Laravel 中创建一个简单的联系我们。

我设置了.env我的 Gmail 帐户。我可以用我的电子邮件地址从 Laravel 发送电子邮件,这没问题。

但是,我想从发送消息表单的发件人地址发送电子邮件,联系我们表单。

这是我在控制器中的代码:

public function sendMessage(Request $request)
{
    $this->validate($request,[
        'email'=>'required|email',
        'subject'=>'required',
        'body'=>'required|max:150'
    ]);
    $body = $request['body'];
    Mail::send('emails.support',['body' => $body], function($message){
        $email = Input::get('email');
        $subject = Input::get('subject');
        $message->sender($email);
        $message->to('smartrahat@gmail.com','Mohammed');
        $message->subject($subject);
    });
    return redirect('contactUs');
}
Run Code Online (Sandbox Code Playgroud)

虽然,我收到电子邮件地址表格联系我们表格,电子邮件总是从我配置的电子邮件帐户中发送 .env

Mau*_*ice 5

我会做一些不同的事情。我猜$body是电子邮件文本?你应该把它放在一个数组中,并将它作为参数添加到 Mail::send 中(或直接$request->all()作为参数放入。

另外,在 Mail 的关闭内部,我不认为将逻辑放在那里很好(比如 $email=Input::get)。如果你问我,它看起来不正确。

没有测试这段代码,但这应该有效:

public function sendMessage(Request $request)
{
  $this->validate($request,[
    'email'     => 'required|email',
    'subject'   => 'required',
    'body'      => 'required|max:150'
  ]);

  $data = [
            'email'   => $request->input('email'), 
            'subject' => $request->input('subject'),
            'body'    => $request->input('body')
        ];

  Mail::send('emails.support', $data, function($message) use ($data)
  {
    $message->from($data['email']);
    $message->to('smartrahat@gmail.com','Mohammed');
    $message->subject($data['subject']);
  });

  return redirect('contactUs');
}
Run Code Online (Sandbox Code Playgroud)

因为您将 $data 添加为 'use',您可以在闭包中访问此数据。$data 作为参数发送,可以在电子邮件刀片中使用。在这个例子中,你可以像这样访问数据:$email, $subject, $data, 在刀片中这些将输出值。


但你也可以这样做:

Mail::send('emails.support', $request->all(), function($message) use ($data)