bil*_*kar 3 linux sendmail uuencode
我正在尝试使用sendmail发送带附件的邮件.问题是我无法发送主题行.
以下命令行触发两个邮件而不是一个 - 一个带有" Subject : Report",另一个带有附件:
/usr/bin/gmime-uuencode "/tmp/url_by_ip.txt" "Report.txt" | echo "Subject: Report" | /usr/sbin/sendmail <sender> <receiver>
Run Code Online (Sandbox Code Playgroud)
如果你可以使用其他命令,我建议mutt哪些可以很容易地处理附件:
mutt -a file_to_attach -s "your subject" recipient@test.com < /tmp/mail_content
Run Code Online (Sandbox Code Playgroud)
如果你坚持下去,/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
Run Code Online (Sandbox Code Playgroud)
当然,如果您乐意使用更高级别的脚本语言(Python,Ruby,Perl,......),那么现有的模块将会为您提供繁重的工作.
ps还有一个mpack实用程序可以为你进行MIME转换,但AFAIK在大多数*nix框中都不是默认的.
| 归档时间: |
|
| 查看次数: |
25919 次 |
| 最近记录: |