2012-06-21 34 views
10

Mục tiêu: Để gửi thư (sử dụng sendmail) với nội dung HTML và tệp đính kèm nhị phân.Sử dụng sendmail cho nội dung HTML và tệp đính kèm nhị phân

Tiếp theo các hướng dẫn quy định tại các liên kết sau đây

http://www.unix.com/shell-programming-scripting/159522-sendmail-html-body-attachment-2.html

http://www.unix.com/shell-programming-scripting/58448-sendmail-attachment.html

Nó được làm việc đến mức đó, hoặc HTML cơ thể hoặc tập tin đính kèm nhị phân với uuencode, nhưng không phải cả hai.

Đưa ra dưới đây là một đoạn mã của kịch bản lệnh shell để sendmail. Với điều này, cơ thể HTML là tốt, nhưng tập tin đính kèm được nhận được mã hóa/giải mã sai và không thể xem giống nhau.

Vui lòng thông báo.

#!/usr/bin/ksh 

export MAILFROM="[email protected]" 
export MAILTO="[email protected]" 
export SUBJECT="Test PDF for Email" 
export BODY="email_body.htm" 
export ATTACH="file.pdf" 
export MAILPART=`uuidgen` ## Generates Unique ID 
(
echo "From: $MAILFROM" 
echo "To: $MAILTO" 
echo "Subject: $SUBJECT" 
echo "MIME-Version: 1.0" 
echo "Content-Type: multipart/mixed; boundary=\"-$MAILPART\"" 
echo "---$MAILPART" 
echo "Content-Type: text/html" 
echo "Content-Disposition: inline" 
cat $BODY 
echo "---$MAILPART" 
echo 'Content-Type: application/pdf; name="'$(basename $ATTACH)'"' 
echo "Content-Transfer-Encoding: base64" 
echo 'Content-Disposition: attachment; filename="'$(basename $ATTACH)'"' 
uuencode -m $ATTACH $(basename $ATTACH) 
echo "---$MAILPART--" 
) | /usr/sbin/sendmail $MAILTO 

Tôi đang sử dụng HP-UX ia64. Đã tìm kiếm thông qua các diễn đàn và trang web và tìm thấy tài liệu tham khảo chủ yếu để PHP, Python, vv

+0

Sử dụng 'mutt -a' dễ dàng hơn nhiều: http://www.mutt.org/doc/man_page.html – ceving

+0

Cảm ơn, nhưng thiết lập máy chủ hiện tại hạn chế tôi chỉ gửi sendmail :-(. mutt không được cài đặt/thiết lập trên máy chủ – compuneo

+0

Gửi email cơ thể HTML có phần đính kèm văn bản thuần túy với sendmail: http://stackoverflow.com/questions/17359/how-do-i-send-a-file-as-an- email-attachment-using-linux-command-line/14213935 # 14213935 –

Trả lời

11

Thay đổi kiểu mã hóa chuyển nội dung trong email từ base64 đến uuencode đã giải quyết được vấn đề. Cảm ơn các yếu tố đầu vào cho đến nay.

Đưa ra dưới đây là kịch bản sửa đổi hoạt động.

#!/usr/bin/ksh 

export MAILFROM="[email protected]" 
export MAILTO="[email protected]" 
export SUBJECT="Test PDF for Email" 
export BODY="email_body.htm" 
export ATTACH="file.pdf" 
export MAILPART=`uuidgen` ## Generates Unique ID 
export MAILPART_BODY=`uuidgen` ## Generates Unique ID 

(
echo "From: $MAILFROM" 
echo "To: $MAILTO" 
echo "Subject: $SUBJECT" 
echo "MIME-Version: 1.0" 
echo "Content-Type: multipart/mixed; boundary=\"$MAILPART\"" 
echo "" 
echo "--$MAILPART" 
echo "Content-Type: multipart/alternative; boundary=\"$MAILPART_BODY\"" 
echo "" 
echo "--$MAILPART_BODY" 
echo "Content-Type: text/plain; charset=ISO-8859-1" 
echo "You need to enable HTML option for email" 
echo "--$MAILPART_BODY" 
echo "Content-Type: text/html; charset=ISO-8859-1" 
echo "Content-Disposition: inline" 
cat $BODY 
echo "--$MAILPART_BODY--" 

echo "--$MAILPART" 
echo 'Content-Type: application/pdf; name="'$(basename $ATTACH)'"' 
echo "Content-Transfer-Encoding: uuencode" 
echo 'Content-Disposition: attachment; filename="'$(basename $ATTACH)'"' 
echo "" 
#uuencode -m $ATTACH $(basename $ATTACH) 
uuencode $ATTACH $(basename $ATTACH) 
echo "--$MAILPART--" 
) > email_`date '+%Y%m%d_%H%M%S'`.out 
| /usr/sbin/sendmail $MAILTO 
+1

Làm cách nào để chúng tôi thực hiện việc này cho nhiều tệp đính kèm? – divinedragon

+0

@divinedragon, bạn lặp lại mã từ 'echo '- $ MAILPART" 'đến trước' echo "- $ MAILPART -" '. Đó là những gì thêm một tập tin đính kèm. –

0

thử thêm một dòng mới sau khi uuencode

và cố gắng cũng không -m

+0

uuencode -m đang thêm một dòng mới ở cuối tự động.Tôi đã thử với -m và nó đã không hoạt động hoặc. Tôi đã thử lại cả hai gợi ý từ bạn và cùng một vấn đề (tệp đính kèm đến, nhưng không hợp lệ) – compuneo

Các vấn đề liên quan