Linux Shell 스크립트에서 이메일을 보내고 싶습니다. 이 작업을 수행하는 표준 명령은 무엇이며 특수 서버 이름을 설정해야합니까?
Linux Shell 스크립트에서 이메일을 보내고 싶습니다. 이 작업을 수행하는 표준 명령은 무엇이며 특수 서버 이름을 설정해야합니까?
답변:
서버가 잘 구성되어있는 경우 (예 : MTA가 실행중인 경우) mail 명령을 사용할 수 있습니다.
예를 들어, 파일의 내용을 보내려면 다음과 같이 할 수 있습니다.
$ cat /path/to/file | mail -s "your subject" your@email.com
man mail
상세 사항은.
sudo apt-get install mailutils
선택 인터넷 사이트를 : 메일은 SMTP를 사용해 직접 보내고 받게됩니다. .
당신이 bash는 깨끗하고 간단한 방법을 원하고, 당신이 사용하지 않을 경우 cat
, echo
등, 가장 간단한 방법은 다음과 같습니다
mail -s "subject here" email@address.com <<< "message"
<<<
표준 입력을 리디렉션하는 데 사용됩니다. 오랫동안 bash의 일부였습니다.
cat << END
...END | mail -s "subject" test@example.com
exim과 ssmtp가 모두 실행 중이면 문제가 발생할 수 있습니다. 따라서 간단한 MTA를 실행하고 간단한 smtp 클라이언트로 insistance에 대한 전자 메일 알림을 보내려면 exim 또는 postfix 와 같이 최종적으로 사전 설치된 MTA를 제거해야합니다. 먼저 먼저 제거하고 ssmtp를 다시 설치해야합니다.
그런 다음 2 개의 파일 (revaliases 및 ssmtp.conf) 만 구성하는 것은 매우 간단합니다.-ssmtp doc-를 참조하십시오. bash 또는 bourne 스크립트의 사용법은 다음과 같습니다.
#!/bin/sh
SUBJECT=$1
RECEIVER=$2
TEXT=$3
SERVER_NAME=$HOSTNAME
SENDER=$(whoami)
USER="noreply"
[[ -z $1 ]] && SUBJECT="Notification from $SENDER on server $SERVER_NAME"
[[ -z $2 ]] && RECEIVER="another_configured_email_address"
[[ -z $3 ]] && TEXT="no text content"
MAIL_TXT="Subject: $SUBJECT\nFrom: $SENDER\nTo: $RECEIVER\n\n$TEXT"
echo -e $MAIL_TXT | sendmail -t
exit $?
방화벽 출력을 smtp 포트 (25)로 여는 것을 잊지 마십시오.
bash 스크립트의 또 다른 옵션 :
mailbody="Testmail via bash script"
echo "From: info@myserver.test" > /tmp/mailtest
echo "To: john@mywebsite.test" >> /tmp/mailtest
echo "Subject: Mailtest subject" >> /tmp/mailtest
echo "" >> /tmp/mailtest
echo $mailbody >> /tmp/mailtest
cat /tmp/mailtest | /usr/sbin/sendmail -t
/tmp/mailtest
이 스크립트를 사용할 때마다 파일 을 덮어 씁니다.일반적으로 mail
명령을 사용하여 로컬 MTA를 사용하여 메시지를 보낼 수 있습니다 (SMTP를 사용하여 대상에 메시지를 전달하거나 ISP와 같은 더 강력한 SMTP 서버로 전달). 로컬 MTA가없는 경우 (유닉스 계열 시스템에서이를 생략하는 것은 약간 드문 경우지만) ssmtp 와 같은 최소한의 MTA를 사용할 수 있습니다 .
ssmtp
구성하기가 매우 쉽습니다. 기본적으로 공급자의 SMTP 서버가 어디에 있는지 지정하기 만하면됩니다.
# The place where the mail goes. The actual machine name is required
# no MX records are consulted. Commonly mailhosts are named mail.domain.com
# The example will fit if you are in domain.com and you mailhub is so named.
mailhub=mail
또 다른 옵션은 SMTP 서버에 직접 연결하고 Smtp-Auth-Email-Script , smtp-cli , SendEmail 등과 같은 메시지를 게시하는 수많은 스크립트 중 하나를 사용하는 것입니다 .
일부 smtp 서버를 사용하고 싶다면 다음을 수행 할 수 있습니다.
export SUBJECT=some_subject
export smtp=somehost:someport
export EMAIL=someaccount@somedomain
echo "some message" | mailx -s "$SUBJECT" "$EMAIL"
변경 somehost
, someport
및 someaccount@somedomain
실제 값에 당신이 사용할 것. 이 예에서는 암호화 및 인증이 수행되지 않습니다.
mailx
설치되어 있지?
mail
명령 (누가 ;-) 짐작했을 것이라고한다. 쉘을 열고 입력 man mail
하여 사용 mail
가능한 모든 옵션 에 대한 명령에 대한 매뉴얼 페이지를 가져 오십시오 .
MTA도 필요하지 않습니다. SMTP 프로토콜은 SMTP 서버에 직접 쓸 수있을만큼 간단합니다. OpenSSL 패키지가 설치된 경우 SSL / TLS를 통해 통신 할 수도 있습니다. 이 게시물 확인 : https://33hops.com/send-email-from-bash-shell.html
위의 내용은 바로 사용할 수있는 텍스트 / html 이메일을 보내는 방법에 대한 예입니다. 첨부 파일을 추가하려는 경우 작업이 좀 더 복잡해질 수 있습니다. 바이너리 파일을 base64로 인코딩하고 경계 사이에 삽입해야합니다. 이것은 조사를 시작하기에 좋은 곳입니다 : http://forums.codeguru.com/showthread.php?418377-Send-Email-w-attachments-using-SMTP
Linux에서는 메일 유틸리티를 사용하여 "-a"옵션으로 첨부 파일을 보낼 수 있습니다. 옵션에 대해 읽으려면 man 페이지를 살펴보십시오. 예를 들어 다음 코드는 첨부 파일을 보냅니다.
mail -s "THIS IS SUBJECT"-a attachment.txt name@domain.com <<< "Hi Buddy, Please find failure reports."
POSTFIX 사용
1 : 소프트웨어 설치
Debian 및 Ubuntu :
apt-get update && apt-get install postfix mailutils
OpenSUSE :
zypper update && zypper install postfix mailx cyrus-sasl
페도라 :
dnf update && dnf install postfix mailx
CentOS :
yum update && yum install postfix mailx cyrus-sasl cyrus-sasl-plain
아치 리눅스 :
pacman -Sy postfix mailutils
FreeBSD :
portsnap fetch extract update
cd /usr/ports/mail/postfix
make config
구성에서 SASL 지원 선택
make install clean
pkg install mailx
2. Gmail 구성
/ etc / postfix. 암호 파일을 만들거나 편집합니다.
vim /etc/postfix/sasl_passwd
vim u를 사용하는 im은 nano, cat .....과 같은 파일 편집기를 사용할 수 있습니다.
> Ubuntu, Fedora, CentOS, Debian, OpenSUSE, Arch Linux :
이거 추가 해봐
여기서 user replace with your mailname and password is your gmail password
[smtp.gmail.com]:587 user@gmail.com:password
파일을 저장하고 닫은 다음 루트로만 액세스 할 수 있도록합니다. 비밀번호가 포함 된 민감한 콘텐츠 이기 때문입니다.
chmod 600 /usr/local/etc/postfix/sasl_passwd
> FreeBSD :
/ usr / local / etc / postfix 디렉토리.
vim /usr/local/etc/postfix/sasl_passwd
다음 행을 추가하십시오.
[smtp.gmail.com]:587 user@gmail.com:password
저장하고 루트로만 액세스 할 수 있도록합니다.
chmod 600 /usr/local/etc/postfix/sasl_passwd
3. Postfix 구성
구성 파일 main.cf
Postfix에서 설정해야하는 6 가지 매개 변수
Ubuntu, Arch Linux, Debian :
편집하다
vim /etc/postfix/main.cf
다음 값을 수정하십시오.
relayhost = [smtp.gmail.com]:587
smtp_use_tls = yes
smtp_sasl_auth_enable = yes
smtp_sasl_security_options =
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_tls_CAfile = /etc/ssl/certs/ca-certificates.crt
smtp_sasl_security_options 는 Gmail과 호환되지 않는 보안 옵션 이 사용 되지 않도록 구성 에서 empty 로 설정 됩니다.
저장하고 닫습니다
처럼
OpenSUSE :
vim /etc/postfix/main.cf
수정
relayhost = [smtp.gmail.com]:587
smtp_use_tls = yes
smtp_sasl_auth_enable = yes
smtp_sasl_security_options =
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_tls_CAfile = /etc/ssl/ca-bundle.pem
또한 master.cf 파일의 구성이 필요합니다.
수정 :
vim /etc/postfix/master.cf
이 줄의 주석을 제거하여 (# 제거)
#tlsmgr unix - - n 1000? 1 tlsmg
저장하고 닫습니다
Fedora, CentOS :
vim /etc/postfix/main.cf
수정
relayhost = [smtp.gmail.com]:587
smtp_use_tls = yes
smtp_sasl_auth_enable = yes
smtp_sasl_security_options =
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_tls_CAfile = /etc/ssl/certs/ca-bundle.crt
FreeBSD :
vim /usr/local/etc/postfix/main.cf
수정 :
relayhost = [smtp.gmail.com]:587
smtp_use_tls = yes
smtp_sasl_auth_enable = yes
smtp_sasl_security_options =
smtp_sasl_password_maps = hash:/usr/local/etc/postfix/sasl_passwd
smtp_tls_CAfile = /etc/mail/certs/cacert.pem
이것을 저장하고 닫습니다
4. 프로세스 암호 파일 :
Ubuntu, Fedora, CentOS, OpenSUSE, Arch Linux, Debian :
postmap /etc/postfix/sasl_passwd
대한 FreeBSD의
postmap /usr/local/etc/postfix/sasl_passwd
4.1) 접미사 다시 시작
Ubuntu, Fedora, CentOS, OpenSUSE, Arch Linux, Debian :
systemctl restart postfix.service
대한 FreeBSD의 :
service postfix onestart
nano /etc/rc.conf
더하다
postfix_enable=YES
저장 후 실행하여 시작
service postfix start
5. 아래 링크의 도움말을 사용 하여 Gmail에서 "보안 수준이 낮은 앱"을 활성화 합니다.
https://support.google.com/accounts/answer/6010255
6. 테스트 이메일 보내기
mail -s "subject" recever@domain.com
엔터 키를 치시오
당신의 소원으로 메일의 본문을 추가 Enter 키를 누릅니다 다음을 누릅니다 CTRL + D를 적절한 종료를
작동하지 않는 경우 모든 단계를 다시 확인하고 Gmail에서 "보안 수준이 낮은 앱" 을 활성화했는지 확인 하십시오.
u가 수정하면 postfix를 다시 시작하십시오.
셸 스크립트의 경우 .sh 파일을 만들고 요구 사항으로 6 단계 명령을 추가합니다.
예를 들어 단지 샘플
#!/bin/bash
REALVALUE=$(df / | grep / | awk '{ print $5}' | sed 's/%//g')
THRESHOLD=80
if [ "$REALVALUE" -gt "$THRESHOLD" ] ; then
mail -s 'Disk Space Alert' mailid@domainname.com << EOF
Your root partition remaining free space is critically low. Used: $REALVALUE%
EOF
fi
이 스크립트는 디스크 사용량이 THRESHOLD 변수에 지정된 백분율 (여기서는 80 %) 이상으로 증가하면 이메일을 보냅니다.
'email'또는 'emailx'명령을 사용할 수 있습니다.
(1) $ vim /etc/mail.rc # 또는 # vim /etc/nail.rc
set from = xxx@xxx.com #
set smtp = smtp.exmail.gmail.com #gmail's smtp server
set smtp-auth-user = xxx@xxx.com #sender's email address
set smtp-auth-password = xxxxxxx #get from gmail, not your email account passwd
set smtp-auth=login
(2) $ echo "Pls는 사용하지 않는 주제를 제거하는 것을 잊지 마십시오!" | mail -s "waste topic"-a a.txt developer@xxx.com #send to group user 'developer@xxxx.com'