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
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.
Về mailx, bạn có thể tìm thấy một số nguồn cảm hứng ở đây http://www.shelldorado.com/articles/mailattachments.html
tôi sẽ khuyên bạn nên có một cái nhìn tại mutt http://www.mutt.org/
cảm ơn nhưng mutt không được cài đặt ở đó và tôi không có quyền cài đặt nó. Vì vậy, có cách nào khác làm thế nào để giải quyết nó? – slafik
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
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
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.
đây là phép thuật !! – Tian
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. –
'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
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]
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
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
@slafik: hệ thống và hệ điều hành nào, những gì có sẵn? Perl? – ShiDoiSi