首页 > 解决方案 > 将输出文件发送到邮件而不更改数据

问题描述

我有一个来自脚本的名为result的输出文件,如下所示:

|first_t          |   PASS        |
|second_t       |   PASS        |
|third_t      |   File_Error  |

我使用下面的命令按顺序获取输出,如下所示:

column -t -s " " result > result_new

|first_t   |  PASS        |
|second_t  |  PASS        |
|third_t   |  File_Error  |

并且在使用下面的邮件命令将result_new文件发送到邮件后,如以下脚本所示,我没有得到预期的输出。

#!/bin/bash
mail -s "COLUMN CHECK_1"  name@gmail.com < result_new

我在邮件中收到此输出:

|first_t          |   PASS        |
|second_t       |   PASS        |
|third_t      |   File_Error  |

我在邮件中的预期输出应该是这样的:

|first_t   |  PASS        |
|second_t  |  PASS        |
|third_t   |  File_Error  |

有人能告诉我我应该在这里做什么吗?

标签: linuxbashshellemail

解决方案


我假设问题出在(接收)电子邮件客户端,并且它使用可变宽度字体显示消息(例如,空格不如字母宽);为了解决这个问题,我可以想到几个选项:

  • 将输出作为 ascii 文本文件附件发送(用户需要使用 ascii 文本阅读器打开附件 - 例如,、、vimnotepad
  • MIME + 'text/html'格式化传出电子邮件(例如,电子邮件 - 例如,,,,,任何指向您的系统等;这也假设(接收)电子邮件客户端能够显示sendmail编码mailx消息)muttmailMIME

我在发送电子邮件(从 linux 到 Windows/Mac 用户)时使用的一个简单sendmail示例,我希望将电子邮件的内容显示为固定宽度的文本:

$ subject="this is the subject  of my email"
$ emlist="list_of_email_addresses"
$ mailfile=$(mktemp)

$ echo "Subject: ${subject}
MIME-Version: 1.0
Content-Type: text/html
<html><body><pre>"              >  "${mailfile}"
cat result_new                  >> "${mailfile}"
echo "</pre></body></html>"     >> "${mailfile}"

$ cat ${mailfile} | /usr/sbin/sendmail ${emlist}
$ 'rm' -rf "${mailfile}"

如果您无权访问,sendmail那么您可能需要对您的邮件(发送)程序进行一些测试,以了解如何发送MIME编码消息......


推荐阅读