일본 통신사 중 소프트뱅크와 AU는 UTF8 메일이 깨져서 들어간다. (도코모는 정상적)
Laravel 뿐아니라 일본으로 메일을 보내고 싶다면, 이 포스팅의 방식대로 접근하면 된다.
iso-2022-jp
먼저 인코딩을 iso-2022-jp로 바꿔줘야한다.
테스트 결과 JIS 인코딩과 같다.
SJIS 인코딩도 있는데 위 인코딩에 몇가지 특수문자가 추가된 형태이다.
AppServiceProvider에 메일 인코딩을 전역으로 설정하자.
app/Providers/AppServiceProvider.php1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| <?php ... use Swift; use Swift_DependencyContainer; use Swift_Preferences;
class AppServiceProvider extends ServiceProvider { ... public function register() { Swift::init(function() { Swift_DependencyContainer::getInstance() ->register('mime.qpheaderencoder') ->asAliasOf('mime.base64headerencoder'); Swift_Preferences::getInstance()->setCharset('iso-2022-jp'); }); } }
|
7bit
위키를 참조해보면 iso-2022는 문자열을 7bit 또는 8bit로 표현하는 기술이다. 근데, 소프트뱅크 문서에 7bit로 달란다.
메일 폼을 열어서 build시에 인코딩 바이트를 변경하자.
app/Mail/YourMailForm.php1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| <?php ... use Swift_Mime_ContentEncoder_PlainContentEncoder;
class YourMailForm extends Mailable { ... public function build() { return $this->subject('ご注文を承りました。') ->view('mail.your_mail_view') ->withSwiftMessage(function($message) { $message->setCharset('iso-2022-jp') ->setEncoder(new Swift_Mime_ContentEncoder_PlainContentEncoder('7bit')); }); } }
|
mail.view
가장 중요한 것은 Mail View에서도 charset meta tag를 등록해줘야 한다는 것이다.
이 걸 세팅안하고 얼마나 삽질을 해댔는지, 없던 이두근이 생길지경.
resources/view/mail/your_mail_view.blade.php1 2 3 4 5 6 7 8
| <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-2022-jp"> </head> <body> ... </body> </html>
|
이렇게 세팅을 하고 메일을 보내면 정상적으로 보내지는 걸 확인할 수 있다.
여담
세 가지만 기억하자.
- iso-2022-jp
- 7bit
- meta[charset=”iso-2022-jp”]