You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel联系表单邮件发送:如何传递用户邮箱并完善路由?

一步步搞定Laravel联系表单的邮箱传递与邮件路由完善

作为Laravel新手,别慌,咱们一步步来,保证你能轻松搞定!

1. 完善路由配置

首先,你需要确保路由是POST请求(毕竟要提交表单数据),指向你的ContactWebmaster控制器的处理方法,比如store。打开routes/web.php,添加或修改路由:

use App\Http\Controllers\ContactWebmasterController;

Route::post('/contact-webmaster', [ContactWebmasterController::class, 'store'])->name('contact.webmaster');

这里用了命名路由contact.webmaster,后面表单提交时直接用这个名称,既方便又不容易出错。

2. 编写控制器的表单处理逻辑

如果还没创建ContactWebmasterController,先运行php artisan make:controller ContactWebmasterController生成控制器。然后在store方法里做这几件核心事:

  • 验证表单输入(避免垃圾数据)
  • 获取用户填写的邮箱等信息
  • 调用Mail类发送邮件,同时把用户邮箱传递到模板

代码示例:

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Mail;

class ContactWebmasterController extends Controller
{
    public function store(Request $request)
    {
        // 第一步:验证表单数据,确保邮箱格式合法、必填字段不为空
        $validated = $request->validate([
            'user_email' => 'required|email',
            'name' => 'required|string|max:255',
            'message' => 'required|string',
        ]);

        // 第二步:准备要传递给邮件模板的数据,这里就包含用户邮箱
        $mailData = [
            'user_name' => $validated['name'],
            'user_email' => $validated['user_email'], // 这就是要传给模板的用户邮箱
            'message_content' => $validated['message'],
        ];

        // 第三步:发送邮件
        Mail::send('email.contactwebmaster', $mailData, function ($message) use ($validated) {
            // 发给站长的邮箱,建议从env配置里取,方便后续修改
            $message->to(env('WEBMASTER_EMAIL', 'your-webmaster-email@example.com'))
                    ->subject('新的网站联系消息')
                    ->replyTo($validated['user_email']); // 把用户邮箱设为回复地址,站长直接回复就能联系到用户
        });

        // 发送成功后跳回表单页面,给用户反馈
        return back()->with('success', '消息已发送,我们会尽快回复你!');
    }
}

3. 在邮件模板里展示用户邮箱

打开你的resources/views/email/contactwebmaster.blade.php模板,直接使用咱们传递的$user_email变量即可,比如:

<!DOCTYPE html>
<html>
<head>
    <title>新的联系消息</title>
</head>
<body>
    <h3>你收到了一条新的网站联系消息</h3>
    <p>发送人姓名: {{ $user_name }}</p>
    <p>发送人邮箱: {{ $user_email }}</p> <!-- 这里就是用户填写的邮箱 -->
    <p>消息内容:</p>
    <p>{{ $message_content }}</p>
</body>
</html>

如果是纯文本模板(.txt格式),写法完全一样,直接用{{ $user_email }}就行。

4. 配置邮件环境(新手必看!)

很多新手会忽略这一步,导致邮件发不出去。打开项目根目录的.env文件,配置好邮件驱动,比如用SMTP的话:

MAIL_MAILER=smtp
MAIL_HOST=smtp.example.com
MAIL_PORT=587
MAIL_USERNAME=your-email@example.com
MAIL_PASSWORD=your-email-password
MAIL_ENCRYPTION=tls
MAIL_FROM_ADDRESS=your-email@example.com
MAIL_FROM_NAME="${APP_NAME}"

要是想测试不发真实邮件,可以用Laravel自带的log驱动,把MAIL_MAILER=log,这样邮件会存在storage/logs/laravel.log里,方便调试。

5. 确保表单提交地址对应路由

最后,检查你的前端联系表单,action属性要指向咱们的命名路由,并且要加@csrf防止CSRF攻击:

<form method="POST" action="{{ route('contact.webmaster') }}">
    @csrf
    <div>
        <label>你的邮箱:</label>
        <input type="email" name="user_email" required>
    </div>
    <div>
        <label>你的姓名:</label>
        <input type="text" name="name" required>
    </div>
    <div>
        <label>消息内容:</label>
        <textarea name="message" required></textarea>
    </div>
    <button type="submit">发送消息</button>
</form>

注意:表单里的name="user_email"要和控制器验证的字段名完全一致,不然会拿不到用户输入的邮箱哦!

这样一套流程走下来,用户填写的邮箱就能顺利传递到邮件模板,路由也完善好了,邮件发送功能就能正常工作啦~

内容的提问来源于stack exchange,提问作者NickCaves

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 08:28:22