2011-06-20 12 views
9

Tôi cần gửi một tập tin qua mailx hoặc mail, nhưng tôi sẽ gửi nó dưới dạng tập tin đính kèm không có trong thông báo nội dung. Có cách nào để làm điều đó không? Cuối cùng là có bất kỳ công cụ khác trong solaris có thể được sử dụng cho các thủ tục như vậy? Cảm ơncách gửi email qua mailx kèm theo tập tin đính kèm

Trả lời

0

Tôi muốn recommend using mutt cho thiết bị đủ nhẹ để cài đặt nhanh chóng trên bất kỳ hệ thống nào.

+0

Tôi không có mutt ở đó và không có khả năng để cài đặt nó. Có cách nào để gửi tệp đó qua mailx hoặc thư không? Tôi đã thử qua công cụ thư nhưng nó không hoạt động, tôi có nghĩa là tập tin được gửi trong cơ thể của thư và đó là không đủ cho tôi. bất kỳ ý tưởng? – slafik

+0

@slafik: hệ thống và hệ điều hành nào, những gì có sẵn? Perl? – ShiDoiSi

12

Bạn có thể đính kèm tập tin vào mailx sử dụng -a như vậy

echo "this is the body of the email" | mailx -s"Subject" -a attachment.jpg [email protected] 

miễn là trong cùng thư mục với tệp đính kèm của bạn sẽ hoạt động tốt. Nếu không bạn chỉ có thể nêu các thư mục như `

samachPicsFolder/samachpic.jpg 
+0

Nếu bạn có 'mailx' hỗ trợ' -a', tốt cho bạn. Nếu bạn không, có thể nhìn vào 'mutt'. Nếu bạn không muốn phụ thuộc bên ngoài và cần phải di động trên nền tảng U * x, bạn sẽ phải viết một vài dòng kịch bản. – tripleee

2

Nếu bạn mailx không hỗ trợ tùy chọn -a và bạn không có quyền truy cập vào mutt, và bạn không muốn chuyển sang uuencode như một dự phòng từ những năm 1980, như một phương sách cuối cùng, bạn có thể ghép lại với nhau một gói nhỏ MIME.

#!/bin/sh 

# ... do some option processing here. The rest of the code 
# assumes you have subject in $subject, file to be attached 
# in $file, recipients in $recipients 

boundary="${RANDOM}_${RANDOM}_${RANDOM}" 

(
    cat <<____HERE 
Subject: $subject 
To: $recipients 
Mime-Version: 1.0 
Content-type: multipart/related; boundary="$boundary" 

--$boundary 
Content-type: text/plain 
Content-transfer-encoding: 7bit 

____HERE 

    # Read message body from stdin 
    # Maybe apply quoted-printable encoding if you anticipate 
    # overlong lines and/or 8-bit character codes 
    cat 

    cat <<____HERE 

--$boundary 
Content-type: application/octet-stream; name="$file" 
Content-disposition: attachment; filename="$file" 
Content-transfer-encoding: base64 

____HERE 

    # If you don't have base64 you will have to reimplement that, too /-: 
    base64 "$file" 

    cat <<____HERE 
--$boundary-- 
____HERE 

) | sendmail -oi -t 

Đường dẫn đến sendmail thường phụ thuộc vào hệ thống. Hãy thử /usr/sbin/sendmail hoặc /usr/lib/sendmail hoặc ... vô số địa điểm kỳ lạ khác nếu nó không nằm trong số PATH của bạn.

Điều này nhanh chóng và bẩn; để tuân thủ đúng MIME, bạn nên làm RFC2047 mã hóa đối tượng nếu cần thiết, v.v., và xem thêm ghi chú trong các chú thích trong mã. Nhưng đối với công việc cron tiếng Anh trung bình 7-bit ở Mỹ của bạn, nó sẽ làm tốt.

+0

đây là phép thuật !! – Tian

+0

Tuyệt vời !!! Cảm ơn!! Kịch bản này hoạt động tốt cho tất cả các tệp văn bản. Tôi chưa thử hình ảnh. –

+0

'base64' sẽ hoạt động tốt đối với bất kỳ loại nội dung nào, các biến chứng dự kiến ​​sẽ chủ yếu là nếu bạn không thể tìm ra giá trị chính xác để đặt vào phần tiêu đề' Content-Type: 'của phần thân phần đính kèm. – tripleee

0

Hãy thử sử dụng lệnh này để gửi một tập tin đính kèm sử dụng mailx:

uuencode source_file encoded_filename |mailx -m -s "Subject" [email protected] 
+1

Bạn có thể giải thích câu trả lời của mình không? Đặc biệt, tại sao sử dụng uuencode, khi email sử dụng chủ yếu là base64 cho tệp đính kèm? Tại sao không sử dụng tùy chọn '-a' cho mailx? – Robert