誰でもシェルスクリプトを使用して、メール本文にhtmlテーブル形式で次のデータを送信するのに役立ちますか?サンプルファイル
abcd "this is to test" 123
csdf "another test" 10000
以下のスクリプトを作成しましたが、2番目の列の値にスペースが含まれている場合は中断されます。
echo "send an email"
awk 'BEGIN {
print "<html><body><table border=1 cellspacing=0 cellpadding=3>"
print "<tr>"
print "<td>date</td>";
print "<td>name</td>";
print "<td>total</td>";
print "</tr>"
} {
print "<tr>"
print "<td>"$1"</td>";
print "<td>"$2"</td>";
print "<td>"$3"</td>";
print "</tr>"
} END {
print "</table></body></html>"
} ' sample.txt >> sample.html
(
echo "To: [email protected]"
echo "MIME-Version: 1.0"
echo "Subject:$v_subject"
echo "Content-Type: text/html"
cat sample.html
) | sendmail -t
答え1
代わりに、awk
適切なツールの使用を検討してください。
csv
適切なCSVパーサーを使用して読み取りhtml
テンプレートエンジンを使用してコードからテンプレートを分離します。
私は両方提供するオプションを選択したいのですが、python
選択の問題です。
以下は実際の例です。
-->script.py
#!/usr/bin/env python
import csv
from jinja2 import Template
import sys
templ = '''<html>
<body>
<table border=1 cellspacing=0 cellpadding=3>
<tr>
<td>date</td>
<td>name</td>
<td>total</td>
</tr>
{% for row in rows %}<tr>
{% for col in row %}<td>{{col}}</td>{% endfor %}
</tr>{% endfor %}
</table>
</body></html>
'''
with open(sys.argv[1]) as csvfile:
rows = list(csv.reader(csvfile, delimiter=' '))
tm = Template(templ)
print(tm.render(rows=rows))
- 走る
python script.py sample.csv > sample.html
- 便宜上、コードにテンプレートを文字列として含めました。別々のテンプレートファイルを使用することを検討する必要があります。
- もちろん、以下から直接Eメールを送信することもできます
python
。 :-)
あなたは必要かもしれませんインストールするjinja2
:
pip install jinja2