하 드디어 이메일 붙이기 작업 끝냈다.
조금 돌아돌아 간 감이 없지 않은데 그래도 어느정도 수월하게 끝낸 것 같다.
아래는 최종코드
function sendMail($email, $mail_type, $data){
$content = 메일 컨텐츠 text;
$title = 메일 제목;
if($content) {
$data['enc_tr_cert'] = enc_tr_cert;
$data['tr_url'] = url;
$data['tr_add'] = add;
$file = fopen(/...resources/views/mailling(생략가능)/$mail_type.blade.php","w");
fwrite($file, $content);
fclose($file);
Mail::send("mailling.$mail_type", $data, function ($m) use($title, $email){
$m->from('인증받은 email주소', '이름');
$m->to($email);
$m->subject($title);
});
//로그 저장
$mCommon->insertMailLog($email, $title, $content);
}
}
$data 는 array 형식인데, key->value 형의 map 형으로 사용되고 있고,
blade.php 파일 내용은 html 형식으로 저장돼서
"<p>보낼메세지~~{{$content01}} ... ... {{$content02}} 입니다.</p>" 같은 내용으로 DB에 저장되어있다.
아래는 시행착오 목록들
01. 함수 내 함수에서 함수에서 정의된 변수 사용하기
아 이거 그 전에 이전에도 sql문 쓰다가 끝끝내 못 찾아서 빡쳤던 기억이 나는데 ㅋㅋㅋㅋ 그냥 php나 라라벨 이해도가 부족했던걸로...
함수 내에서 다른 함수를 사용할 때 (가령 위의 코드처럼 내부 함수를 사용한다거나) 내부함수에서 호출하는 함수에 정의된 변수를 너무너무너무 쓰고 싶었는데 못 썼던 기억이 아릿하다.
그런데 저렇게 function(매개변수) 뒤에 ues 로 기존 함수의 변수를 적으면 되는거였음..
아, 짜증나... 하면서도 일단 해결법을 알았으니 다행이다 싶었다.
02. 메일 보낼때 지정한 변수 사용하기
이거는 좀 케이스가 있는데 처음에는
1. send() 함수로 메일을 보내려 했는데 파일을 일일히 만들어줄 수가 없으니까(DB에서 내용을 가져다 쓸거라서) 포기
2. raw() 함수는 쌩 텍스트 그대로 보낼 수 있다기에 db에서 받아온 텍스트 값을 그대로 보냈다.
물론 동작은 했는데 html 태그나 출력명령어 {{ $변수 }} 도 그대로 발송돼서 이마 짚..
3. 이전 다른 코드를 찾아보니 아예 파일을 생성해서 그 안에 db에 저장된 텍스트를 집어넣는? 아무튼 그런 방식을 쓰더라. 아무래도 이게 답이겠거니 싶어서 파일 관련 함수 가져다가 파일 생성까지는 성공. 근데 변수를 어떻게 보내지?
4. 아무리 똥꼬발랄 지랄을 떨어도 변수 출력이 안 되는 것이다.. {{$변수}}, {$변수}, {변수} ... 등등등 양식만 주구장창 바꿨는데 완전 헛짓이었음..
어찌저찌 하다가 라라벨 공식 페이지에서 메일 발송 부분을 찾아봤는데 매개변수가 있는데에는 다 이유가 있는 법이니 뭔가 하다가 막히면 공식 페이지부터 뒤져보자... 시야가 좁아서 그걸 못 찾은 나자신 반성해라ㅠ
아무튼 send() 함수의 경우 매개변수가 (보낼 파일, 파일 내에서 사용할 데이터 변수, callback함수) 인 것 같은데 정확한 expended 자료형은 모르겠다. 일단 아! 이 데이터로 보내는거구나! 찾았다! 싶었지.
5. 근데 데이터를 내부에서 어떻게 쓰느냐를 또 몰라서 별 뻘짓을 했는데 기본적으로 데이터는 map형식으로 사용하는 것 같고, 정의는 늘 그렇듯 key->value 로 값을 넣어주고. 생성한 blade.php 파일 내에서는 value 값을 그냥 변수처럼 {{$value}} 로 작성해두면 data로 넘겨준 값이 넘어가는 것!
요약
- Mail::raw(text, function($message){ ... }) 는 어찌됐든 날 text를 그냥 그대로 발송하는 거
- Mail::send(plainTextFile, $data, function($message)/*$callback*/ { ... }) 은 내가 지정한 플레인 텍스트 파일의 내용을 발송하는거.
- $data 는 Map 형식으로 예를들어 ['name'->$name, 'email'->$email] 라고 한다면, 발송할 텍스트 파일 내에서는 {{$name}}, {{$email}} 으로 작성해두면 함수에서 지정한 값으로 값이 대입된 후 메일이 발송된다.
내가 헷갈렸어서 추가로 작성해두자면
Mali::send(plainTextFile, $data, $callback) 이든
Mali::send(plainTextFile, ['name'->$name, 'email'->$email], $callback) 이거든 간에 차이는 없고 추가로 값이
[ 'print_name'->$func_name, 'print_email'->$func_email ] 일 때 파일 내에서는 {{$print_name}}, {{$print_email}}으로 작성하면 되는거고, $func_name과 $func_email 은 함수 내에서 지정된 변수라는 것.
'Server > PHP' 카테고리의 다른 글
[Laravel][Error] Syntax error or access violation: 1055 Expression (0) | 2019.07.09 |
---|---|
[Laravel][Error] SQLSTATE[HY000] [1045] Access denied for user (0) | 2019.07.09 |
[laravel_lumen] database GroupBy [Syntax error or access violation] (0) | 2019.06.13 |
[php] Carbon & Date (0) | 2019.06.07 |
[MySQL & Laravel Query Builder] 쿼리빌더를 사용한 union (0) | 2019.05.29 |