전자메일을 바깥으로 던져주는 초경량 도우미 프로그램 nullmailer 소개

리눅스/오픈소스 활동가들에겐 익숙한 주제이지만, 이제막 우분투를 시작했거나 메일링리스트를 한번도 접해보지 못했거나
오픈소스 프로젝트등에 버그/패치코드를 한번도 보내보지 못한 사용자분들에겐 엄청 낯설고 어려운 주제입니다.

그냥 우리가 Gmail 웹으로 로그인해서 메일을 받고 보내는건 누구나 합니다. 다 할 수 있습니다. 70-90 할머니/할아버지 제외하곤요.
그런데… 자신의 노트북/크롬북에 있는… 시스템정보를 외부로 전자메일을 통하여 전송한다고 가정해봅니다. 어떻게할까요?

보통 사용자는 이것을 할려면 시끕합니다… 도움문서를 최소한 3일 이상은 들여다보고 테스트 메일을 한 50번은 던져봐야 알 수 있습니다.

… 전자메일이 그래서 어렵습니다 …

여기 우분투한국 위키에도 소개된 ssmtp 도 그런역할을 해줍니다. 저도 한동안 ssmtp 를 써왔습니다.
nullmailer 도 ssmtp 와 같은 역할을 합니다. 하지만 문파가 다릅니다. ssmtp 는 Sendmail 문파. nullmailer 는 qmail 문파에 가깝습니다.

ssmtp 는 -C 스위치를 이용하여 여러 복수개의 계정을 지원합니다. 헌데 nullmailer 는 그런게 없어요. 오직 한 계정만 허용합니다.
그래서 ssmtp의 -C 스위치같은 효과를 주는 파이썬 코드를 직접 짜봤어요. 예제 코드 첨부할께요,

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import subprocess
import sys

"""
(bionic)soyeomul@localhost:~$ ls -l /etc/nullmailer
total 12
-rw-r--r--. 1 root root  30 12월  3 21:51 adminaddr
-rw-r--r--. 1 root root  23 12월  3 21:51 defaultdomain
lrwxrwxrwx. 1 root root  24 12월  2 23:43 nm.py -> /home/soyeomul/bin/nm.py
-rw-rw----. 1 mail gnus 100 12월  6 20:55 remotes
"""

cmd_default = "echo 'smtp.gmail.com smtp --port=587 --starttls \
--user=soyeomul@doraji.xyz --pass=SECRET' > /etc/nullmailer/remotes"
cmd_daum = "echo 'smtp.daum.net smtp --port=465 --auth-login --tls \
--user=byunghee.hwang@daum.net --pass=SECRET' > /etc/nullmailer/remotes"
cmd_gmx = "echo 'mail.gmx.com smtp --port=587 --starttls \
--user=soyeomul@gmx.com --pass=SECRET' > /etc/nullmailer/remotes"
cmd_kakao = "echo 'smtp.kakao.com smtp --port=465 --auth-login --tls \
--user=soyeomul@kakao.com --pass=SECRET' > /etc/nullmailer/remotes"
cmd_vladivostok = "echo 'smtp.yandex.com smtp --port=465 --auth-login --tls \
--user=soyeomul@vladivostok.yw.doraji.xyz --pass=SECRET' > /etc/nullmailer/remotes"

cmd_nullmailer = "echo SECRET | sudo -S service nullmailer restart"

if len(sys.argv) < 2 or sys.argv[1] == "--default":
    subprocess.call(cmd_default, shell=True)
elif sys.argv[1] == "--daum":
    subprocess.call(cmd_daum, shell=True)
elif sys.argv[1] == "--gmx":
    subprocess.call(cmd_gmx, shell=True)
elif sys.argv[1] == "--kakao":
    subprocess.call(cmd_kakao, shell=True)
elif sys.argv[1] == "--vladivostok":
    subprocess.call(cmd_vladivostok, shell=True)

subprocess.call(cmd_nullmailer, shell=True)

# 편집: Emacs 26.3 (Ubuntu 18.04)
# 마지막갱신: 2019년 12월 7일

*** 위의 예제코드에서 SECRET비밀번호입니다 ***
*** 또한 /etc/nullmailer/remotes 파일에 관한 접근 퍼미션에 대하여도 정말 진지하게 고민해주셔야 합니다 ***

메일을 보내기전에 /etc/nullmailer/remotes 파일이 보내는 전자메일주소에 맞게 서버주소/포트번호/통신규약/사용자계정/비밀번호 등등이
자동설정됩니다.

이제 이것을 Emacs Gnus [2] 같은것에 연동하려면 `shell-command’ 문법을 써서 적용할 수 있습니다.
테스트 성공 메시지 [1] 첨부할께요~

[1] https://gitlab.com/soyeomul/Gnus/raw/master/ss/20191207004.eml
[2] dot.gnus.el · 9f5992427707a681f6680d16e50f5835ac899180 · ^고맙습니다 _布德天下_ 감사합니다_^))// / Gnus · GitLab

[우분투 18.04 파여폭스 나비에서 작성했씁니다]
[우분투 18.04 파여폭스 나비에서 여러차례 오타를 보완했습니다]