커맨드 라인에서 이메일을 보내는 방법?


28

명령 행 또는 스크립트에서 이메일을 보내는 방법은 무엇입니까? 수신자와 메시지를 전달하여 프로그래밍 방식으로 스크립트를 실행할 수 있기를 원합니다.


프로그램을 작성하는 경우 많은 언어에 이메일을 다루는 라이브러리가 있습니다.
user151019

답변:


21

mail -s subject someone@example.com 메시지를 입력 Ctrl+D하고을 눌러 완료


11
이메일을 보낼 위치를 알려주도록 시스템을 구성하지 않았다면 실제로 이메일을 보내지 않을 것입니다. Mac에 쌓여있을뿐입니다.
TJ Luoma

15
-1 :이 답변은 불완전합니다. @TJLuoma가 지적한 것처럼이 명령을 실행하기 전에 시스템을 구성하지 않으면이 명령이 작동하지 않습니다.
melvynkim

1
TJ Luoma와 melvkim이 잘못되었습니다. 기본 OS X 시스템은 별도의 구성 없이도 이메일을 보낼 수 있습니다. OS X 시스템은 자체 SMTP 서버 역할을하여 대상 도메인의 DNS MX를 조회하고 메일을 보냅니다.
JohnEDee

2
@patrix, 맞습니다. 로그인 한 계정의 긴 사용자 이름과 Mac의 자체 생성 된 ".local"주소를 사용하여 "보낸 사람"을 형성합니다. 쉘 스크립트 프로세스에서 나와 직원에게 알림 이메일을 보내는 데 항상 사용합니다. TJ Luoma와 melvkim은 "작동하지 않을 것"과 "실제로 이메일을 보내지 않는다"고 말했지만 둘 다 틀 렸습니다.
JohnEDee

1
@RamarajT, 예. echo 명령의 출력을 메일로 파이프 할 수 있으며 Cmd-D가 필요하지 않습니다. 예를 들면 다음과 같습니다 echo This will be the body of the email | mail -s "This is the Subject" destination@example.com
JohnEDee

26

내가 아는 두 가지 프로그램이 있는데 명령 줄에서 이메일을 보내도록 Mac을 쉽게 구성 할 수 있습니다.

나는 둘 다에 대한 하우투를 작성했다.

두 가지 중에서 제안 msmtp합니다.

구성이 복잡하여 여기에 모든 단계를 복제해야할지 확실하지 않지만 Homebrew 를 사용하는 경우 다음을 사용 하여 msmtp를 설치할 수 있다고 언급합니다.

brew install msmtp --with-macosx-keyring

그런 다음 나머지는 관련 구성 파일을 설정하기 만하면됩니다.

첫 번째는 /usr/local/etc/msmtprc

# Begin msmtprc
# Set default values for all following accounts.
defaults
tls on
logfile ~/.msmtp.log

# A first gmail address
account example@gmail.com
host smtp.gmail.com
port 587
protocol smtp
auth on
from example@gmail.com
user example@gmail.com
tls on
tls_starttls on

# this next line is crucial: you have to point to the correct security certificate for GMail.
# If this doesn't work, check the mstmp documentation
# at http://msmtp.sourceforge.net/documentation.html for help
#
# This next line should all be on one long line:
tls_trust_file /path/to/Thawte Roots/Thawte SSLWeb Server Roots/thawte Premium Server CA/Thawte Premium Server CA.pem

# Set a default account
# You need to set a default account for Mail
account default : example@gmail.com

# end msmtprc

그 주 tls_trust_file라인은 당신이 다운로드에서 인증서를 설치 한 곳을 가리켜 야 https://www.thawte.com/roots/index.html .

~/Dropbox/Thawte Roots모든 Mac에 사용할 수 있도록 광산을 넣었습니다 .

그런 다음 ~/.mailrcmsmtp 바이너리가 어디에 있는지 알려주 는 파일 이 필요합니다 . 당신이 brew그것을 사용 /usr/local/bin/msmtp하면 파일은 다음과 같이 보일 것입니다 :

set sendmail="/usr/local/bin/msmtp"

마지막이지만 중요한 단계는 키 체인에 msmtp가 예상하는 형식으로 정보를 정확하게 작성하는 것입니다.

나는 그것이 대부분의 세부 사항을 다룬다 고 생각합니다. 좀 더 구체적인 내용을 원하면 http://www.tuaw.com/2010/05/04/msmtp-a-free-tool-to-send-email-from-terminal/을 참조 하십시오 .


위의 스크립트에서 내 예제는 Gmail을 사용한다고 가정하지만 다른 서버에서도 사용할 수 있습니다. example@gmail.comGmail 또는 Google Apps 이메일 주소로 변경하십시오 .
TJ Luoma 2019

마지막으로 pki.google.com/roots.pem에 있는 Google Roots를 사용하여이 기능을 작동시킬 수있었습니다 . 신뢰 파일 및 Gmail에 문제가있는 경우 차단이 해제 될 수 있습니다.
codewise

구성 (msmtprc) 파일의 위치에 문제가있는 경우 macOS 10.13.3에서 Homebrew로 설치 한 후 msmtp가 내 홈 디렉토리에서 파일을 찾았습니다. ~/.msmtprc
codewise

15

메일을 보내는 가장 기본적인 방법은 공급자 / 네트워크의 smtp 서버와의 텔넷 세션을 통하는 것입니다. 서버에 접속 한 후 그리고 모든 명령 후에 서버는 "250 OK"와 같은 명령을 수락하거나 오류 메시지가없는 경우 응답합니다.

자세한 내용은 RFC2821-Simple Mail Transfer Protocol, Google을 참조하십시오. 이 기본 방법은 왜 메일이 잘못 전송되는지 테스트하는 데 유용하지만 완전한 증거를 작성하는 것은 상당히 복잡하다고 생각합니다.

먼저 터미널을 시작하여 컴퓨터에서 명령 줄 인터페이스를 얻습니다. 그런 다음 하나씩 다음 명령을 계속하십시오.

공급자 / 네트워크의 SMTP 서버 포트 25에 대한 텔넷 세션 열기

telnet name_or_ip_of_smtp_server 25

abc.com과 같이 hello와 공급자 / 네트워크의 인터넷 이름을 말하십시오.

EHLO name_of_your_network

from = 반환 주소가 필요하고 <및>는 명령의 일부입니다.

MAIL FROM:<your_email_adress>

하나 이상의 대상을 지정하면 <및>는 명령의 일부입니다

RCPT TO:<destination_email_address>
RCPT TO:<second_destination_email_address>
RCPT TO:<etc_destination_email_address>

서버에게 데이터 전송을 시작하라고 알리십시오.

DATA

이제 서버는 메일 전송을 시작하고 데이터 모드로 들어갈 수 있다고 응답해야합니다.

your data
more data
etc

이제 줄에 문자로만 점으로 데이터를 마무리하십시오.

.

서버가 명령 모드로 돌아가서 종료 할 수 있습니다

QUIT

13

이것은 나를 위해 일했으며, 라이온을 염두에두고 작성되었지만 Mountain Lion에서는 작동합니다. 그러나 이것은 Gmail을 사용하고 있으므로 사용하지 않는 경우 ...

아무것도 다운로드 할 필요가 없습니다! (단지 Gmail 계정을 설정하십시오)

http://www.anujgakhar.com/2011/12/09/using-macosx-lion-command-line-mail-with-gmail-as-smtp/

Gmail SMTP 용 Postfix 구성 파일 편집 /etc/postfix/main.cf

sudo vim /etc/postfix/main.cf

아래에 주석 처리 된 릴레이 호스트를 추가하십시오.

relayhost = [smtp.gmail.com]:587
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_security_options = noanonymous
smtp_use_tls = yes
smtp_sasl_mechanism_filter = plain

아직 존재하지 않는 경우 sasl_password 생성

sudo vim /etc/postfix/sasl_passwd

다음을 입력하십시오 :-

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

다음 명령을 실행하십시오

sudo chmod 600 /etc/postfix/sasl_passwd
sudo postmap /etc/postfix/sasl_passwd
sudo launchctl stop org.postfix.master
sudo launchctl start org.postfix.master

그리고 너는 끝났다.…
이제 명령 줄 내에서 이메일을 보낼 수 있어야합니다. 예를 들어 디렉토리의 내용을 이메일 주소로 트리로 보내기

tree /var/www/somefolder | mail -s "contents" your@yourdomain.com

추신 : 나는 이것을 터미널이나 스크립트에서 수동으로 실행할 때 훌륭하게 작동했습니다. 그러나이 시점에서 스크립트를 시작할 때 메일이 전송되지 않는 문제가 발생합니다. 시작된 작업 설정에 문제가있는 것 같습니다.
Jonny

나는 그것을 작동시켰다. 참조 apple.stackexchange.com/questions/92406/...
조니

+1 추가해 주셔서 감사합니다. 정말 도와주었습니다. 실제로 필요한 것은 main.conf의 relayhost 항목 (LAN의 자체 SMTP 서버)입니다.
boot13

3
위의 내용이 최신이 아닐 수 있습니다. stackoverflow.com/a/26451135/197789 에 따라 "smtp_sasl_mechanism_filter = plain"을 추가 해야 작동했습니다. 그렇지 않으면 "일반적인 오류"오류가 발생했습니다.
Von


0

명령 행에서 이메일을 보내도록 OS X를 활성화하고 구성 하는 postfixconf 를 확인하고 싶을 수도 있습니다 (입력 사용).

이 웹은 여기 , 여기여기 에 잘 설명되어있는 접미사 구성을 기반으로합니다 .


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.