Laravel은 유명한 SwiftMailer 라이브러리를 바탕으로 깨끗하고 간단한 API를 제공 합니다. 메일 설정 파일은 app/config/mail.php
이며, SMTP 호스트, 포트, 자격증명 뿐만 아니라 라이브러리에 의해 전송되는 모든 메시지에 사용되는 글로벌 from
주소를 변경할 수 있도록 해주는 옵션들을 포함하고 있습니다. 당신이 원하는 어떤 SMTP 서버를 사용해도 좋습니다. PHP mail
함수를 사용하여 메일을 보내려면, 설정 파일의 driver
를 mail
로 변경하시기 바랍니다.
Mail::send
메소드를 사용하여 이메일을 메시지를 보낼수 있습니다.:
Mail::send('emails.welcome', $data, function($m)
{
$m->to('[email protected]', 'John Smith')->subject('Welcome!');
});
send
메소드에 전달되는 첫번째 인수는 이메일의 바디로 사용될 뷰 파일의 이름입니다. 두번째 인수는 뷰에 전달 될 $data
이며, 세번째는 이메일 메시지에 다양한 옵션을 지정하게 해주는 클로저입니다.
노트:
$message
변수는 항상 이베일 뷰에 전달되며, 인라인 첨부를 사용할 수 있게 해줍니다. 그러므로 뷰 페이로드에message
이름의 변수 전달은 피하는게 좋습니다.
또한 HTML 뷰를 추가로 사용할 수 있는 플레인 텍스트 뷰를 지정할 수도 있습니다.:
Mail::send(array('html.view', 'text.view'), $data, $callback);
또는 html
나 text
키를 사용하여 한개의 뷰 타입만 지정할 수도 있습니다:
Mail::send(array('text' => 'view'), $data, $callback);
참조나 첨부파일 같은 다른 옵션 또한 이메일 메시지에 지정할 수 있습니다.:
Mail::send('emails.welcome', $data, function($m)
{
$m->from('[email protected]', 'Laravel');
$m->to('[email protected]')->cc('[email protected]');
$m->attach($pathToFile);
});
메시지에 파일을 첨부할 때는 파일의 MIME 타입이나 표시명을 지정할 수 있습니다.:
$m->attach($pathToFile, array('as' => $display, 'mime' => $mime));
노트:
Mail::send
클로저에 전달되는 메시지 인스턴스는 SwiftMailer의 메시지 클래스를 확장하므로 클래스의 모든 메소드를 호출하여 메시지를 작성할 수 있도록 해줍니다.
이메일에 이미지를 포함하는 것은 성가신 일입니다. 하지만 Laravel은 이메일에 이미지를 첨부하고 적절한 CID를 조회할 수 있는 편리한 방법을 제공합니다.
이메일 뷰에 이미지 첨부
<body>
Here is an image:
<img src="<?php echo $message->embed($pathToFile); ?>">
</body>
이메일 뷰에 미가공 데이터 첨부
<body>
Here is an image from raw data:
<img src="<?php echo $message->embedData($data, $name); ?>">
</body>
$message
변수는 Mail
클래스에 의해 항상 이베일 뷰에 전달 된다는 것을 주의 하십시오.
e-mail 메시지를 보내는 일은 어플리케이션의 응답 속도를 대폭 길게 만드므로, 많은 개발자들이 e-mail을 백그라운드에서 보낼 수 있도록 대기 시키는 방법을 선택합니다. Laravel은 내장된 통합 큐 API를 사용해 이를 쉽게 할 수 있도록 해줍니다. 간단하게 Mail
클래스의 queue
메소드를 사용하여 메일을 대기 시킬 수 있습니다.:
메일 대기시키기
Mail::queue('emails.welcome', $data, function($m)
{
$m->to('[email protected]', 'John Smith')->subject('Welcome!');
});
또한 later
메소드를 사용하여 메일을 몇 초 뒤에 보낼 지 명시 할수도 있습니다.:
Mail::later(5, 'emails.welcome', $data, function($m)
{
$m->to('[email protected]', 'John Smith')->subject('Welcome!');
});
어떤 큐나, "튜브"에 메일 메시지를 푸쉬 할 것인지 지정하려면, queueOn
과 laterOn
메소드를 사용하여 그렇게 할 수 있습니다.:
Mail::queueOn('queue-name', 'emails.welcome', $data, function($m)
{
$m->to('[email protected]', 'John Smith')->subject('Welcome!');
});