私のテキストファイルには10行がありますが、電子メールのように送信したいと思います。以下のスクリプトは添付ファイルなので、通常の電子メールでは表示されません。受信者は通常の電子メールのようにファイルを読み込みます(添付ファイルはありません)。
#this is the script
#start
#!/bin/sh
cd /path/to/executable-script
./executable-script.sh status -> file.txt
unix2dos file.txt /dev/stdin /dev/stdout && mail -s 'subject' email <
file.txt
#end
出力テキストファイルは次のとおりです。サービスステータス:サービスabcが動作しています。サービス abcxyz が稼働中です。サービス abc 管理者が動作しています。
答え1
頑張ります
unix2dos < file.txt | mail -s 'subject ...' email
どこ
unix2dos
行(LFのみ)をWindowsの末尾(CR / LF)に変換します。- 入力ファイルは標準入力として提供する必要があります。
答え2
説明的な答え
@StéphaneChazelasのコメントに基づく変更が含まれています。回答
一般的な問題は、ほとんどの最新のメールユーザーエージェント(MUA)クライアントがプレーンテキストを固定幅フォント形式で表示しないことです。 Gnome's Evolution、Microsoft Outlook、Mozilla's Thunderbirdなどのスタンドアロンクライアントはさまざまなフォントを使用しています。ほとんどのウェブメールクライアント(Gmailなど)はHTMLを期待して表示します。幸いなことに、事前に書式設定されたテキストブロックを区切るHTMLタグがあります。便宜上、ラベルセットはです<pre></pre>
。残念ながら、Unixはデフォルトmail
でプレーンテキストのEメールを送信します。もしそうなら、解決する必要がある2つの問題があります。
<pre></pre>
HTMLマークアップを含むように送信されたファイルを変更します。content-type
送信したメールをに変更してくださいtext/html
。
HTMLタグを追加するプロセスは簡単です。送信するファイルの<pre>
最初の行の前にタグを追加し、</pre>
最後の行の後にタグを追加します。 HTMLメールを送信する方法を借りました。この回答。
機能スクリプト
これはエラーチェックのない非常に基本的な非プロダクション準備スクリプトです。:
#!/bin/bash
# Requires GNU recode
# Usage:
# ./email_log.sh file_to_send.txt subject recipient
# Set paths and filenames
_dir="."
_infile=$1
_subject=$2
_user=$3
_sendfile="$_dir/send.txt"
# Prepend and append <pre></pre> HTML tags
cat $_infile |recode ..html |sed "1s;^;To: $_user\nSubject: $_subject\nContent-Type: text/html\n<html><body><pre>\n;" > $_sendfile
echo "</pre></body></html>" >> $_sendfile
# Sending html email
cat $_sendfile | /usr/sbin/sendmail -t -oi
# Cleanup
# rm $_sendfile
次のように実行します。
./email_log.sh test_lines.txt "This is a test of sending a text file using <pre> html tags" user1
電子メール全体、コンテンツの種類を示すヘッダー、およびtext/html
追加<pre>
されたタグ:
Return-path: <user1@host>
Envelope-to: user1@host
Delivery-date: Fri, 05 Apr 2019 09:39:03 -0400
Received: from user1 by host with local (Exim 4.92)
(envelope-from <user1@host>)
id 1hCP3f-0000Ie-T6
for user1@host; Fri, 05 Apr 2019 09:39:03 -0400
Subject: This is a test of sending a text file using <pre> html tags
Content-Type: text/html
To: <user1@host>
X-Mailer: mail (GNU Mailutils 3.5)
Message-Id: <E1hCP3f-0000Ie-T6@pots>
From: user1 <user1@host>
Date: Fri, 05 Apr 2019 09:39:03 -0400
X-Evolution-Source: 2e20a156d92decafcdd72e4d7b87e28dd95ed39a
MIME-Version: 1.0
<pre>
1234567890 1234567890
1234
123456
Do not wrap around this line please. Do not wrap around this line please. Do not wrap around this line please. Do not wrap around this line please.
1234567890
_________________________________
< Plain Text content sent as HTML >
---------------------------------
\ ^__^
\ (oo)\_______
(__)\ )\/\
||----w |
|| ||
</pre>
Gnome's Evolutionの電子メール表示は、MUAが期待どおりに固定幅のフォントでテキストを表示することを示しています。
答え3
似ているがより安定したバリエーション@RubberStampmail
メソッド、内部的にHTML形式のEメールを送信し、<pre></pre>
メールクライアントに固定幅のフォントでそのまま表示させる(GNUが必要recode
)。
#! /bin/sh -
PATH=$PATH:/usr/sbin:/usr/lib # adding common locations of sendmail
export PATH
{
printf '%s\n' \
'To: email' \
'Subject: test' \
'MIME-Version: 1.0' \
'Content-Type: text/html' \
'' \
'<html><body><pre>'
/path/to/executable-script/executable-script.sh status |
recode ..html
printf '</pre></body></html>\n'
} | sendmail -t -oi
recode
インストールされていないためインストールできず、システムにHTML::Entities
Perlモジュールがある場合は、次のように交換できますrecode ..html
。
perl -Mopen=locale -MHTML::Entities -pe '$_=encode_entities$_'