私は毎晩実行するスクリプトを私のLinuxサーバー上で実行しています。mysqldump
各MySQLデータベースを.sqlファイルにバックアップし、それらを圧縮された.tarファイルとしてまとめてパッケージ化します。私が達成したいと思う次のステップは安全のために電子メールを通して遠隔の電子メールサーバにそのtarファイルを送ることです。バックアップテキストファイルを以下の場所にパイプすることで、本文の生のスクリプトに電子メールを送信することができました。mailx
そのようです:
$ cat mysqldbbackup.sql | mailx backup@email.com
cat
にコピーされたバックアップファイルのテキストをエコーします。mailx
受取人のEメールアドレスを引数として渡したプログラム。
これは私が必要とすることを達成する一方で、私はそれが一歩上がるかもしれないと思う、シェルスクリプトなどを使用して、圧縮された.tarファイルを電子メールとして送信電子メールメッセージに送信する方法はありますか。愛着?これは、ヘッダデータを含み、しばしば折り返しの問題などを含む非常に長いEメールメッセージを処理しなければならないことに勝るでしょう。
Muttのどれも私のために働きませんでした。電子メールアドレスが添付ファイルの一部であると考えていました。しなければならなかった:
echo "This is the message body" | mutt -a "/path/to/file.to.attach" -s "subject of message" -- recipient@domain.com
あるいは、失敗したmutt:
gzip -c mysqldbbackup.sql | uuencode mysqldbbackup.sql.gz | mail -s "MySQL DB" backup@email.com
見てからman mailx
mailxプログラムにはファイルを添付するためのオプションがありません。あなたはmuttのような他のプログラムを使うことができます。
echo "This is the message body" | mutt -a file.to.attach -s "subject of message" recipient@domain.com
muttのコマンドラインオプションは次のように表示されます。mutt -h
。
mutt
メールを送信するために、私のためにnanoエディタを開きます。 - Jonas--
。 - Alexander Bird
Linuxのバージョンによっては、メールと呼ばれることがあります。上記の@ Davidを引用するには:
mail -s "Backup" -a mysqldbbackup.sql backup@email.com < message.txt
あるいは:
cat message.txt | mail -s "Backup" -a mysqldbbackup.sql backup@email.com
-a, --append=HEADER: VALUE append given header to the message being sent
- exhumamutt
コマンドではなくmail
。また他の人が指摘しているように、muttは今や--
アドレスの前の引数。そして、@ exhumaと私は実際には-a
オプションインmail
します - 私はちょっとそこで混乱しました;) - nealmcb-a, --append=HEADER: VALUE append given header to the message being sent
-A, --attach=FILE attach FILE
- Victor Perov
私はmpackを使います。
mpack -s subject file user@example.com
残念ながら、mpackは ' - 'を標準入力の別名として認識しません。しかし、次のように動作し、(シェル)エイリアスまたはスクリプトに簡単にラップできます。
mpack -s subject /dev/stdin loser@example.com < file
mpack -s subject /dev/stdin loser@example.com <(stdout_generating_program)
- thomasa88
このシナリオ用に作成されたSendEmailを使用します。 Ubuntu用にパッケージされているので、私はそれが利用可能であると思います
sendemail -f sender@some.where -t receiver@some.place -m "Here are your files!" -a file1.jpg file2.zip
http://caspian.dotconf.net/menu/Software/SendEmail/
sendemail
そしてsendEmail
に/usr/bin/
。 - Fredrik WendtSendEmail
- Vitaly Zdanevichsendemail -f mandatory@email.com-t to@some.one -m "Here are your files!" -a file1.jpg file2.zip
- Sailendra Pinupolu
echo 'These are contents of my mail' | mailx -s 'This is my email subject' -a /path/to/attachment_file.log email_id@example.com
mailx
正しく標準化されていません。それを推薦するどんな答えでもこの警告を指摘するべきです。一般的に使用される互換性のない少なくとも3つの亜種があります。 - tripleee
私はかつてSolaris上のkshのためにこの関数を書きました(base64エンコーディングにPerlを使います):
# usage: email_attachment to cc subject body attachment_filename
email_attachment() {
to="$1"
cc="$2"
subject="$3"
body="$4"
filename="${5:-''}"
boundary="_====_blah_====_$(date +%Y%m%d%H%M%S)_====_"
{
print -- "To: $to"
print -- "Cc: $cc"
print -- "Subject: $subject"
print -- "Content-Type: multipart/mixed; boundary=\"$boundary\""
print -- "Mime-Version: 1.0"
print -- ""
print -- "This is a multi-part message in MIME format."
print -- ""
print -- "--$boundary"
print -- "Content-Type: text/plain; charset=ISO-8859-1"
print -- ""
print -- "$body"
print -- ""
if [[ -n "$filename" && -f "$filename" && -r "$filename" ]]; then
print -- "--$boundary"
print -- "Content-Transfer-Encoding: base64"
print -- "Content-Type: application/octet-stream; name=$filename"
print -- "Content-Disposition: attachment; filename=$filename"
print -- ""
print -- "$(perl -MMIME::Base64 -e 'open F, shift; @lines=<F>; close F; print MIME::Base64::encode(join(q{}, @lines))' $filename)"
print -- ""
fi
print -- "--${boundary}--"
} | /usr/lib/sendmail -oi -t
}
base64
エンコードのためのperlの代わりのコマンド - MestreLion
(
/usr/bin/uuencode attachfile.txt myattachedfilename.txt;
/usr/bin/echo "Body of text"
) | mailx -s 'Subject' youremail@gmail.com
以下は改行を除いた上記と同じコマンドです
( /usr/bin/uuencode /home/el/attachfile.txt myattachedfilename.txt; /usr/bin/echo "Body of text" ) | mailx -s 'Subject' youremail@gmail.com
ファイルがあることを確認してください/home/el/attachfile.txt
この内容で定義されます。
<html><body>
Government discriminates against programmers with cruel/unusual 35 year prison
sentences for making the world's information free, while bankers that pilfer
trillions in citizens assets through systematic inflation get the nod and
walk free among us.
</body></html>
あなたがuuencodeを持っていないならこれを読んでください:https://unix.stackexchange.com/questions/16277/how-do-i-get-uuencode-to-work
kshがインストールされていることを確認してください。yum info ksh
sendmailがインストールされ設定されていることを確認してください。
uuencodeがインストールされていて利用可能であることを確認してください。https://unix.stackexchange.com/questions/16277/how-do-i-get-uuencode-to-work
という名前の新しいファイルを作成します。test.sh
そしてそれをあなたのホームディレクトリに置きます。/home/el
次のコードをtest.sh
:
#!/usr/bin/ksh
export MAILFROM="el@defiant.com"
export MAILTO="youremail@gmail.com"
export SUBJECT="Test PDF for Email"
export BODY="/home/el/email_body.htm"
export ATTACH="/home/el/pdf-test.pdf"
export MAILPART=`uuidgen` ## Generates Unique ID
export MAILPART_BODY=`uuidgen` ## Generates Unique ID
(
echo "From: $MAILFROM"
echo "To: $MAILTO"
echo "Subject: $SUBJECT"
echo "MIME-Version: 1.0"
echo "Content-Type: multipart/mixed; boundary=\"$MAILPART\""
echo ""
echo "--$MAILPART"
echo "Content-Type: multipart/alternative; boundary=\"$MAILPART_BODY\""
echo ""
echo "--$MAILPART_BODY"
echo "Content-Type: text/plain; charset=ISO-8859-1"
echo "You need to enable HTML option for email"
echo "--$MAILPART_BODY"
echo "Content-Type: text/html; charset=ISO-8859-1"
echo "Content-Disposition: inline"
cat $BODY
echo "--$MAILPART_BODY--"
echo "--$MAILPART"
echo 'Content-Type: application/pdf; name="'$(basename $ATTACH)'"'
echo "Content-Transfer-Encoding: uuencode"
echo 'Content-Disposition: attachment; filename="'$(basename $ATTACH)'"'
echo ""
uuencode $ATTACH $(basename $ATTACH)
echo "--$MAILPART--"
) | /usr/sbin/sendmail $MAILTO
上部のエクスポート変数を変更しますtest.sh
あなたの住所とファイル名を反映するために。
テスト用のPDF文書をダウンロードして、/home/el
pdf-test.pdfと呼ばれる
/home/el/email_body.htmというファイルを作成し、その中に次の行を入れます。
<html><body><b>this is some bold text</b></body></html>
PDFファイルに十分な755権限があることを確認してください。
スクリプトを実行する./test.sh
あなたの電子メールの受信箱をチェックしなさい、テキストはHTMLフォーマットにあるべきでありそしてpdfファイルは自動的にバイナリファイルとして解釈される。 1日に15回以上この機能を使用しないように注意してください。たとえあなたが自分自身に電子メールを送信したとしても、gmailのスパムフィルタはそれらを通過させるオプションを与えずに電子メールを吐き出すドメインをブラックリスト化できます。そして、あなたはこれがもはやうまくいかないか、または添付ファイルを通過させるだけであるか、またはEメールがまったく届かないことに気付くでしょう。あなたがこれについて多くのテストをしなければならないならば、何日もかけてそれらを広げなければスパマーと分類されるでしょう、そしてこの機能はもう働かないでしょう。
ここにいくつかの答えがありますmail
またはmailx
そのため、これは文脈の中でこれらを解釈するのを助けるためのより多くの背景です。
Unixの起源mail
Bell Labs Unix™の初期の歴史の霧に戻りましょう。 (1969年)そして私達は多分ここに完全な系譜に入ることを望むことができない。コードを継承または再実装する(または再実装からコードを継承する)プログラムがたくさんあると言えば十分です。mail
また、 "the"として明確に識別できる単一のコードベースはありません。mail
。
しかし、その立場を争っている人の一人は、もともと「Berkeley Mail」と呼ばれていましたMail
2BSD(1978)では大文字のMを使っています。しかし3BSD(1979)では、小文字に置き換えられましたmail
同様に命令して、いくつかの新しい混乱を引き起こします。 SVR3(1986)は次のように呼ばれる派生物を含んでいましたmailx
。のx
おそらくそれを独特かつ明確にするために加えられた。しかし、これもまた、コピーされ、再実装され、そして断片化されているので、決定的な単一のバージョンは存在しません。
その日のうちに、事実上電子メールを介してバイナリを送信するための標準uuencode
。それはまだ存在しますが、ユーザビリティの問題が数多くあります。可能であれば、1980年代後半と通信できるように特に努力しない限り、代わりにMIME添付ファイルを送信する必要があります。
MIME1990年代初頭に導入されたのは、英語のサブセットにしか適していない単一の文字セットのプレーンテキスト以外のさまざまな種類のコンテンツのサポートなど、電子メールに関するいくつかの問題を解決するためです。 。これにより、マルチパートメッセージ、国際化、リッチコンテンツタイプなどのサポートが導入され、1990年代を通じて急速に注目を集めました。
(家宝mail
/mailx
履歴ノートこれを構成するときに最も役に立ちました、そしてあなたがその種のことに興味があるならば確かに読む価値があります。)
2018年現在、Debianには3つのパッケージがあります。mail
またはmailx
コマンド。 (あなたが検索することができますProvides: mailx
。)
debian$ aptitude search ~Pmailx
i bsd-mailx - simple mail user agent
p heirloom-mailx - feature-rich BSD mail(1)
p mailutils - GNU mailutils utilities for handling mail
(私はDebianを勧告として挙げるのではありません。私が使っているものなので、私はそれに精通しています;そして、それぞれのパッケージ名を参照することによって、さまざまな選択肢を明確に区別する手段を提供します。どちらのUbuntuがこれらのパッケージを入手していますか?)
bsd-mailx
比較的簡単ですmailx
どれがではないMIME添付ファイルの送信をサポートしているようです。その参照してくださいマニュアルページそして、これはデフォルトでMacOSを含む* BSDシステムで見つかるはずのものです。heirloom-mailx
今呼ばれていますs-nail
そしてするMIME添付ファイルの送信をサポート-a
。その参照してくださいマニュアルページそしてより一般的に家宝プロジェクトmailutils
別名GNU Mailutilsを含むmail
/mailx
互換性ラッパーどっちするMIME添付ファイルの送信をサポート-A
これらの問題を考慮して、コードを移植可能にする必要があり、多少複雑なパッケージに依存する可能性がある場合、MIME添付ファイルを移植可能に送信する簡単な方法は次のとおりです。つかいますmutt
。
もう一つの選択肢 - 最悪(SMTP用スイスアーミーナイフ)
swaks -tls \
--to ${MAIL_TO} \
--from ${MAIL_FROM} \
--server ${MAIL_SERVER} \
--auth LOGIN \
--auth-user ${MAIL_USER} \
--auth-password ${MAIL_PASSWORD} \
--header "Subject: $MAIL_SUBJECT" \
--header "Content-Type: text/html; charset=UTF-8" \
--body "$MESSAGE" \
--attach mysqldbbackup.sql
metamailはツールmetasendを持っています
metasend -f mysqlbackup.sql.gz -t backup@email.com -s Backup -m application/x-gzip -b
私が使った
echo "Start of Body" && uuencode log.cfg readme.txt | mail -s "subject" "a@b.c"
そしてこれは私のためにうまくいきました....
mailx
ありますか-a
添付ファイルのオプション
mailx
行う。 2つの実装があると思います。一つに-a
添付ファイル用ですが、ヘッダー用です。 - exhuma
私は通常RHEL上でのみmailコマンドを使います。私はmailxを試しました、そしてそれはかなり効率的です。
mailx -s "Sending Files" -a First_LocalConfig.conf -a
Second_LocalConfig.conf Recipient@myemail.com
This is the content of my msg.
.
私にとって最短の方法は
file=filename_or_filepath;uuencode $file $file|mail -s "optional subject" email_address
あなたの例ではそうなるでしょう
file=your_sql.log;gzip -c $file;uuencode ${file}.gz ${file}|mail -s "file with magnets" ph.gachoud@gmail.com
良い部分は私がそれを思い出すことができるということですCtrl + r別のファイルを送信する
ソースマシンから
mysqldump --defaults-extra-file=sql.cnf database | gzip | base64 | mail me@myemail.com
宛先マシン上。受信したメールの本文をdb.sql.gz.b64;それから..
base64 -D -i db.sql.gz.b64 | gzip -d | mysql --defaults-extra-file=sql.cnf
mailxコマンドを使用する
echo "Message Body Here" | mailx -s "Subject Here" -a file_name user@example.com
sendmailを使う
#!/bin/ksh
fileToAttach=data.txt
`(echo "To: user@company.com"
echo "Cc: user@company.com"
echo "From: Application"
echo "Subject: your subject"
echo your body
uuencode $fileToAttach $fileToAttach
)| eval /usr/sbin/sendmail -t `;
私の2セントを追加するために、私は私自身のPHPスクリプトを書くと思います:
http://php.net/manual/en/function.mail.php
そのページの例で添付ファイルを作成する方法はたくさんあります。
sh
もっと遍在的です。良い例がある答えと重複した質問があります。これが私のものです。 - tripleee
電子メールを送信する方法ではありませんが、そのためにはオンラインのGitサーバー(例:Bitbucketまたは類似のサービス)を使用できます。
このように、あなたは使うことができますgit push
すべてのバージョンは、圧縮され整理された方法で保存されます。
これが私がCentOSの一つの大きなログファイルを使ってやっている方法です:
MAIL="`whereis mail | awk '{print $2}'`"
WHOAMI="`whoami`"
HOSTNAME="`hostname`"
EMAIL"your@email.address"
LOGDIR="/var/log/aide"
LOGNAME="`basename "$0"`_`date "+%Y%m%d_%H%M"`"
# Arhiveerime ning kui hästi, saadame edasi:
/bin/tar -zcvf ${LOGDIR}/${LOGNAME}.tgz "${LOGDIR}/${LOGNAME}.log" > /dev/null 2>&1
if [ $? -eq 0 ]; then
cd ${LOGDIR}
# This works too. The message content will be taken from text file below
# echo 'Hello!' >/root/scripts/audit_check.sh.txt
# echo "Arhiivifail manuses" | ${MAIL} -s "${HOSTNAME} Aide report" -q /root/scripts/audit_check.sh.txt -a ${LOGNAME}.tgz -S from=${WHOAMI}@${HOSTNAME} ${EMAIL}
echo "Arhiivifail manuses" | ${MAIL} -s "${HOSTNAME} Aide report" -a ${LOGNAME}.tgz -S from=${WHOAMI}@${HOSTNAME} ${EMAIL}
/bin/rm "${LOGDIR}/${LOGNAME}.log"
fi
WHOAMI
そしてHOSTNAME
二度? - David C. Rankin
ファイルがテキストの場合は、本文で最も簡単に送信できます。
sendmail recipient@example.com < message.txt
もう一つのことmutt
:デフォルトでは "From:"フィールドにあなたのアドレスと名前を使います。
それがあなたが必要とするものではないならば、あなたはこのようなストリングを含む代替のmuttrcファイルを作成することができます:
from = "私のメールデーモン"
このファイルを使って-F
コマンドラインオプション
muttが機能していないかインストールされていない場合、これを試してください
*#!/bin/sh
FilePath=$1
FileName=$2
Message=$3
MailList=$4
cd $FilePath
Rec_count=$(wc -l < $FileName)
if [ $Rec_count -gt 0 ]
then
(echo "The attachment contains $Message" ; uuencode $FileName $FileName.csv ) | mailx -s "$Message" $MailList
fi*
mysqldump
そして、その出力を電子メールに添付します。mutt
)出力をzip / tar.gzに圧縮するステップさえあったかもしれません... - Kit Roed