내 노트북에서는 주간 작업을 실행하기 위해 크론을 설정했습니다. 제보할 사항이 있으면 이메일을 받고 싶습니다. 지금 나는 KMail을 MUA로 사용하고 있는데, 이는 Maildir 디렉토리에서 메일을 읽을 수 있습니다 ~/.local/share/local-mail
. 그래서 나는 로컬 메일이 이 폴더(Maildir 구조를 사용하여)로 전달되기를 원합니다.
sendmail
( echo "$REPORT" | mail -s "$SUBJECT" "$ME"
사용할 수 있도록) 인터페이스가 있는 매우 간단한 프로그램이 이미 존재했으면 좋겠습니다 . exim을 설치하거나 원격 메일 서버에 메일을 전달하는 것은 과도한 것으로 간주됩니다.
질문서버에서 모든 메일을 전달하는 가장 쉬운 방법은 무엇입니까?대상이 원격 전달인 것 같습니다. 제 요구 사항에 맞지 않습니다(현지 배송이 필요합니다). 이것오래된 젠투 스레드Perl로 오래된 스크립트를 작성하게 되었습니다. 확실히 세심하게 계획된 매우 간단한 프로그램이 있습니까?
어떤 제안이 있으십니까? 저는 아치 리눅스를 사용하고 있습니다.
답변1
기존 애플릿을 찾을 수 없었기 때문에 직접 작성하기로 결정했습니다. 처음에 나는 다음을 생각해 냈습니다.
#!/bin/bash
# Simple sendmail
# filename per spec at http://cr.yp.to/proto/maildir.html
rand=$((RANDOM % 1000))
msgname=$(date +%s).P$$R$rand.$(hostname | tr '/:' '\057\072')
# Safety measure: do not overwrite existing mail
set -o noclobber
cat > ~peter/".local/share/local-mail/inbox/new/$msgname"
스크립트를 실행하는 사용자가 "peter"가 아닌 경우에는 작동합니다. 이 아이디어의 후속작은 "작은" C 프로그램입니다.펨토메일. 읽어보기에서:
femtomail - Maildir을 지원하는 최소 MDA
femtomail은 로컬 메일을 위한 최소 메일 배달 에이전트(MDA)입니다. 메일은 표준 입력에서 받아들여지고 사용자의 Maildir 상자에 저장됩니다. 이 소프트웨어는 단일 사용자 컴퓨터용으로 제작되었습니다.
순간 이동, 데몬, 보낸 사람 확인 등은 아직 구현되지 않았으며 복잡성으로 인해 구현되지 않을 것입니다. femtomail이 작성된 이유는 이메일 소프트웨어가 없어서가 아니라 기존 소프트웨어가 간단한 작업을 하기에는 너무 크기 때문이었습니다.로컬 사용자에게 cron 이메일 보내기.
펨토메일의 작업 흐름:
- 프로세스 사용자 및 그룹을 변경합니다.
- 새 파일 만들기고유한 파일 이름메일 디렉토리에 있습니다.
Received
파일에 헤더를 씁니다 .- 표준 입력의 데이터를 파일로 전달합니다.
- 출구.
소스 코드와 설치 지침은 다음에서 확인할 수 있습니다.https://git.lekensteyn.nl/femtomail/.
답변2
승인된 답변을 바탕으로 공식 Dovecot CE 저장소의 Docker 이미지를 사용하여 작은 솔루션을 만들었습니다.https://hub.docker.com/r/dovecot/dovecot, 공유하고 싶습니다.
컨테이너를 실행합니다.
docker run --name dovecot -d dovecot/dovecot
sudo를 설치하세요. 비둘기장 이미지에는 포함되어 있지 않지만 스크립트에서는 필요합니다.
apt-get update && apt-get -y install sudo
메일 디렉터리를 설정합니다.
/var/mail
사용자의 홈 디렉터리에서 이 작업을 수행하는 것이 더 유연하고 덜 번거롭다고 생각합니다 .mkdir /var/mail/vmail chown vmail /var/mail/vmail
vmail 그룹의 구성원이어야 하는 사서함 사용자를 만듭니다.
useradd -g vmail theresa
필요한 경우 언제든지 더 많은 사용자를 추가할 수 있습니다.
Dovecot에게 메일이 어디에 있는지 알려주세요. 이렇게 하려면
mail_location
다음과 같이 변경해야 합니다/etc/dovecot/dovecot.conf
.mail_location=maildir:/var/mail/vmail/%u
나중에 Dovecot을 다시 시작해야 하며, Docker 컨테이너를 다시 시작하면 됩니다.
docker restart dovecot
/usr/local/storemail.sh
dovecot 컨테이너에 다음 bash 스크립트를 만듭니다.#!/bin/bash # Store mail in maildir # Based on https://unix.stackexchange.com/a/82367/215688 # Simply stores an email to the user mail directory USER=$1 MAIL_LOCATION="/var/mail/vmail/$USER" # filename per spec at http://cr.yp.to/proto/maildir.html rand=$((RANDOM % 1000)) msgname=$(date +%s).P$$R$rand.$(hostname | tr '/:' '\057\072') # Just in case the user dir has not been created yet sudo -u vmail mkdir -p "$MAIL_LOCATION/new" # Safety measure: do not overwrite existing mail set -o noclobber # now store the email there sudo -u vmail cat > "$MAIL_LOCATION/new/$msgname"
실행 가능하게 만드는 것을 잊지 마세요:
chmod +x /usr/local/storemail.sh
그게 다야.
이제 이 스크립트를 사용하여 새 메시지를 저장할 수 있습니다. 유일한 매개변수는 사용자 이름과 이메일이며, 표준 입력에서 제공되어야 합니다.
storemail.sh theresa <testmail.eml
아니면 용기 외부에서 사용하세요
docker exec -i dovecot <testmail.eml storemail.sh theresa
또는 SSH를 통한 원격 시스템에서도 가능
ssh docker-machine.local <testmail.eml docker exec -i dovecot storemail.sh theresa
준비 단계를 자동화하려면 사용자 지정 dockerfile을 만드는 것이 좋습니다.