📅  最后修改于: 2023-12-03 15:03:44.451000             🧑  作者: Mango
PHPMailer 是一个流行的 PHP 邮件库,用于发送电子邮件。它提供了一些与 SMTP、POP3、IMAP、PHPMailer 验证等相关的特性,使得向高级用户或技术人员发送邮件变得非常容易。
您可以使用 Composer 来安装 PHPMailer 库。在项目的根目录中,打开终端并执行以下命令:
composer require phpmailer/phpmailer
在 Laravel 中,您可以使用 PHPMailer 来发送电子邮件。这是通过创建自定义 Mailer 驱动程序并使用 PHPMailer 库进行实现的。让我们看看如何实现这一点。
config/services.php
文件中,添加以下配置:'phpmailer' => [
'host' => env('MAIL_HOST', 'smtp.gmail.com'),
'port' => env('MAIL_PORT', 587),
'username' => env('MAIL_USERNAME'),
'password' => env('MAIL_PASSWORD'),
'encryption' => env('MAIL_ENCRYPTION', 'tls'),
'from' => [
'address' => env('MAIL_FROM_ADDRESS', 'example@example.com'),
'name' => env('MAIL_FROM_NAME', 'Example'),
],
],
config/mail.php
文件中,将 driver
更改为 phpmailer
:'driver' => 'phpmailer',
app/Mail/PhpMailer.php
:<?php
namespace App\Mail;
use Exception;
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception as PHPMailerException;
use Illuminate\Mail\Mailable;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\Facades\Validator;
use Illuminate\Contracts\Mail\Mailer as MailerContract;
class PhpMailer implements MailerContract
{
protected $phpMailer;
public function __construct(PHPMailer $phpMailer)
{
$this->phpMailer = $phpMailer;
// Set defaults
$this->phpMailer->isSMTP();
$this->phpMailer->SMTPAuth = true;
$this->phpMailer->SMTPSecure = $this->phpMailer->SMTPAutoTLS;
$this->phpMailer->CharSet = 'utf-8';
}
public function send(Mailable $mailable)
{
$validator = Validator::make($mailable->build()->toArray(), $mailable->rules());
if ($validator->fails()) {
$errors = $validator->errors();
Log::error('Failed to send email. Validation errors: [', $errors->toArray());
return false;
}
try {
$mailable->build($this->phpMailer);
$this->phpMailer->send();
return true;
} catch (PHPMailerException $ex) {
Log::error('Failed to send email. Exception was thrown: ['. $ex->getMessage() .']', $ex->getTrace());
return false;
} catch (Exception $ex) {
Log::error('Failed to send email. Exception was thrown: ['. $ex->getMessage() .']', $ex->getTrace());
return false;
}
}
public function failures()
{
return [];
}
}
该类实现了 MailerContract 接口,定义了 send
方法和 failures
方法,是邮件发送之前的最后一步封装。
app/Providers/AppServiceProvider.php
的 register
方法中,绑定该类为 Laravel 的默认邮件实现:<?php
namespace App\Providers;
use App\Mail\PhpMailer;
use Illuminate\Support\Facades\Mail;
use Illuminate\Support\ServiceProvider;
use PHPMailer\PHPMailer\PHPMailer;
class AppServiceProvider extends ServiceProvider
{
public function register()
{
$this->app->singleton('mail.manager', function ($app) {
return new \Illuminate\Mail\MailManager($app);
});
$this->app->singleton('mailer', function ($app) {
$config = $app['config']['mail'];
return new PhpMailer(new PHPMailer);
});
$this->app->singleton('swift.mailer', function ($app) {
return new \Swift_Mailer(
$app->make('mailer')->getSwiftMailer()
);
});
$this->app->singleton('swift.transport', function ($app) {
return new \Swift_SmtpTransport;
});
Mail::swap($this->app->make('mailer'));
}
}
现在,您已经成功地将 PHPMailer 库集成到 Laravel 中了,可以像平常一样进行电子邮件的发送了。
在 Laravel 项目中,使用 PHPMailer 库发送电子邮件非常简单。通过上述步骤,我们可以快速创建自己的 Mailer 驱动程序,以及在 Laravel 的应用程序中使用 PHPMailer 库。
在此过程中,我们也了解了 PHPMailer 和 Laravel 的关系,并熟练掌握了如何将 PHPMailer 库与 Laravel 集成在一起,从而最大限度地利用 PHPMailer 库提供的丰富特性,为应用程序的用户发送电子邮件。
本文完。