Gmail을 사용하여 명령 줄을 통해 한 줄 메일을 보내는 가장 간단한 방법은 무엇입니까?


32

Raspbian 및 Ubunntu 16.04 LTS를 사용하려면 일반 Linux 솔루션이 필요합니다.

요구 사항은 간단합니다.

명령 줄에서 한 줄 전자 메일 메시지를 보내는 방법이 필요합니다.

rpi3abc@gmail.com 주소와 함께이 특정 Rpi3에 대해서만 Gmail 계정을 설정했습니다. 2FA는 없습니다.

이제 사용자 개입없이 어느 곳에서나 (cron 포함) 한 줄 메일 메시지를 보낼 수 있어야합니다.


또한 텍스트 파일을 보낼 수 있기를 바랍니다. 기본적으로의 모든 것 stdin.


이 특정 주소 인 rpi3abc@gmail.com에서 메시지를 보내시겠습니까, 아니면 your_username @ localhost에서 메시지를 보내시겠습니까?
John Smith

rpi3abc@gmail.com에서 제공되므로 내 컴퓨터가 나와 통신하고 있음을 알고 있습니다. 나는 주로 크론 작업에서 사용합니다.
SDsolar

답변:


33

Gmail을 통해 한 줄 메시지를 보내는 가장 간단한 대답은 ssmtp를 사용하는 것입니다.


다음 명령으로 설치하십시오 :

sudo apt-get update
sudo apt-get install ssmtp

/etc/ssmtp/ssmtp.conf다음과 같이 편집 하십시오.

root=rpi3abc@gmail.com
mailhub=smtp.gmail.com:465
FromLineOverride=YES
AuthUser=rpi3abc@gmail.com
AuthPass=testing123
UseTLS=YES

다음과 같이 한 줄짜리 라이너를 보내십시오.

echo "Testing...1...2...3" | ssmtp myusername@gmail.com

또는

printf "Subject: Test\n\nTesting...1...2...3" | ssmtp myusername@gmail.com

그런 다음 * nix의 경우 몇 초만에 프롬프트가 표시됩니다.

myusername@gmail.com 계정을 확인하십시오.


파일을 보낼 때도 다음과 같이 작동합니다.

cat program.py | ssmtp myotherusername@yahoo.com

그리고 프로그램은 사서함에 나타납니다

파일이 텍스트 파일 인 경우 첫 번째 줄은 다음과 같습니다. Subject: xxxxxx

이것은 다양한 크론 작업과 함께 사용하여 내용을 나타내는 제목 줄과 함께 데이터를 보낼 수 있습니다.


이것은 stdin을 통해 ssmtp로 파이프되는 메시지를 준비하는 모든 작업에서 작동합니다.


이러한 파일을 다른 사용자로부터 보호하는 등의 자세한 내용은이 문서를 참조하십시오.

Raspberry Pi Command Line에서 이메일 보내기


필요한 경우 형식이 지정된 메시지 파일에서 변경 될 수 Rui있는 FROM:주소를 잠그는 방법 에 대해 게시 된 답변을 아래 에서 확인하십시오.


이제 만 같은 방식으로 SMS를 보내는 방법을 알 수 있다면.


1
또한 ssmtpVM에서도 매우 가볍습니다. +1
Rui F Ribeiro

1
왜 파이썬에서 sendmail API를 사용하여 직접 보내지 않겠습니까?
Rui F Ribeiro

이 단계를 한 단계 더 발전시키기 위해 이미지 파일을 첨부 파일로 포함하기위한 매우 간단한 지침이 있습니다 : unix.stackexchange.com/questions/381131/…
SDsolar

Rui의 질문에 대답하기 위해 : sendmailMTA (Mail Transport Agent)만으로는 컴퓨터 외부와 통신 할 수 없습니다. 기본적으로 Unixen은 의도적으로 다중 사용자이므로 sendmail동일한 상자에 있지만 외부가 아닌 다른 사용자에게 메시지를 보냅니다. ssmtpGmail에 대해 구성하는 것이 가장 간단하다고 생각되는 MTA입니다.
SDsolar

1
postix를 설정하려고 영원히 노력했습니다. 이 글을 읽는 사람에게 하나의 메모, conf는 오타가 있으며, 루트 매개 변수는 gmail이 아닌 gmail.com이어야합니다.
qodeninja

9

ssmtp많은 Sendmail 래퍼 중 하나입니다. 이들 모두는 표준 입력에 대한 메시지와 선택적으로 주소 목록을 명령 행 인수로 승인하며, 모두 sendmail기존 Sendmail 명령 행 API의 기본 기능을 구현 하는 바이너리를 제공합니다 . 그러나 올바르게 말하면 해당 메시지는 올바른 형식의 RFC822 메시지 여야합니다. 최소한 Subject:헤더 가 있어야합니다 .

ssmtp address@example.com <<<$'Subject: testing 1...2...3'

( ssmtp, Postfix, Exim, 와의 sendmail심볼릭 링크 ssmtp입니다. Provides: mail-transport-agent물론 다른 MTA도 비슷한 배열 을 가지고 있다고 생각합니다.sendmailsendmail 바이너리가 "진짜"입니다.)

보다 일반적으로 간단한 전자 메일 메시지를 here 문서와 함께 정리할 수 있습니다.

/usr/lib/sendmail -oi -t <<____HERE
Subject: testing
To: recipient@example.net

Here we interpolate the shell variable $result
____HERE

(Sendmail -t 옵션은 표준 입력에서 수신 한 메시지의 헤더에서 수신자 목록을 가져 지시합니다. Sendmail의 정확한 경로는 플랫폼마다 다릅니다.

또 다른 일반적인 변형은 몇 가지 명령의 출력을 결합하는 것입니다. 헤더와 메시지 본문 사이에 빈 줄 ( "목")이 있는지 확인하십시오.

( printf "Subject: random number\n\n"
  dd if=/dev/urandom bs=4 count=1 2>/dev/null | od -D -An ) |
sendmail elsewhere@example.org

매우 간단한 ASCII 텍스트 전용 메시지를 넘어서는 적절한 MIME 메시지를 작성하는 방법을 이해해야합니다.이 시점에서 일반적으로와 같은 도구를 사용하는 것이 더 합리적 mutt입니다. 일부 플랫폼에는mailmailx있는 첨부 파일 및 비 ASCII 문자를 보내는 방법을 알고 있지만이 완벽하게 이식 할 수 없습니다.

여기서의 과제는 이메일 메시지를 받아 전송하려고 시도하는 클라이언트를 찾는 것이 아니라, MTA가 원격 서버에 사용하기 위해 사용자 이름과 비밀번호를 알아야하는 Gmail의 특정 사항에 맞게 클라이언트를 구성하는 것입니다. 발신 스마트 호스트로 사용할 수 있습니다.

내부적으로 대부분의 클라이언트가 좋아 mutt, mailx등은 일반적으로 단지 실행 sendmail시스템 오프 메시지를 얻기 위해 무대 뒤에서.


sendmail을 직접 사용하면 운이 좋지 않습니다. 따라서 ssmtp로 전환합니다. 당신의 대답을 찬성하십시오. 그건 그렇고, 이미지를 첨부 파일로 보내려면 가능한 가장 간단한 방법을 찾았습니다. MIME에 대해서도 생각할 필요가 없습니다. 여기에 설명 된대로 mpack을 사용합니다 : unix.stackexchange.com/questions/381131/…
SDsolar

8

OP 자체 답변에 추가 :

구성 할 때 ssmtp 사용자가 보낸 사람을 정의하지 못하도록하거나 도메인을 무시할 수도 있습니다. 스팸 폴더에 메시지가 포함되지 않는 등 여러 가지 이유로이 작업을 수행 할 수 있습니다.

당신은에 추가 할 수 있습니다 /etc/ssmtp/ssmtp.conf:

# Where will the mail seem to come from?
rewriteDomain=my_internet_domain.uk

# Are users allowed to set their own From: address?
# YES - Allow the user to specify their own From: address
# NO - Use the system generated From: address
FromLineOverride=YES

YES는 가정용 라즈베리에서 사용될 수 있지만 보안 관점에서 다중 사용자 시스템에서는 권장되지 않을 수 있습니다.


공감. 훌륭한 정보.
SDsolar

5

"메일"에 어떤 문제가 있습니까?

에코 "안녕하세요"| mail -s "중요 메일"user@example.com

"mail"은 bsd-mailx 패키지에서 / usr / bin / bsd-mailx에 대한 / etc / alternative 링크입니다. 나는 그것이 기본적으로 있다고 생각합니다. 예를 들어 cron 스크립트에서 메일을 보내는 데 유용한 유틸리티입니다.

우분투와 FreeBSD에서도 작동합니다.


3
mailx그냥 프론트 엔드입니다. 실제로 로컬 시스템에서 메시지를 가져 오도록 일부 MTA를 구성해야합니다. 대상 플랫폼이 데비안 전용 인 경우에는 일반적으로 호환되지 않는 여러 버전이 있지만 합리적으로 최근의 BSD 동작에 의존 할 수 있습니다.
tripleee

4

나는 mailx이것을 사용 하는 것에 정말로 부분적입니다 .

echo "Message body." | mailx -s "Subject line" -a /path/attachment.txt -r "Sender's Name<sender@email.com>" -c recipient2@email.com recipient1@email.com

1
여기에서 몇몇 옵션은 데비안 / BSD가 아닌 많은 시스템에서 사용할 수 없습니다. 이 -a옵션은 보편적으로 지원된다면 특히 좋을 것입니다. 그러나 mailx여기에 있는 질문을 찾아 보면 확실히 그렇지 않습니다.
tripleee

2

sendEmail을 사용하여 외부 공급자의 SMTP 서버를 통해 간단한 자동 전자 메일을 보냅니다.

sendEmail -q -f "me@mail.com" -u "mySubject" -t "someone@mail.org" -s "my.smtp.com" -o tls=yes -xu "mySmtpUser" -xp "mySmtpPw" -m "myMessage"

한 줄로 모든 것을 전달하므로 명령 줄 에서이 작업을 수행하면 명령을 실행하는 ps -ef동안 잠시 동안 실행하면 모든 매개 변수 (smtp 비밀번호 포함)가 모든 사용자에게 표시됩니다 . 쉘 스크립트 내에서 사용합니다.


1
이것은 표준 설치가 아니며이 이름의 클라이언트가 여러 개 있습니다. 나는 당신이 en.wikipedia.org/wiki/SendEmail을 참조한다고 생각합니다 . 데비안 패키지로 제공됩니까?
tripleee

다중 사용자 시스템과 같은 쉘 스크립트에 대한 좋은 생각. 내 비밀번호가 머신의 내장에있는 파일에 있다는 것을 좋아한다. 일반 텍스트 대신 해시 암호를 저장할 수 있기를 바랍니다.
SDsolar

이 패키지를 참조하고 있습니다 : packages.debian.org/search?keywords=sendemail
user684790

1
원래 질문에 지정된대로 Gmail에서 작동한다는 것을 보여주는이 답변을 보지 못했습니다.
SDsolar

이것은 gmail과 함께 작동합니다.`
rogerdpack

1

내 서버는 CEntOS 7이며 sendmail은 있지만 mailx는 없습니다. sendmail을 사용하여 직접 테스트 한 새 프로그램을 설치하는 대신 다음과 같이 작동합니다.

echo -e "From: you@whatever\nTo: you@gmail.com\nSubject: this is the subject\n\nThis is the body,\nwith multiple lines." | sendmail -t

나에게 이것은 짧은 전자 메일을 보내는 가장 간단한 방법 인 것 같습니다. 서버 또는 데몬을 실행하거나 구성 할 필요가 없으며 단일 명령 줄에서 수행 할 수 있기 때문입니다.

아이디어는 잠재적으로 기밀 정보를 밝히지 않고 특정 프로그램에서 오류가 발생했다는 경고 메시지 만 표시 한 다음 서버로 SSH를 보내 로그를 검사한다는 것입니다. 이 방법으로 파일 첨부 또는 전송 암호화와 같은 복잡한 문제를 신경 쓸 필요가 없습니다.

노트:

  • -e echo에게 '\ n'및 기타 이스케이프를 해석하도록 지시합니다.
  • -t 메시지 헤더의 'To :'에서 수신자 주소를 받도록 sendmail에 지시합니다.
  • 메일이 도착하지 않으면을 사용 tail /var/log/maillog하여 오류 메시지를 확인하십시오.
  • Gmail 주소로 보내는 경우 Gmail에서 필터를 만들어 정크 폴더에서 제외하십시오.
  • 이 sendmail은 실제로 'sendmail.postfix'입니다 (정상일 수 있음). 여기 맨 페이지가 있습니다

1
시스템에 MTA가 설치되어 있어야합니다. sendmail 하지만 원래 질문에 지정된대로 Gmail에서 작동한다는 것을 보여주는이 답변을 보지 못합니다.
SDsolar

@SDsolar 당신이 맞아요. Postfix가 내 서버에서 실행 중이며 몰랐습니다. Centos 설치의 표준 인 것 같습니다. 아마도 DigitalOcean이 설정했을 것입니다. 공용 포트에서 듣지 않습니다. Gmail을 통해 보내는 것에 관해서는, 내 요점은 필요하지 않다는 것입니다. 자신에게만 보내는 경우 자신의 서버에서 직접 보낼 수 있습니다. (나는 여기에 맞지 않으면 내 자신의 질문을하고이 답변을 옮길 수 있습니다.)
j77h
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.