【问题标题】:How to send email with dynamic sender in laravel?如何在 laravel 中使用动态发件人发送电子邮件?
【发布时间】:2016-02-20 17:39:36
【问题描述】:

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

我使用我的 Gmail 帐户设置了 .env。我可以使用我的电子邮件地址从 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');
}

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

【问题讨论】:

标签: email laravel-5.1


【解决方案1】:

我会做一些不同的事情。我猜$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');
}

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


但你也可以这样做:

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

【讨论】:

  • 一切正常,邮件也在发送。但问题是我无法更改发件人地址。不管我在这里写什么:$message->form('user@domain.com','name'),邮件总是从.env中配置的地址发送。
  • 是否使用了mail.php 配置文件中的地址? “全球“发件人”地址
  • 不完全是mail.php,它使用来自.envusername
  • 我不确定,但我认为'from'会因为mail.php中的这个设置而被覆盖。您可以尝试将其设置为 null,检查是否有所不同。
  • 我已经试过了。有人告诉我gmail 对此负责。我正在使用谷歌的smtp 服务器。出于安全原因,Gmail 正在将 from 转换为真实的电子邮件地址。我可以以奥巴马的名义发送电子邮件。但有趣的是我仍然可以通过Raw PHP Code 使用任何电子邮件地址发送电子邮件。只是想用 Laravel 的方式来做。
【解决方案2】:
foreach ($emails as $value1) 
{
    $to[]=implode(',',$value1['0']);
}
$subject=$request->input('sub');
$mailsend=Mail::send('email.subscribe',$mail_content,
function($message)use($to,$subject)
{
    $message->from('ganarone@ganar.io','Ganar');
    $message->to($to);
    $message->subject($subject);
});  

【讨论】:

    【解决方案3】:
    public function reset_password(Request $request)
    {
        $user=User::whereEmail($request->email)->first();
        if(count($user) == 1)
        {
            $data = array('name'=>"Virat Gandhi");
            $subject=$request->email;
            mail::send(['emails'=>'reset_set'],$data,
            function($message)use($subject)
            {
                $message->from('your@gmail.com','kumar');
                $message->to($subject);
                $message->subject($subject);
            });  
            echo "Basic Email Sent. Check your inbox.";
        }
    }
    

    【讨论】:

    • 欢迎来到stackoverflow。请稍微解释一下您的代码,以便人们可以从中学习,而不仅仅是从网络上复制和粘贴一些东西。特别是,我会对那里的硬编码“Virat Gandhi”或“kumar”感到好奇。
    猜你喜欢
    • 2020-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-25
    • 1970-01-01
    • 2015-12-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多