Laravel 기본 vendor를 이용하여 메일 전송하는 소스 입니다.
1. 메일 발송용 컨트롤러 생성
php artisan make:controller MailController
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Mail;
class MailController extends Controller
{
/**
* 메일 전송 소스 입니다. 테스트 용으로 하드코딩을 했습니다.
*
* @return string
*/
public function send(Request $request)
{
$user = array(
'email' => 'yourcount@gmail.com',
'name' => 'yourname'
);
$data = array(
'detail'=> 'Your awesome detail here',
'name' => $user['name']
);
Mail::send('emails.welcome', $data, function($message) use ($user)
{
$message->from('master@betanews.net', 'Betanews Master');
$message->to($user['email'], $user['name'])->subject('Welcome!');
});
return 'Done!';
}
}
2. 메일용 폼 블레이드 php 파일 작성
위 소스에서 Mail::send() 함수의 첫번째 파람이 메일용 폼 블레이드 파일명입니다.
'emails.welcome' > resources/views/emails/welcome.blade.php 입니다.
Your sign up details are below:
{{ $detail }},
{{ $name}}
3. 기타 메일 설정 변경
.env 메일 설정 변경 혹은 config/mail.php를 직접 변경
MAIL_DRIVER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=587
MAIL_USERNAME=your_id@gmail.com
MAIL_PASSWORD=app_password
MAIL_ENCRYPTION=tls
routes/api.php 추가 (메일 전송용 api 로 추가함)
Route::get('mail', 'MailController@send');
----
Gmail을 이용하여 메일을 전송하는 것이 간단하다고 생각을 하고 있었습니다. 하지만 소스만 정리한다고 되지 않네요. 과거 Google이 계정 강화를 위해서 보안 단계를 만들었는데, 여기에 웹 접근이 아닌 외부 앱으로 접근하는 경우를 대비해서 비밀번호를 별도 추가해서 관리하도록 했습니다.
메일 전송을 위한 앱용 비밀번호 추가 방법
먼저, 구글 계정(https://myaccount.google.com/) 페이지로 이동합니다. 먼저 앱 비밀번호를 설정하기 위해서 2단계 인증까지 설정을 완료하셔야 합니다. (기회가 닿으면 별도 내용도 정리를 해보겠습니다.)
보안 메뉴로 이동합니다.
보안 메뉴 > Google에 로그인 > 앱 비밀번호 항목을 선택합니다.
본인 확인을 위한 비밀번호를 재확인 합니다.
접속할 기기/장비의 비밀번호 생성을 위해 앱을 선택합니다.
저는 기타(맞춤 이름) 을 선택하여 별도 이름을 추가했습니다.
접근할 앱, 기기/장비 이름을 추가 후 [생성] 버튼을 클릭합니다.
팝업창이 뜨면서 "기기용 앱 비밀번호"를 생성하여 알려 줍니다. 해당 16자리 번호를 .env 파일의 MAIL_PASSWORD에 붙여넣기를 합니다.
다시 메일 전송을 하면 정상적으로 나올 것입니다.
혹시 Gmail로 메일 발송하시는 분들에게 도움이 되었으면 합니다. ^^