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

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

更新 :有一个很好的解决scheme,使用mutt代替:

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

使用uuencode的例子:

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

和参考文章:

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

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

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

普通的旧mail可以做到这一点。 不需要其他软件:

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

ctrl + d当你完成键入。

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

 -a file Attach the given file to the message. 

很简单,对吧?

我的答案需要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 
 mailx -a /path/to/file email@address 

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

“mpack -a -s”嘿:这可以作为你的报告吗? -m 0 -c应用程序/ x-tar-gz survey_results.tar.gz hesco@example.net

mpack和munpack与metamail一起工作来扩展mailx,并使其适用于现代电子邮件杂乱的HTML标记和附件。

这四个软件包合在一起将允许您处理您在gui邮件客户端中的任何电子邮件。

使用Ubuntu 10.4,这是如何编写mutt解决scheme

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

用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中。

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

(道歉贫穷的交叉链接或归因,我是新来的论坛)

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

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

邮件-A文件名-s“主题”email@example.com

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

在Linux上,我会build议,

#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的第二个参数相同。

我使用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.