본문으로 바로가기

[CentOS] Gmail의 SMTP를 사용한 메일전송

category 리눅스/CentOS 2013. 6. 27. 23:05

외부에 있는 SMTP 서버(구글등)를 이용해서 메일을 보내는 방법입니다 네이버웍스나 구글앱스, 다음 도메인메일서비스등과 함께 사용하면 여러가지 이점이 있는데 메일서버를 구축하기 어려운 환경이라던지(유동IP) 혹은 화이트도메인, SPF등의 설정이 없더라도 구글메일을 이용하기에 스팸으로 분류되지 않을 수 있습니다.

환경 : CentOS 6.4 Minimal
MTA : Postfix

설정방법

postfix는 설치되어 있다는 가정하에 진행된다.

1. postfix 설정

vi /etc/postfix/main.cf

  # 아래의 구문을 main.cf에 추가
  relayhost = [smtp.gmail.com]:587
  smtp_use_tls = yes
  smtp_sasl_auth_enable = yes
  smtp_sasl_security_options = noanonymous
  smtp_tls_CAfile = /etc/postfix/cacert.pem
  smtp_sasl_password_maps = hash:/etc/postfix/gmail

2. /etc/postfix/gmail를 생성

새로 gmail 파일을 만들면서 아래와 같이 구문을 추가한다(본인의 gmail계정:계정패스워드와 같이 입력한다).

vi /etc/postfix/gmail

[smtp.gmail.com]:587 username@gmail.com:password

gmail 파일의 퍼미션을 변경한다.

chmod 600 /etc/postfix/gmail

postmap을 통해 조회 테이블을 만든다. 이 명령어를 사용하면 gmail.db 파일이 생성된다.

postmap /etc/postfix/gmail

3. CA certificate(인증서)를 생성

CA certificate를 생성할때 make 명령어를 사용하는데 CentOS 6.4 Minimal엔 설치되어 있지 않다.

yum install make

디렉토리 위치를 변경한다.

cd /etc/pki/tls/certs

키와 테스트 인증서를 하나의 파일에 생성한다.

make hostname.pem

아래와 같은 입력 커맨드가 뜨면 적당히 입력한다.

# 국가코드
Country Name (2 letter code) [GB]: kr

# 도이름
State or Province Name (full name) [Berkshire]: Gyeonggi-do

# 도시이름
Locality Name (eg, city) [Newbury]: Ansan-si 

# 회사이름
Organization Name (eg, company) [My Company Ltd]: test-uzuro 

# 부서명
Organizational Unit Name (eg, section) []: uzuro-devel

# 이름 또는 호스트이름
Common Name (eg, your name or your server’s hostname) []: test.uzuro.com

# 이메일주소
Email Address []: test@gmail.com 

생성된 hostname.pem 파일을 복사

cp /etc/pki/tls/certs/hostname.pem /etc/postfix/cacert.pem

4. 추가 설치

SASL 관련 에러가 나기에 설치했다.

yum install cyrus-sasl-plain

5. 서비스 재시작

service postfix restart

6. 메일 테스트

http://webdir.tistory.com/165을 참고하여 메일을 보내본다.

참고

리눅스에는 메일계정을 다른 메일주소나 다른 계정으로 매칭하는 기능을 하는 /etc/aliases가 있다. 이 파일의 최하단을 보면 아래와 같다.

# Person who should get root's mail
#root:          marc
root:            원하는 메일주소(ID@XXX.com)

root에 대한 aliases를 설정할 수 있는데 원하는 메일주소를 넣어두면 시스템에서 root유저에 보내는 메일(보안이나 긴급상황)들이 넣어둔 메일주소로 발송되니 여러모로 활용할 수 있다.

문제해결

메일 전송이 되지 않는 경우 메일로그를 살펴보고 에러를 찾아낸다.

cat /var/log/maillog

오류1

connect to smtp.gmail.com[2607:f8b0:400e:c02::6d]:587: Network is unreachable

위와 같은 에러는 inet_protocols = all일 경우 발생한다. 먼가 아직 ipv6 과의 연동이 불안전 한가 보다.

오류 해결

vi /etc/postfix/main.cf

  inet_protocols = ipv4

오류2

certificate verification failed for smtp.gmail.com[74.125.47.109]:587: untrusted issuer /C=US/O=Equifax/OU=Equifax Secure Certificate Authority

위와 같은 에러는 smtp_tls_CAfile 이 없거나 지정되지 않아서 그렇다.

오류 해결

vi /etc/postfix/main.cf

  smtp_tls_CAfile = /etc/postfix/cacert.pem

오류3

warning: SASL authentication failure: No worthy mechs found

위와 같은 에러가 발생할 경우 설치한다.

오류 해결

yum install cyrus-sasl-plain