如何在Linux上使用mail命令附加文件? [重复]

问题描述 投票:0回答:13

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

linux unix shell email
13个回答
52
投票

使用 uuencode 的示例:

uuencode surfing.jpeg surfing.jpeg | mail [email protected]

以及参考文章:

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

注:

您可以

apt install sharutils
拥有
uuencode
命令


26
投票

mail
在我尝试过的每个版本的现代 Linux 上都可以做到这一点。无需其他软件:

matiu@matiu-laptop:~$ mail -a doc.jpg [email protected]
Subject: testing

This is a test
EOT

输入完毕后按 ctrl+d。


22
投票
$ echo | mutt -a syslogs.tar.gz [email protected]

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


13
投票

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

-a file
     Attach the given file to the message.

很简单,对吧?


12
投票

我的答案除了邮件之外还需要base64,但是某些uuencode版本也可以使用-m进行base64,或者您可以忘记mime并使用纯uuencode输出...

   [email protected]
   [email protected]
   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

7
投票
mailx -a /path/to/file email@address

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


4
投票
mpack -a \
    -s"Hey: might this serve as your report?" \
    -m 0 -c application/x-tar-gz \
    survey_results.tar.gz \
    [email protected]

mpack
munpack
metamail
一起扩展
mailx
并使其在充斥着 HTML 标记和附件的现代电子邮件中发挥作用。

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


2
投票

使用ubuntu 10.4,mutt解决方案是这样写的

echo | mutt -a myfile.zip -- [email protected]


1
投票

这里有很多使用 mutt 或 mailx 的答案,或者有人说邮件不支持“-a”

首先,mailutils 的 Ubuntu 14.0.4 邮件支持此功能:

邮件 -A 文件名 -s“主题”[电子邮件受保护]

其次,我发现通过使用“man mail”命令并搜索“attach”


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" [email protected] < out-${DT_STAMP}.mail

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

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 "[email protected] [email protected]"

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

uudecode abc.gz.enc

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


0
投票

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

echo 'here you put the message body' | mail -A syslogs.tar.gz [email protected]

如果您想知道您的邮件命令是否来自 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.

0
投票

使用 mailx 你可以做到:

mailx -s "My Subject"  -a ./mail_att.csv -S [email protected]  [email protected] < ./mail_body.txt

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

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

(对糟糕的交叉链接或归因表示歉意,我是该网站的新手。)

© www.soinside.com 2019 - 2024. All rights reserved.