如何在Linux上使用mail命令附加文件?

时间:2009-05-23 22:05:43

标签: linux unix shell email

我在运行Linux shell的服务器上。 我需要将一个简单的文件邮寄给收件人。 如何做到这一点,优先只使用邮件命令?

更新:得到了一个很好的解决方案,改为使用mutt:

$ echo | mutt -a syslogs.tar.gz admin@domain.org

13 个答案:

答案 0 :(得分:48)

使用uuencode的示例:

uuencode surfing.jpeg surfing.jpeg | mail sylvia@home.com

和参考文章:

http://www.shelldorado.com/articles/mailattachments.html

答案 1 :(得分:20)

$ echo | mutt -a syslogs.tar.gz admin@domain.org

但它使用mutt,而不是mail(或mailx)。

答案 2 :(得分:18)

mail在我试过的每个版本的现代Linux上都可以做到。不需要其他软件:

matiu@matiu-laptop:~$ mail -a doc.jpg someone@somewhere.com
Subject: testing

This is a test
EOT
完成输入后,

ctrl + d。

答案 3 :(得分:12)

mailx也可能有所帮助。来自mailx手册页:

-a file
     Attach the given file to the message.

很简单,对吧?

答案 4 :(得分:11)

我的答案除了邮件之外还需要base64,但是一些uuencode版本也可以用-m做base64,或者你可以忘记mime并使用普通的uuencode输出......

   FROM=me@mydomain.com
   TO=someone@mydomain.com
   SUBJECT="Auto emailed"
   MIME="application/x-gzip"  # Adjust this to the proper mime-type of file
   FILE=somefile.tar.gz
   ENCODING=base64  
   boundary="---my-unlikely-text-for-mime-boundary---$$--" 

   (cat <<EOF
    From: $FROM
    To: $REPORT_DEST
    Subject: $SUBJECT
    Date: $(date +"%a, %b %e %Y %T %z")
    Mime-Version: 1.0
    Content-Type: multipart/mixed; boundary="$boundary"
    Content-Disposition: inline

    --$boundary
    Content-Type: text/plain; charset=us-ascii
    Content-Disposition: inline

    This email has attached the file

    --$boundary
    Content-Type: $MIME;name="$FILE"
    Content-Disposition: attachment;filename="$FILE"
    Content-Transfer-Encoding: $ENCODING

    EOF
    base64 $FILE
    echo ""
    echo "--$boundary" ) | mail

答案 5 :(得分:7)

mailx -a /path/to/file email@address

你可能会进入交互模式(它会提示你“主题:”然后是一个空行),输入一个主题,然后输入一个正文然后按 Ctrl + D < / kbd>(EOT)完成。

答案 6 :(得分:4)

mpack -a -s“嘿:这可能是你的报告吗?” -m 0 -c application / x-tar-gz survey_results.tar.gz hesco@example.net

mpack和munpack与metamail一起工作以扩展mailx 使用html标记和附件混乱的现代电子邮件使其变得有用。

这四个包装在一起将允许你处理 您可以在gui邮件客户端中发送的任何电子邮件。

答案 7 :(得分:2)

使用ubuntu 10.4,这就是mutt解决方案的编写方式

echo | mutt -a myfile.zip -- admin@domain.org

答案 8 :(得分:1)

这里有很多答案使用mutt或mailx或者说邮件不支持&#34; -a&#34;

首先,来自mailutils的Ubuntu 14.0.4邮件支持:

mail -A filename -s&#34; subject&#34; email@example.com

其次,我发现通过使用&#34; man mail&#34;命令并搜索&#34;附加&#34;

答案 9 :(得分:1)

以下是Unix / Linux安装的一个不错的解决方案,它不依赖于任何不寻常的程序功能。这支持多行邮件正文,多个附件以及mailx的所有其他典型功能。

不幸的是,它不适合单行。

#!/bin/ksh

# Get the date stamp for temporary files
DT_STAMP=`date +'%C%y%m%d%H%M%S'`

# Create a multi-line body
echo "here you put the message body
which can be split across multiple lines!
woohoo!
" > body-${DT_STAMP}.mail

# Add several attachments
uuencode File1.pdf File1.pdf >  attachments-${DT_STAMP}.mail
uuencode File2.pdf File2.pdf >> attachments-${DT_STAMP}.mail

# Put everything together and send it off!
cat body-${DT_STAMP}.mail attachments-${DT_STAMP}.mail > out-${DT_STAMP}.mail
mailx -s "here you put the message subject" nobody@test-address.com < out-${DT_STAMP}.mail

# Clean up temporary files
rm body-${DT_STAMP}.mail
rm attachments-${DT_STAMP}.mail
rm out-${DT_STAMP}.mail

答案 10 :(得分:0)

使用mailx,您可以:

mailx -s "My Subject"  -a ./mail_att.csv -S from=noreply@foo.com  recipient@bar.com < ./mail_body.txt

这在我们的GNU Linux服务器上运行得很好,但不幸的是我的开发环境是Mac OsX,它只有一个糟糕的旧BSD版本的mailx。通常我使用Coreutils来获得比Mac BSD更好的unix命令版本,但是mailx不在Coreutils中。

我在一个不相关的线程(https://serverfault.com/questions/196001/using-unix-mail-mailx-with-a-modern-mail-server-imap-instead-of-mbox-files)中找到了notpeter的解决方案,该解决方案是从http://www.tramm.li/iWiki/HeirloomNotes.html下载Heirloom mailx OSX二进制包。 它有一个功能更强大的mailx,可以处理上面的命令语法。

(对于交叉链接或归属不良的道歉,我是该网站的新手。)

答案 11 :(得分:0)

在Linux上我建议,

#FILE_TO_BE_ATTACHED = abc.gz

uuencode abc.gz abc.gz > abc.gz.enc # This is optional, but good to have
                                    # to prevent binary file corruption.
                                    # also it make sure to get original 
                                    # file on other system, w/o worry of endianness

# Sending Mail, multiple attachments, and multiple receivers.
echo "Body Part of Mail" | mailx -s "Subject Line" -a attachment1 -a abc.gz.enc "youremail@domain.com anotheremail@domain.com"

收到邮件附件后,如果您使用过uuencode,则需要使用uudecode

uudecode abc.gz.enc

#这将生成原始文件,其名称与uuencode的第二个参数相同。

答案 12 :(得分:-1)

我使用mailutils,令人困惑的部分是,为了附加文件,您需要使用大写A参数。下面是一个例子。

echo 'here you put the message body' | mail -A syslogs.tar.gz admin@domain.org

如果你想知道你的邮件命令是否来自mailutils,只需运行“mail -V”。

root@your-server:~$ mail -V
mail (GNU Mailutils) 2.99.98
Copyright (C) 2010 Free Software Foundation, inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.