コマンドラインから電子メールを送信するにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/36498

  •  09-06-2019
  •  | 
  •  

質問

コマンドラインからすぐにメールを送信したいと考えています。おそらくこれを行うにはさまざまな方法があると思います。

Linuxターミナルからこれを行う簡単な方法(おそらくbashシェルですが、何でもできるはずです)と、Windowsでこれを行う別の方法を探しています。コマンド ラインで直接電子メールを作成したり、メッセージをコマンド ライン プログラムに柔軟にパイプしたりできるようにしたいと考えています。これをどうやってやりますか?小さなスクリプトがある場合は、それも問題ありません。

役に立ちましたか?

解決

メールを使用できます:

$mail -s <subject> <recipients>

次に、メッセージを入力し、ピリオドのみの行で終了します。これにより、作業が完了したことが通知され、メッセージが送信されます。

STDIN から電子メールをパイプ入力することもでき、電子メールのテキストとして送信されます。

$<mail-generating-program> | mail -s <subject> <recipients>

このアプローチには小さな注意が 1 つあります。コンピューターがインターネットに接続されており、DNS 設定が適切に設定されていない限り、メッセージへの返信を受信できません。POP または IMAP 電子メール アカウントにリンクできる、より堅牢なコマンド ライン プログラムについては、次のいずれかを確認してください。 または 雑種.

他のヒント

$ echo "This is the email body" | mail -s "This is the subject" me@email.com

あるいは:

$ cat | mail -s "A few lines off the top of my head" me@here.com
This is where my
multiline
message would go
^D

^D - 押すことを意味します Ctrl+d

これも使えます メールを送る Windows用のバージョン。使い方は非常に簡単で、標準的な UNIX のような動作です。速い。インストールは必要ありません。システム上のどこにでも EXE を呼び出すだけです。

電子メールの作成:

echo To: you@example.com, me@example.com >> the.mail
echo From: them@example.com >> the.mail
echo Subject: This is a SENDMAIL notification >> the.mail
echo Hello World! >> the.mail
echo This is simple enough. >> the.mail
echo .>> the.mail

ファイルの送信:

\usr\lib\sendmail.exe -t < the.mail

type the.mail | C:\Projects\Tools\sendmail.exe -t

Windows コマンドラインからこれを実行したい場合は、と呼ばれるツールがあります。 まったく CMD プロンプトから使用できます。

PowerShell からするともう少し楽しいです。PowerShell は .NET Framework にアクセスできるため、System.Net.Mail のクラスを使用して電子メールを送信できます。スクリプトの例は次のとおりです。 PowerShell コミュニティ スクリプト リポジトリ.

IIRC を使用するには、メール転送エージェント (MTA) を構成する必要もあります。 mail またはほとんどの電子メール ライブラリ。 メールの送信 が最もよく知られていますが、構成に関しては非常に困難です。 エクシム, Qメール そして 接尾語 これらはすべて、もう少し現代的な人気のある代替案です。

メールの受信ではなく送信のみが可能な、より軽量な MTA もあります。nullmailer、mstmp、ssmtp など

Postfix は Ubuntu のデフォルトです。 このウィキ記事 設定方法については、ローカル アドレスからの転送のみを許可するようにしてください。

電子メールを送信するスクリプトの Power Shell の例を次に示します。

$smtp = new-object Net.Mail.SmtpClient("mail.example.com")

if( $Env:SmtpUseCredentials -eq "true" ) {
    $credentials = new-object Net.NetworkCredential("username","password")
    $smtp.Credentials = $credentials
}
$objMailMessage = New-Object System.Net.Mail.MailMessage
$objMailMessage.From = "script@mycompany.com"
$objMailMessage.To.Add("you@yourcompany.com")
$objMailMessage.Subject = "eMail subject Notification"
$objMailMessage.Body = "Hello world!"

$smtp.send($objMailMessage)

電子メール プログラムを呼び出したい場合は、次の記事を参照してください。

件名と本文を含むデフォルトのメール プログラムをクロスプラットフォームで開くにはどうすればよいですか?

Linux サーバーを使用しているが、メールが利用できない場合 (共有サーバーの場合はこれに該当します)、同じことを行うための単純な PHP / Perl / Ruby (利用可能なものに応じて) スクリプトを作成できます。このようなもの:

#! /usr/bin/php
<?php

if ($argc < 3) {
    echo "Usage: " . basename($argv[0]) . " TO SUBJECT [CC]\n";
    exit(1);
}

$message = file_get_contents('php://stdin', 'r');
$headers = $argc >= 4 ? "Cc: $argv[3]\r\n" : null;

$ret = mail($argv[1], $argv[2], $message, $headers);

exit($ret ? 0 : 1);

次に、次のように呼び出します。

mail me@example.com test < message
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top