テキストファイルをそのまま送信

テキストファイルをそのまま送信

私のテキストファイルには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つの問題があります。

  1. <pre></pre>HTMLマークアップを含むように送信されたファイルを変更します。
  2. 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が期待どおりに固定幅のフォントでテキストを表示することを示しています。

HTML電子メールで送信された事前フォーマットされた単一幅テキスト

答え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::EntitiesPerlモジュールがある場合は、次のように交換できますrecode ..html

perl -Mopen=locale -MHTML::Entities -pe '$_=encode_entities$_'

関連情報