2011-03-22 50 views
8

Tôi muốn gửi tệp HTML dưới dạng nội dung thư và muốn đính kèm nhiều tệp văn bản vào email này.Cách gửi email nội dung HTML có nhiều tệp đính kèm văn bản bằng cách sử dụng sendmail

Vì tệp html cần được gửi, sendmail phải được sử dụng (tôi không thể làm điều đó bằng cách sử dụng mailx).

Làm cách nào để gửi email cơ thể HTML và nhiều tệp đính kèm văn bản bằng sendmail?

Trả lời

0

Tôi không nghĩ rằng sendmail sẽ giúp bạn với điều đó. Tìm một khách hàng như mutt và thực hiện mutt -a file1 -a file2 -- [email protected]. Hoặc truy cập perl.

+0

Không phải tất cả các hệ thống sẽ có khả năng cài đặt mutt, vì vậy lời khuyên của bạn không phải là rất hữu ích cho ai đó có nhu cầu sử dụng sendmail hoặc mailx, như là câu hỏi :) – stevepastelan

+0

@stevepastelan Sendmail chỉ đơn giản là không thể làm được nó mà không cần thêm công cụ. Những công cụ bạn chọn tùy thuộc vào bạn. – ShiDoiSi

+1

Nhưng tất nhiên, sendmail * có thể * làm điều đó. Nó chỉ là một câu hỏi về cách định dạng nội dung để chuyển sang sendmail. – stevepastelan

9

Giả sử bạn có uunecode có sẵn trong hệ thống của bạn, bạn có thể gửi email với nhiều file đính kèm như thế này:

#!/bin/bash 

... 
... 
... 
BOUNDARY="=== This is the boundary between parts of the message. ===" 

{ 
    echo "From: $MAILFROM" 
    echo "To: $MAILTO" 
    echo "Subject:" $SUBJECT 
    echo "MIME-Version: 1.0" 
    echo "Content-Type: MULTIPART/MIXED; " 
    echo " BOUNDARY="\"$BOUNDARY\" 
    echo 
    echo "  This message is in MIME format. But if you can see this," 
    echo "  you aren't using a MIME aware mail program. You shouldn't " 
    echo "  have too many problems because this message is entirely in" 
    echo "  ASCII and is designed to be somewhat readable with old " 
    echo "  mail software." 
    echo 
    echo "--${BOUNDARY}" 
    echo "Content-Type: TEXT/PLAIN; charset=US-ASCII" 
    echo 
    echo "This email comes with multiple attachments." 
    echo 
    echo 
    echo "--${BOUNDARY}" 
    echo "Content-Type: application/zip; charset=US-ASCII; name="${ZIPFILE} 
    echo "Content-Disposition: attachment; filename="`basename ${ZIPFILE}` 
    echo 
    uuencode $ZIPFILE $ZIPFILE 
    echo 
    echo "--${BOUNDARY}--" 
    echo "Content-Type: application/pdf; charset=US-ASCII; name="${PDFFILE} 
    echo "Content-Disposition: attachment; filename="`basename ${PDFFILE}` 
    echo 
    uuencode $PDFFILE $PDFFILE 
    echo 
    echo "--${BOUNDARY}--" 
} | /usr/lib/sendmail -t 
+0

Thư được gửi từ phương pháp được đề xuất ở trên có thể gửi tệp đính kèm, nhưng nó được nhận dưới dạng tệp được mã hóa trong ứng dụng thư khách Outlook. Làm thế nào để gửi các tập tin như vậy mà nó nhận được như là một tập tin giải mã như kết thúc của người nhận? – greperror

0

Dưới đây là một kịch bản bash tôi sử dụng để gửi báo cáo tôi tạo ra cho người dân. Chúng được gửi dưới dạng tệp đính kèm. Đặt HTML của bạn vào biến "body" của tập lệnh. Tôi sẽ để lại parametrization của các biến cho bạn.

#!/bin/bash 

function get_mimetype(){ 
file --mime-type "$1" | sed 's/.*: //' 
} 

from="[email protected]" 
to="[email protected]" 
subject="Your Report my Lord" 
boundary="=== Boundary ===" 
body="The reports are attached to this email" 
declare -a attachments 
attachments=("fileOne.out" "fileTwo.out" "fileThree.out" "file-et-cetera.out") 

# Build headers 
{ 

printf '%s\n' "From: $from 
To: $to 
Subject: $subject 
Mime-Version: 1.0 
Content-Type: multipart/mixed; boundary=\"$boundary\" 

--${boundary} 
Content-Type: text/plain; charset=\"US-ASCII\" 
Content-Transfer-Encoding: 7bit 
Content-Disposition: inline 

$body 
" 

for file in "${attachments[@]}"; do 

     [ ! -f "$file" ] && echo "Attachment $file not found, omitting file" >&2 && continue 

     mimetype=$(get_mimetype "$file") 

    printf '%s\n' "--${boundary} 
Content-Type: $mimetype 
Content-Transfer-Encoding: base64 
Content-Disposition: attachment; filename=\"$file\" 
    " 

    base64 "$file" 
    echo 
done 

# print last boundary with closing -- 
printf '%s\n' "--${boundary}--" 

} | sendmail -t -oi 
Các vấn đề liên quan