Linuxシェルスクリプトからメールを送信したい。これを行うための標準コマンドは何ですか?特別なサーバー名を設定する必要がありますか?
Linuxシェルスクリプトからメールを送信したい。これを行うための標準コマンドは何ですか?特別なサーバー名を設定する必要がありますか?
回答:
サーバーが適切に構成されている場合、たとえば、稼働中の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クライアントが支援のために電子メール通知を送信するようにするには、最初にeximやpostfixのような最終的にプレインストールされたMTAを削除し、ssmtpを再インストールします。
次に、2つのファイル(revaliasesとssmtp.conf)のみを構成します。ssmtpdocを参照してください。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がない場合(UNIXのようなシステムでは省略されることは少し珍しいのですが)、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-メールスクリプト、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
上記は、そのまま使用できるtext / 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
Fedora:
dnf update && dnf install postfix mailx
CentOS:
yum update && yum install postfix mailx cyrus-sasl cyrus-sasl-plain
Arch Linux:
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を使用するim uは、nano、catなどのファイルエディタを使用できます。
> Ubuntu、Fedora、CentOS、Debian、OpenSUSE、Arch Linux:
これを追加
ここで、ユーザーがあなたのメール名とパスワードに置き換えるのはGmailのパスワード
[smtp.gmail.com]:587 user@gmail.com:password
ファイルを保存して閉じ、rootだけがアクセスできるようにします。パスワードを含む機密コンテンツであるため、
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
保存して、rootだけがアクセスできるようにします。
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これは設定でemptyに設定され、Gmailと互換性のないセキュリティオプションが使用されないようにします。
保存して閉じます
のように
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)postfixを再起動します
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キーを押します
希望どおりにメールの本文を追加し、Enter キーを押してから、Ctrl + Dキーを押して適切に終了します
機能しない場合は、すべての手順をもう一度確認し、Gmailで「安全性の低いアプリ」を有効にしているかどうかを確認してください
その後、その中の何かを変更した場合は、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は未使用のトピックを削除することを忘れないでください!" | メール-s「廃棄物トピック」-a a.txt developer@xxx.com#グループユーザー 'developer@xxxx.com'に送信