3

sendmail を使用して添付ファイル付きのメールを送信しようとしています。問題は、これと一緒に件名を送信できないことです。

次のコマンド ラインは、1 通ではなく 2 通のメールを送信します。1 つは " Subject : Report" で、もう 1 つは添付ファイルです。

/usr/bin/gmime-uuencode "/tmp/url_by_ip.txt" "Report.txt" | echo "Subject: Report" | /usr/sbin/sendmail <sender> <receiver>
4

4 に答える 4

9

他のコマンドを使用できる場合は、mutt添付ファイルを非常に簡単に処理できるコマンドをお勧めします。

mutt -a file_to_attach -s "your subject" recipient@test.com < /tmp/mail_content

行き詰まっている/usr/sbin/sendmail場合は、やるべきことがたくさんあります。sendmail添付ファイルの概念がなく、メール コンテンツをフラットな US-ASCII テキストとして扱います (詳細については、この回答を参照してください)。

添付ファイルを送信するにsendmailは、メール コンテンツを MIME メッセージとしてフォーマットする必要があります。いくつかの例については、unix.com のこのフォーラム スレッドを参照してください。


理解を深めるために、 bash を使用した未テストの簡単な例を示します。簡潔にするために、変数をハードコーディングしましたが、この例を、関連する変数を引数として受け取るスクリプト/関数に簡単に変換できます。

#!/bin/bash
# --- user params ---
MAILFROM="peter.gibbons@initech.com"
MAILTO="bill.lumbergh@initech.com"
SUBJECT="TPS Report"
BODY_FILE="/home/peter/coversheey.txt"  # file holding mail body
ATT_FILE="/tnp/url_by_ip.txt"   # file to attach
ATT_AS_FILE="Report.txt"   # name to attach as

# --- generated values ---
BOUNDARY="unique-boundary-$RANDOM"
BODY_MIMETYPE=$(file -ib $BODY_FILE | cut -d";" -f1)   # detect mime type
ATT_MIMETYPE=$(file -ib $ATT_FILE | cut -d";" -f1)     # detect mime type
ATT_ENCODED=$(base64 < $ATT_FILE)  # encode attachment

# --- generate MIME message and pipe to sendmail ---
cat <<EOF | /usr/sbin/sendmail $MAILTO
MIME-Version: 1.0
From: $MAILFROM
To: $MAILTO
Subject: $SUBJECT
Content-Type: multipart/mixed; boundary="$BOUNDARY"

--$BOUNDARY
Content-Type: $BODY_MIMETYPE
Content-Disposition: inline

$(cat $BODY_FILE)
--$BOUNDARY
Content-Type: $ATT_MIMETYPE; name="$ATT_AS_FILE"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="$ATT_AS_FILE"

$ATT_ENCODED
--$BOUNDARY
EOF

もちろん、より高度なスクリプト言語 (Python、Ruby、Perl など) を使用することに満足している場合は、すでに面倒な作業を行ってくれる既存のモジュールが用意されています。

ps MIME 変換を行うmpackユーティリティもありますが、私の知る限り、ほとんどの *nix ボックスにはデフォルトで付属していません。

于 2011-11-09T10:16:37.817 に答える
2

たとえば、mail.txt のようなメール ヘッダーを含むファイルを作成します。

Subject: here is the subject

メールを送信するスクリプトは次のとおりです。

#!/bin/bash
cat mail.txt > mail_to_send
cat attachment | uuencode attachment >> mail_to_send
sendmail recipient@example.com < mail_to_send
rm mail_to_send
于 2012-11-17T14:21:21.027 に答える
0

おそらく、いくつかのユーティリティでMIMEメールを送信したいですか? vime C++ ライブラリがあり、多くのスクリプト言語 (Python、Ruby、Perl、Ocaml など) には MIME 用のパッケージがあります。mpackなどのシェル スクリプトで使用できるコマンドもあります。

于 2011-11-09T09:58:42.517 に答える
0

これを試して:

mail -s 'Report' myemail@yahoo.com < tmp/url_by_ip.txt

于 2011-11-09T09:52:47.887 に答える