Laravel에서 이메일을 보내려면 Laravel 메일러, Laravel 메일 가능 클래스 및 Mail 파사드라는 세 가지 구성 요소 간의 협업이 필요합니다. 세 가지 각각은 이메일 전송 수명주기의 서로 다른 측면을 다룹니다.
메일러는 애플리케이션이 이메일을 수신자에게 전달하는 데 사용할 수 있는 이메일 전송 서비스(예: AWS SES, Sendgrid, Mailgun 등)를 연결하는 드라이버입니다.
Laravel Mailable은 보낼 이메일 템플릿을 나타내는 특수 클래스입니다. 여기에는 내용, "받는 사람" 필드, 첨부 파일 등과 같은 이메일 메시지의 모든 일반적인 정보가 포함되어 있습니다.
마지막으로, Mail 파사드는 메일러 드라이버를 통해 메일의 실제 전송을 요청하는 액세스 포인트입니다.
저는 이 시스템을 자세히 살펴볼 기회가 있었고 현재 Inspector는 시간당 6000통 이상의 이메일을 보냅니다.
Laravel Mailable은 최신 애플리케이션의 핵심 구성 요소 중 하나이기 때문에 제 경험이 프레임워크의 이 구성 요소를 더 잘 이해하는 데 도움이 되기를 바랍니다.
더 많은 기술 관련 기사를 보려면 Linkedin이나 X에서 저를 팔로우하세요.
Laravel의 메일러 드라이버 구성은 config/mail.php 파일에 있습니다. 각각 이름과 전송 드라이버로 특징지어지는 여러 개의 메일러를 정의하는 것이 가능합니다.
'mailgun' => [ 'transport' => 'mailgun', // 'client' => [ // 'timeout' => 5, // ]
라라벨은 기본 이메일 서비스가 다운될 경우를 대비하여 이를 사용하려고 시도할 것입니다.
mailable은 애플리케이션에서 보낸 이메일을 나타내는 PHP 클래스입니다. Artisan make 명령을 사용하여 새로운 메일링 가능 클래스를 생성할 수 있습니다.
php artisan make:mail OrderConfirmation
메일의 구성은 봉투, 내용, 첨부 파일의 세 가지 주요 방법을 통해 이루어지며 각각 헤더, 메시지 본문 및 첨부 파일 정의를 처리합니다.
use Illuminate\Bus\Queueable; use Illuminate\Mail\Mailables\Address; use Illuminate\Mail\Mailables\Attachment; use Illuminate\Mail\Mailables\Content; use Illuminate\Mail\Mailables\Envelope; use Illuminate\Mail\Mailable; use Illuminate\Queue\SerializesModels; class OrderConfirmation extends Mailable { use Queueable; use SerializesModels; public function __construct(public Order $order) {} /** * Configure the email message */ public function envelope() { return new Envelope( from: new Address('[email protected]', 'E-commerce'), subject: 'Order Confirmation', ); } /** * Generate the body */ public function content() { return new Content( markdown: 'emails.orders.confirm', ); } /** * Configure the email attachements */ public function attachments() { $code = $this->order->code; return [ Attachment::fromPath("/path/to/order-{$code}.pdf"), ]; } }
이메일 콘텐츠의 렌더링은 당연히 적절한 블레이드 템플릿에 맡겨집니다. 블레이드 보기 내에서는 메일 가능 클래스에 정의된 공용 속성(위 예에서는 $order)을 사용하여 이메일 렌더링에 사용할 데이터를 검색할 수 있습니다.
Code: {{ $order->code }} Address: {{ $order->address }} ...
실제 이메일 전송은 Mail 파사드와 to 및 send 메소드를 통해 발생합니다.
class OrderController extends Controller { public function ship(Order $order) { // do stuff with the order // Send the confirmation email Mail::to($order->user)->send(new OrderConfirmation($order)); } }
이메일 수신자는 이메일 주소 문자열로 전달되거나 사용자 개체 또는 이름과 이메일 속성이 있는 개체 컬렉션을 통해 전달될 수 있습니다.
전송될 실제 이메일은 콘텐츠와 연결된 블레이드 템플릿을 렌더링하는 데 필요한 속성을 수신하는 메일 가능 개체로 표시됩니다.
Mail 파사드는 수신자(cc 및 bcc 방법 사용)와 전송 시간 및 방법(queue 이상)과 관련하여 전송 구성을 더 자세히 정의할 수 있는 다양한 체인 가능한 방법을 제공합니다.
자신만의 파사드를 만드는 방법을 배우려면 아래 기사를 읽어보세요.
https://inspector.dev/how-to-extend-laravel-with-driver-based-services/
이메일을 보내려면 외부 서비스(메일러 드라이버)를 사용해야 하므로 작업 속도가 느려지고 사용자 경험에 부정적인 영향을 미칠 수 있습니다.
Laravel을 사용하면 백그라운드 전송을 위해 이메일 메시지를 대기열에 넣을 수 있습니다. Laravel 대기열 시스템을 대규모로 사용하는 방법에 대한 튜토리얼에 관심이 있다면 아래 문서를 읽어보세요:
https://inspector.dev/what-worked-for-me-using-laravel-queues-from-the-basics-to-horizon/
백그라운드에서 이메일 전송을 연기하려면 ShouldQueue 인터페이스 또는 Mail 파사드의 대기열 메소드라는 두 가지 옵션이 있습니다.
이전 스니펫에서 볼 수 있듯이 메일 가능 클래스는 기본적으로 Queueable과 같은 일부 특성이 첨부되어 생성됩니다.
구현을 건드리지 않고도 Mail 파사드의 큐 메소드를 프로그래밍 방식으로 사용할 수 있습니다:
Mail::to($user)->queue(new OrderConfirmation($order));
대안으로 Mailable 클래스에서 ShouldQueue 인터페이스 구현을 선언할 수 있습니다.
use Illuminate\Contracts\Queue\ShouldQueue; class OrderConfirmation extends Mailable implements ShouldQueue { ... }
이 인터페이스를 사용하면 Mail 파사드에서 표준 전송 메소드를 호출하는 경우에도 이메일 전송이 항상 대기열에 추가됩니다.
// If the mailable class implements ShouldQueue these methods has the same behaviour. Mail::to($user)->send(new OrderConfirmation($order)); Mail::to($user)->queue(new OrderConfirmation($order));
이메일 메시지와 관련된 뷰를 구현할 때 블레이드 뷰가 렌더링할 최종 결과에 대한 시각적 피드백을 갖는 것이 정말 도움이 됩니다. Laravel 프로젝트에서 Routes/mailable.php 파일을 사용하여 이를 수행할 수 있습니다.
/* * Render email in the browser. * * Visit https://homestead.test/mailable */ Route::get('/', function () { return new \App\Domains\Organization\Mails\IngestionLimitMail( \App\Domains\Organization\Models\Organization::firstOrFail() ); });
라우트에서 유효한 Mailable 인스턴스를 반환할 수 있으며 Laravel은 브라우저에서 뷰를 렌더링합니다. 일반 웹페이지를 개발하는 것과 같습니다.
마지막으로
에서 이 경로의 가용성을 제한하는 것을 기억하세요.
RouteServiceProvider:
class RouteServiceProvider extends ServiceProvider { /** * Define your route model bindings, pattern filters, etc. * * @return void */ public function boot() { if (app()->environment('local')) { $this->mapMailableRoutes(); } } /** * Render mailables in the browser. * * @return void */ protected function mapMailableRoutes() { Route::prefix('mailable') ->group(base_path('routes/mailable.php')); } }
더 많은 기술 관련 기사를 보려면 Linkedin이나 X에서 저를 팔로우하세요.
Inspector는 소프트웨어 개발자를 위해 특별히 설계된 코드 실행 모니터링 도구입니다. 서버 수준에서 아무것도 설치할 필요가 없습니다. Laravel 패키지만 설치하면 바로 사용할 수 있습니다.
HTTP 모니터링, 데이터베이스 쿼리 통찰력, 경고 및 알림을 선호하는 메시징 환경으로 전달하는 기능을 찾고 있다면 Inspector를 무료로 사용해 보세요. 계정을 등록하세요.
또는 웹사이트에서 자세한 내용을 알아보세요: https://inspector.dev
부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3