본문 바로가기

잡다한 기술

[Ubuntu] 우분투 16.04에서 로컬 SMTP 만드는 방법



# 여는글


웹서비스를 사용할 경우 메일을 자주 이용한다.

필자도 메일을 사용해야되는 경우가 발생하여

로컬 SMTP를 이용해 메일 시스템을 구축하기로 마음 먹었다.


하지만 필자의 우분투는 16.04 를 사용하는데

다른 우분투들과 호환이 안되는 경우가 발생하였다.

때문에 많은 시행착오를 통해 여차저차해서 구현했는데,

어떻게 구현했는지 자세히 알아보자.



# 로컬 SMTP 셋팅


먼저 우분투에 apt-get을 한번 업데이트 하자.

(하지만 필자는 실제 업데이트시 오류가 발생하여 패스하였다.)


$  sudo apt-get update


기본적으로 깔아야할 패키지는 mailutils 하나인데 이것이 오지게 에러를 발생하여 고생했다.

하지만 오류를 무서워 하지 말고

아래 방법을 따라오면 잘 될것이라 확신한다.


그럼 mailutils를 설치하자


$ sudo apt-get install mailutils


자 그럼 mailutils가 깔릴 것이다.



mailutils를 까는 도중에 위와같은 Postfix Configuration이라는 창이 하나 뜨는데

이때 기본값인 Internet Site를 선택한다.



그러면 System mail name을 적으라고 한다.

그때 사용자의 SMTP(실제에서는 test@test02.com)으로 했다.

(아마 오류가 발생할 것이다. 하지만 무서워 하지 말고 다음으로 가자.)



이제 셋팅을 해주기 위해 아래 명령어를 통해 셋팅을 변경하자

(vim 또는 vi를 사용해도 됨)


$ sudo nano /etc/postfix/main.cf


자 그럼 main.cf에 기존 세팅중 아래와 같은 코드가 적혀 있을 것이다.


mailbox_size_limit = 0

recipient_delimiter = +

inet_interfaces = all


우리가 필요한 것은 inet_interfaces 이므로

아래와 같이 변경해 주도록 하자


inet_interfaces = all 

inet_interfaces = loopback-only


그리고 mydestination 를 찾아내 아래와 같이 변경해 준다.


mydestination = $myhostname, example.com, localhost.com, , localhost

mydestination = $myhostname, localhost.$mydomain, $mydomain


또한 myhostname을 찾아 아래와 같이 변경해 준다.


myhostname = test.8.8.8.8

myhostname = test.8.8.8.8.com



그 후 postfix를 다시 실행 시켜준다.


sudo systemctl restart postfix


이것으로 셋팅은 다 완료 되었다.



# 테스트


자 정상적으로 셋팅이 완료 되었으면 테스트를 해보자

아래와 같이 입력을 해 주는데 이메일은 본인 메일로 셋팅해준다.


$ echo "This is the body of the email" | mail -s "This is the subject line" your_email@address.com


그 후 실행을 하면 자신의 메일함으로 메일이 가 있을 것이다.

(보통 시간이 걸리므로 5분정도 느긋하게 기다려 주자.)

(만약 5분정도 기다려도 안온다면 sudo를 echo앞에 붙여 다시 실행시키거나 스팸함을 확인하자)





# mailutils 실전 활용


메일을 보낼때 위와같이 텍스트만 보내지 않을 것이다.

첨부파일도 보내며 보낸 이도 변경하고 싶을 것이다.

그럴 경우 아래와 같이 사용을 해보자


$ mail -A /home/test/test_report/test.csv -A /home/test/test_report/test2.csv -s "테스트 메일 입니다." -a "From:test@test.com" test2@test.com < /dev/null


자 자세히 분석해 보자


-A /home/test/test_report/test.csv

> 메일에 첨부파일을 첨부해야할 경우 위와같이 경로와 파일명을 적은 후

그 앞에 -A 를 붙여준다.

> 여러 파일을 보내고 싶은경우 그 뒤에 한번더 -A를 붙이고 파일 경로를 적어준다.


-s "테스트 메일 입니다."

> 메일의 제목을 설정하여 준다.


-a "From:test@test.com" test2@test.com

> "From:test@test.com"는 메일에 보낸이(송신자)를 설정하여준다. 

보낸이를 설정할 때는 꼭 "From:보낸이" 로 해줘야 한다.

> test2@test.com은 받는 이(수신자)를 설정하여주는 곳이다.


< /dev/null

> 메일의 내용을 적어준다.

> 만약 빈 값으로 보내길 원한다면 /dev/null 을 적어주면 된다.


자 이제 사용자가 입맛에 맞게 설정해 주면 된다.



# CSV로 메일을 보낼 때! 주의사항!


우분투나 리눅스에서 메일을 보낼 때 UTF-8로 보낼경우 윈도우 엑셀에서 한글 오류가 발생한다.

때문에 이것을 고쳐주기 위해선 EUC-KR로 변경해 줘야 한다.


또한 sh 파일로 메일을 보낼 때 제목이나 내용 부분이 깨질수 있다. 

이부분 또한 EUC-KR로 변경해 주면

한글이 꺠지지 않는다.


iconv -c -f 기존 인코딩 -t 새로운 인코딩 원본 파일명 > 새로운 파일명

iconv -c -f euc-kr -t utf-8 원본 파일명 > 새로운 파일명

iconv -c -f euc-kr -t utf-8 ko_add_keyword_template.csv > aa.csv



# 마무리


위 포스트는 제가 직접 제작한 것 입니다.

그렇기 때문에 틀린점이나 설명이 엉성한 점이 존재할 수 있습니다.

만약 틀린점이나 설명이 엉성한 부분이 존재하면 댓글로 알려주세요.

빠른 처리 하도록 하겠습니다.


티스토리 앱으로는 댓글 이용이 불가능 하므로 웹 브라우저로 봐 주세요

(URL : http://junprogramer.tistory.com/)


읽어주셔서 감사합니다.