gsmtp를 이용해 sendmail 보낼 때 BadCredentials 해결

-- PHP 2021. 3. 27. 23:01
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

Codeigniter의 email 라이브러리를 이용하여 아래의 설정으로 gmail smtp를 이용하고 있었다.

 

$config ['mailtype'] = 'html';

$config ['charset'] = 'utf-8';

$config ['crlf'] = "\r\n";

$config ['newline'] = "\r\n";

$config ['validate'] = FALSE;

$config ['priority'] = 3;

$config ['wordwrap'] = TRUE;

$config ['wrapchars'] = 76;

$config ['bcc_batch_mode'] = FALSE;

$config ['bcc_batch_size'] = 200;

$config ['protocol'] = 'smtp';

$config ['smtp_host'] = 'ssl://smtp.gmail.com';

$config ['smtp_user'] = 'your@gmail.com';

$config ['smtp_pass'] = 'your password';

$config ['smtp_port'] = 465;

$config ['smtp_timeout'] = 5;

 

어느 순간 메일이 보내지지 않아서 로그를 보니 아래와 같은 에러가 있었다.

 

Failed to authenticate password. Error: 535-5.7.8 Username and Password not accepted. Learn more at

535 5.7.8  https://support.google.com/mail/?p=BadCredentials g3sm5647619pfk.186 - gsmtp

 

인터넷에서 찾아보니 

 

"보안 수준이 낮은 앱 허용: 허용함"으로 하면 된다기에 했는데, 

될 때가 있고 안될 때가 있는 듯 하고 또한, 보안에 취약할 것 같아 아래와 같이 처리하기로 하였다.

 

 

1) gmail 2단계 인증 사용

 

2) 앱 비밀번호 생성 

 

  참고 : 2단계 인증 사용 시 앱 비밀번호 생성

 

3) 앱 비밀번호 생성 시 16자리 비밀번호를 위의 설정에 비밀번호로 이용

 

  $config ['smtp_pass'] = '16자리 앱 비밀번호';

 

4) 서버 이용 시 465포트가 막혀 있다면 iptables에 추가

 

  shell>iptables -I OUTPUT -p tcp --dport 465 -j ACCEPT

  shell>iptables-save

 

 

설정 후 정상적으로 메일이 발송됨을 확인하였다.

posted by 어린왕자악꿍