使用uuencode和mailx发送电子邮件附件

时间:2013-12-31 19:12:13

标签: bash email attachment mailx

我正在尝试在家庭网络上安装一个系统,通过电子邮件发送图像(.png)。我得到的最接近的是:

uuencode -m snapshot.png snapshot.png | mailx -r "sending@myremoteserver.net" -s "Snapshot" -S smtp=smtp.myremoteserver.net me@myremoteserver.net

哪收到邮件给我,但输出有点不尽如人意......

begin-base64 755 snapshot.png
AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8A
AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA
(well, you get the idea...)
AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8A
AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/
====

麻烦的是,我必须通过smtp.myremoteserver.net发送。但是我的邮件客户端没有解码图像文件(我在Thunderbird和各种webmail界面中尝试过,结果相同)。有没有更好的实际工作方式?

更新:为了好玩,我跑了这个:

uuencode -m snapshot.png snapshot.png > coded.txt

在解码之后,我得到了一个乱七八糟的,无法看到的混乱。所以问题必须在于uuencoding。

7 个答案:

答案 0 :(得分:2)

在我以前的工作中,mailx程序在-a内置了一个附件选项。

来自http://linux.die.net/man/1/mailx

  

-a file

     

将给定文件附加到邮件中。

然后你不必担心uuencode的东西。我相信您也可以添加多个-a选项来发送多个附件。

不确定此选项出现在哪个版本(我新工作的服务器没有)。

答案 1 :(得分:1)

在ubuntu上,我能够使用

成功发送带附件的邮件
uuncode input_file1.jpg attachment1.jpg >tempfile
uuncode input_file2.jpg attachment2.jpg >>tempfile
cat tempfile | mailx -s "subject" <email>

答案 2 :(得分:1)

我有同样的问题,并通过切换到sendmail修复,sendmail发送mime类型。

mimencode {file} | /usr/sbin/sendmail -t -oi -f {email@domain}

我没有生产mimencode所以我使用的openssl看起来一样:

/usr/bin/openssl base64 -e < {file} | /usr/sbin/sendmail -t -oi -f {email@domain}

如果你有更多的收件人或主题,你可以在管道的开头输入,并在最后添加mimencode输出,例如,

To: {email1} {email2}
Cc: {email3}
Subject: some subject
Mime-Version:1.0


Content-Type: text/plain
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename={filename}
{mimencode output here}

您可以将所有这些输出到文件,然后cat到sendmail管道。

答案 3 :(得分:0)

你只需要摆脱“-m”选项。它适用于Solaris 10作为发件人,outlook / lotus_notes作为邮件客户端。

“-m”表示“begin-base64 ...”,没有“-m”表示正常附件。

尝试:

uuencode snapshot.png snapshot.png | mailx -r "sending@myremoteserver.net" -s "Snapshot" -S smtp=smtp.myremoteserver.net me@myremoteserver.net

希望它有所帮助。

答案 4 :(得分:0)

阅读本文:https://support.microsoft.com/en-us/kb/2590107

你应该使用mimencode。

Mimencode旨在替代邮件和新闻使用的uuencode。原因很简单:uuencode在许多情况和方式下都不能很好地工作。特别是,uuencode使用的字符在所有邮件网关(特别是ASCII&lt; - &gt; EBCDIC网关)中不能很好地转换。此外,uuencode不是标准的 - 有几种变体浮动,以不同和不兼容的方式编码和解码事物,没有基于实现的“标准”。最后,uuencode在管道中通常不能很好地工作,尽管已经修改了一些变体。 Mimencode实现了为MIME定义为uuencode替换的编码,并且对于电子邮件使用应该更加健壮。

答案 5 :(得分:0)

uuencode /pth/to/atch.jpg sendasname.jpg | mailx -s&#34;主题&#34; mail@mail.com

应该做得很好 - 经常在solaris中使用它。

忽略-m开关即可。

答案 6 :(得分:-1)

怎么样

(uuencode -m snapshot.png snapshot.png) | mailx -r "sending@myremoteserver.net" -s "Snapshot" -S smtp=smtp.myremoteserver.net me@myremoteserver.net