我创建了一个脚本,每天晚上在我的Linux服务器上运行,它使用mysqldump将我的每个MySQL数据库备份到.sql文件,并将它们打包成一个压缩的.tar文件。我想完成的下一步是通过电子邮件将tar文件发送到远程电子邮件服务器以确保安全。我已经能够通过管道备份文本文件到mailx发送原始脚本正文的电子邮件,就像这样:

$ cat mysqldbbackup.sql | mailx backup@email.example

Cat回显备份文件的文本,该文本通过管道输入mailx程序,并将收件人的电子邮件地址作为参数传递。

虽然这实现了我所需要的,我认为它可以更好的一步,有任何方法,使用shell脚本或其他方式,将压缩的.tar文件作为附件发送到外发电子邮件消息?这将避免处理包含标题数据和经常有换行问题等非常长的电子邮件。


当前回答

我使用SendEmail,它就是为这个场景创建的。它是为Ubuntu打包的,所以我认为它是可用的

sendemail -f sender@some.where -t receiver@some.place -m“这是你的文件!”-a file1.jpg file2.zip

http://caspian.dotconf.net/menu/Software/SendEmail/

其他回答

Mailx现在确实为附件提供了一个-a选项。

我用的是packack。

mpack -s subject file user@example.com

不幸的是,mpack不能识别“-”作为stdin的别名。但下面的工作,并可以很容易地包装在一个(shell)别名或脚本:

mpack -s subject /dev/stdin loser@example.com < file

我使用

echo "Start of Body" && uuencode log.cfg readme.txt | mail -s "subject" "a@b.c" 

这对我来说很管用....

如果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 --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