主页/PHP笔记/PHP问答/框架Laravel/如何在Laravel中正确发送邮件:正确的方法

如何在Laravel中正确发送邮件:正确的方法

Bug编译狮

Bug编译狮

在Laravel中发送电子邮件是一种常见的需求,可以提高应用程序的用户体验和可靠性。以下是如何在Laravel中正确发送邮件的步骤:

1. 安装Laravel

如果你还没有安装Laravel,可以通过Composer来安装:

composer create-project --prefer-dist laravel/laravel my-laravel-app
cd my-laravel-app

2. 配置Email服务

config/services.php文件中配置你的电子邮件服务提供商。例如,使用SMTP服务:

return [
    'mail' => [
        'driver' => env('MAIL_DRIVER', 'smtp'),
        'host' => env('MAIL_HOST', 'smtp.example.com'),
        'port' => env('MAIL_PORT', 587),
        'username' => env('MAIL_USERNAME'),
        'password' => env('MAIL_PASSWORD'),
        'encryption' => env('MAIL_ENCRYPTION', 'tls'),
        'sendmail' => '/usr/sbin/sendmail -bs',
        'pretend' => false,
    ],
];

3. 创建Mail类

创建一个新的Mail类来定义你要发送的内容。例如,创建一个名为WelcomeEmail的类:

php artisan make:mail WelcomeEmail

在这个类中,你可以定义邮件的主题、接收者、模板等信息。

namespace AppMail;

use IlluminateBusQueueable;
use IlluminateContractsQueueShouldQueue;
use IlluminateMailMailable;
use IlluminateQueueSerializesModels;

class WelcomeEmail extends Mailable
{
    use Queueable, SerializesModels;

    public $user;

    /**
     * Create a new message instance.
     *
     * @param AppUser $user
     */
    public function __construct($user)
    {
        $this->user = $user;
    }

    /**
     * Build the message.
     *
     * @return $this
     */
    public function build()
    {
        return $this->view('emails.welcome')
                    ->subject('欢迎来到我们的应用');
    }
}

4. 发送邮件

在控制器或其他地方调用这个Mail类来发送邮件。例如,创建一个控制器:

php artisan make:controller MailController

然后在控制器中添加发送邮件的方法:

namespace AppHttpControllers;

use AppMailWelcomeEmail;
use IlluminateSupportFacadesMail;

class MailController extends Controller
{
    public function sendWelcomeEmail()
    {
        $user = User::find(1); // 假设有一个用户ID为1
        Mail::to($user->email)->send(new WelcomeEmail($user));

        return response()->json(['message' => '邮件已发送']);
    }
}

5. 视图文件

创建一个视图文件来显示邮件内容。例如,在resources/views/emails/welcome.blade.php中添加以下内容:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Welcome Email</title>
</head>
<body>
    <h1>欢迎来到我们的应用</h1>
    <p>{{ $user->name }}</p>
    <p>感谢注册!</p>
</body>
</html>

示例代码

完整的代码如下:

app/Mail/WelcomeEmail.php

namespace AppMail;

use IlluminateBusQueueable;
use IlluminateContractsQueueShouldQueue;
use IlluminateMailMailable;
use IlluminateQueueSerializesModels;

class WelcomeEmail extends Mailable
{
    use Queueable, SerializesModels;

    public $user;

    /**
     * Create a new message instance.
     *
     * @param AppUser $user
     */
    public function __construct($user)
    {
        $this->user = $user;
    }

    /**
     * Build the message.
     *
     * @return $this
     */
    public function build()
    {
        return $this->view('emails.welcome')
                    ->subject('欢迎来到我们的应用');
    }
}

resources/views/emails/welcome.blade.php

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Welcome Email</title>
</head>
<body>
    <h1>欢迎来到我们的应用</h1>
    <p>{{ $user->name }}</p>
    <p>感谢注册!</p>
</body>
</html>

routes/web.php

use AppHttpControllersMailController;

Route::get('/send-welcome-email', [MailController::class, 'sendWelcomeEmail']);

app/Http/Controllers/MailController.php

namespace AppHttpControllers;

use AppMailWelcomeEmail;
use IlluminateSupportFacadesMail;

class MailController extends Controller
{
    public function sendWelcomeEmail()
    {
        $user = User::find(1); // 假设有一个用户ID为1
        Mail::to($user->email)->send(new WelcomeEmail($user));

        return response()->json(['message' => '邮件已发送']);
    }
}

通过以上步骤,你可以在Laravel中正确地发送电子邮件。确保你的电子邮件服务配置正确,并且视图文件路径正确。

黑板Bug讲师

黑板Bug讲师

介绍

Laravel简化了各种Web开发任务的实现,并且更加可持续,包括发送电子邮件。发送电子邮件是web应用中常见的需求,无论是用户验证、通知还是新闻通讯。在本教程中,我们将学习如何使用Laravel内置功能发送电子邮件,遵循最佳实践。

前置条件

一个SMTP服务器或像Mailgun、SendGrid等邮件服务。

基础的Laravel知识。

一个Laravel应用程序的设置

在Laravel中配置邮件功能。

在开始发送电子邮件之前,你需要配置你的电子邮件设置。在“邮件设置”中进行设置。.env请将文件与您的SMTP详细信息关联起来。以下是在Mailgun中的示例:

MAIL_MAILER=smtp
MAIL_HOST=smtp.mailgun.org
MAIL_PORT=587
MAIL_USERNAME=null
MAIL_PASSWORD=null
MAIL_ENCRYPTION=tls
[email protected]
MAIL_FROM_NAME="Example App"

请注意,更新配置时,请使用真实的凭据!

在Laravel中创建邮件(Mailable)的方法如下:首先,你需要创建一个继承自Mail::Message的类来定义你的邮件内容。然后,你可以使用Mail::to()方法向邮件添加收件人,并使用with()或attach()方法传递任何需要包含在内的数据。最后,通过调用send()方法将邮件发送到收件人。

Laravel 提供了一种组织与电子邮件相关所有信息的简洁方法,通过一个名为 Mailable 的类来实现。你可以使用 Artisan 生成一个新的 Mailable:

php artisan make:mail WelcomeEmail

该命令创建了一个新的类。appMail目录。你可以指定视图并构建电子邮件如下:

namespace AppMail;

use IlluminateBusQueueable;
use IlluminateMailMailable;
use IlluminateQueueSerializesModels;
use IlluminateContractsQueueShouldQueue;

class WelcomeEmail extends Mailable
{
 use Queueable, SerializesModels;

 public function __construct()
 {
 // Initialization code
 }

 public function build()
 {
 return $this->view('emails.welcome');
 }
}

在您的视图文件中,您可以设计电子邮件的HTML结构,因为Laravel默认设置使用Blade模板。

正在处理您的邮件。

一旦设置好Mailable,发送电子邮件就简单到像使用它一样。Mail门面,外衣。

use Mail;
use AppMailWelcomeEmail;

Route::get('/send-email', function () {
 Mail::to('[email protected]')->send(new WelcomeEmail());
 return 'Email sent';
});

你可以将动态数据传递给邮件器:


class WelcomeEmail extends Mailable
{
 use Queueable, SerializesModels;

 public $user;

 public function __construct($user)
 {
 $this->user = $user;
 }

 public function build()
 {
 return $this->view('emails.welcome')->with(['user' => $this->user]);
 }
}
Mail::to($request->user())->send(new WelcomeEmail($request->user()));

排队收邮件

使用 Laravel,你可以队列邮件,这非常有用,可以防止由于发送时间导致的应用延迟。要在一个队列上发送电子邮件:

use IlluminateSupportFacadesMail;

Mail::to('[email protected]')->queue(new WelcomeEmail());

确保您的应用程序已设置为队列工作模式。您的WelcomeEmail也可以实施这个ShouldQueue确保接口自动由邮件器排队。

在Laravel中测试电子邮件可以通过以下步骤实现: 创建一个简单的控制器,例如 EmailController。 在该控制器中定义一个方法来处理邮件的发送逻辑。 使用Eloquent ORM获取模型实例或数据库记录以填充邮件内容。 以下是具体示例代码: // EmailController.php namespace AppHttpControllers; use IlluminateHttpRequest; use AppModelsUser; // 假设用户模型为User class EmailController extends Controller { public function sendTestEmail() { $user = User::find(1); // 通过ID找到用户实例 $email = $user->email; return view(’emails.test-email’, compact(’email’)); } } 在这个例子中,我们首先从数据库中获取了用户实例(假设用户ID为1),然后将用户的邮箱地址设置到视图中。最后,我们返回了一个包含邮件模板的视图。 在Laravel的resources/views/emails目录下创建一个名为test-email.blade.php的文件,用于显示邮件内容: <!– resources/views/emails/test-email.blade.php –> <!DOCTYPE html> <html lang=”en”> <head> <meta charset=”UTF-8″> <title>Test Email</title> </head> <body> <h1>Hello, {{ $email }}</h1> <p>This is a test email sent from your application.</p> </body> </html> 现在,当你访问 /send-test-email 路由时,会看到一封带有用户邮箱地址和欢迎信息的测试邮件。

确保电子邮件设置的测试非常重要。Laravel 提供了“假发”功能,可以帮助您验证邮件是否被正确发送:

/**
 * Test example for email sending.
 */
public function testEmailSending()
{
 Mail::fake();

 // Perform application logic
 $response = $this->get('/send-email');

 // Assert that an email was sent
 Mail::assertSent(WelcomeEmail::class);
}

这实际上并不发送电子邮件,而是确保在正常情况下邮件会发送。

结论。

使用Laravel发送电子邮件是一种简单的过程,但其背后的实现包含丰富的功能,如队列和测试。按照本教程中的步骤进行操作,您可以在Laravel应用程序中可靠且高效地集成电子邮件功能。

长工码奴1523

长工码奴1523

在 Laravel 中发送邮件是常见的需求,特别是对于需要用户验证、通知或者推送信息等场景。下面我将指导您如何使用 Laravel 的 Mail 类来发送电子邮件。

步骤 1: 创建一个新类

首先,创建一个新的 Email 类:

<?php

namespace AppMail;

use IlluminateBusQueueable;
use IlluminateContractsQueueShouldQueue;
use IlluminateMailMailable;
use IlluminateQueueSerializesModels;

class Email extends Mailable
{
    use Queueable, SerializesModels;

    public $data;

    /**
     * Create a new message instance.
     *
     * @return void
     */
    public function __construct($data)
    {
        $this->data = $data;
    }

    /**
     * Build the message.
     *
     * @return IlluminateMailMailable
     */
    public function build()
    {
        return $this->view('emails.email');
    }
}

步骤 2: 配置邮件服务

确保您的 Laravel 应用已启用邮件服务(通常是通过 Composer 安装了 mail() 方法的 Eloquent ORM):

composer require illuminate/mail

接下来,你需要配置邮件服务。打开 .env 文件并添加以下行:

MAIL_DRIVER=smtp
MAIL_HOST=your-mail-host
MAIL_PORT=your-port
MAIL_USERNAME=your-email-address
MAIL_PASSWORD=your-password
MAIL_ENCRYPTION=tls

替换上述配置中的 your-mail-host, your-port, your-email-address, 和 your-password 为实际值。

步骤 3: 发送邮件

现在可以开始发送邮件了。编写一个控制器方法来处理邮件发送逻辑,并调用 mail() 方法来发送邮件:

<?php

namespace AppHttpControllers;

use AppModelsUser;
use IlluminateSupportFacadesMail;

class UserController extends Controller
{
    public function sendWelcomeEmail(User $user)
    {
        $email = new Email(['subject' => 'Welcome to our website', 'body' => 'Hello, ' . $user->name . '! Welcome to our site.']);
        Mail::to($user)->send($email);
    }
}

在这个例子中,我们创建了一个名为 UserController 的控制器,其中有一个名为 sendWelcomeEmail 的方法。这个方法接收一个 $user 参数,并创建一个 Email 实例。然后,它使用 Mail::to() 方法向指定用户发送电子邮件。

示例代码示例

假设您想发送一封带有特定主题和消息体的欢迎邮件,您可以按照以下方式操作:

<?php

namespace AppHttpControllers;

use AppModelsUser;
use IlluminateSupportFacadesMail;

class UserController extends Controller
{
    public function sendWelcomeEmail(User $user)
    {
        $email = new Email([
            'subject' => 'Welcome to our website',
            'body' => 'Hello, ' . $user->name . '! Welcome to our site.',
        ]);

        Mail::to($user)->send($email);
    }
}

这将创建一个包含特定主题和消息体的欢迎邮件,并将其发送到指定用户的邮箱地址。