コマンドラインからメールを送信する方法は?


28

コマンドラインまたはスクリプトから電子メールを送信する方法は?レシーバーとメッセージを渡すことにより、プログラムでスクリプトを実行できるようにしたいと思います。


プログラムを作成している場合、多くの言語にメールを処理するライブラリがあります
-user151019

回答:


21

mail -s subject someone@example.com メッセージを入力し、を押しCtrl+Dて終了します


11
メールを送信する場所を指定するようにシステムを設定していない場合、おそらく実際にメールを送信することはなく、Macに蓄積されます。
TJルオマ

15
-1:この答えは不完全です。@TJLuomaが述べたように、このコマンドを実行する前にシステムが構成されていない限り、このコマンドは機能しません。
melvynkim

1
TJ Luomaとmelvkimは間違っています。標準のOS Xシステムは、設定なしで問題なくメールを送信します。OS Xマシンは独自のSMTPサーバーとして機能し、宛先ドメインのDNS MXを検索し、そこにメールを送信します。
JohnEDee

2
@patrix、正しい、ログインアカウントの長いユーザー名とMacの自己生成「.local」アドレスを使用して「From」を形成します。私とシェルスクリプトプロセスからのスタッフへの通知メールには常に使用しています。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

私が知っている2つのプログラムがあり、コマンドラインからメールを送信するようにMacを簡単に設定できます。

両方のHOWTOを作成しました。

2つのうち、をお勧めし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で使えるように私のものを入れました。

次に~/.mailrc、msmtpバイナリの場所を示すファイルが必要です。使用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ルオマ

ここで入手可能なGoogle Roots(pki.google.com/roots.pem)を使用して、ようやくこれを機能させることができました。信頼ファイルとGmailで問題が発生している場合は、ブロックが解除される可能性があります。
コードワイズ

構成(msmtprc)ファイルの場所に問題がある場合、macOS 10.13.3にHomebrewをインストールした後、msmtpはホームディレクトリでそれを探しました: ~/.msmtprc
codewise

15

メールを送信する最も基本的な方法は、プロバイダー/ネットワークのsmtpサーバーとのtelnetセッションです。サーバーに接続した後、すべてのコマンドの後、サーバーは「250 OK」などのコマンドを受け入れるか、エラーメッセージを受け取らない場合に応答します。

すべての詳細は、RFC2821-Simple Mail Transfer Protocol、Googleに記載されています。この基本的な方法は、メールの送信がうまくいかない理由をテストするのに最適ですが、完全な証拠をスクリプト化するのは非常に複雑だと思います。

まず、ターミナルを起動して、コンピューターのコマンドラインインターフェイスを取得します。次に、次のコマンドを1つずつ続けます。

プロバイダー/ネットワークのsmtpサーバーのポート25へのtelnetセッションを開きます

telnet name_or_ip_of_smtp_server 25

helloとプロバイダー/ネットワークのインターネット名(abc.comなど)

EHLO name_of_your_network

from = returnアドレスが必要です。<および>はコマンドの一部です

MAIL FROM:<your_email_adress>

1つ以上の宛先を指定します。<および>はコマンドの一部です

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

これは私にとってはうまくいきました。Lionを念頭に置いて書かれていますが、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

PS:ターミナルから手動で、またはスクリプトでこれを実行すると、うまく機能するようになりました。ただし、この時点で、launchdがスクリプトを起動したときにメールが送信されないという問題に悩まされています。launchdジョブのセットアップに問題があると思います。
ジョニー


+1これを追加していただきありがとうございます。本当に助けてくれました。本当に必要なのは、main.confのrelayhostエントリだけです(LAN上の自分のSMTPサーバーです)。
boot13

3
上記は古い可能性があります。stackoverflow.com/a/26451135/197789に従って、「smtp_sasl_mechanism_filter = plain」を追加して動作させる必要がありました。そうしないと、「一般的なエラー」エラーが発生しました。
フォン



弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.