2012-04-27 30 views
14

Tôi đã sử dụnglinux mail <file.log có Content-Type: application/octet-stream (một tập tin đính kèm trong Gmail noname)

mail -s "here is a log file" "[email protected]" < log/logfile.log 

nào sử dụng để đi qua với tiêu đề:

User-Agent: Heirloom mailx 12.4 7/29/08 
MIME-Version: 1.0 
Content-Type: text/plain; charset=us-ascii 
Content-Transfer-Encoding: 7bit 

Nhưng bây giờ các tập tin được còn tôi nhận được file đính kèm noname vì với điều này:

User-Agent: Heirloom mailx 12.4 7/29/08 
MIME-Version: 1.0 
Content-Type: application/octet-stream 
Content-Transfer-Encoding: base64 

vì vậy, nếu vẫn thất bại, kiểm tra hướng dẫn 012....

NAME 
     mailx - send and receive Internet mail 

SYNOPSIS 
     mailx [-BDdEFintv~] [-s subject] [-a attachment ] [-c cc-addr] [-b bcc-addr] [-r from-addr] [-h hops] 
       [-A account] [-S variable[=value]] to-addr . . . 

Không ai trong số các tùy chọn này có vẻ hữu ích vậy làm thế nào tôi có thể buộc Content-Type: text/plain?

Trả lời

11

Trang người đàn ông là nơi tốt để bắt đầu! Tiếp tục đọc cho đến khi bạn nhận được phần MIME TYPES, và chú ý những điều sau:

Nếu không, hoặc nếu tên tập tin không có phần mở rộng, các loại nội dung text/plain hoặc application/octet-stream là sử dụng, tệp đầu tiên cho văn bản hoặc tệp văn bản quốc tế, tệp thứ hai cho bất kỳ tệp nào có chứa định dạng char‐ các tác nhân khác với dòng mới và bảng điều khiển theo chiều ngang.

Vì vậy, nếu thư của bạn chứa "ký tự định dạng" (có nghĩa là ký tự điều khiển) ngoài dòng và tab mới, nó sẽ tự động được phân loại là application/octet-stream. Tôi đặt cược rằng nếu bạn nhìn kỹ vào dữ liệu bạn sẽ tìm thấy một số nhân vật điều khiển nổi xung quanh.

Bạn có thể làm việc xung quanh bằng cách này ...

  • Bao gồm các tập tin đăng nhập dưới dạng đính kèm (sử dụng -a) thay vì nội dung thư chính, và thiết lập tập tin ~/.mime.types bạn để xác định *.log file dưới dạng văn bản/trơn.
  • Lọc các ký tự điều khiển bằng cách sử dụng một cái gì đó như tr.
  • Sử dụng một MUA khác như mutt để gửi thư. Trong thực tế, bạn chỉ có thể phác thảo một thông điệp bản thân và gửi trực tiếp đến sendmail:

    (
        echo To: [email protected] 
        echo From: [email protected] 
        echo Subject: a logfile 
        echo 
        cat logfile.log 
    ) | sendmail -t 
    
+0

tr -CD '\ 11 \ 12 \ 15 \ 40 \ 176 ' KCD

+0

Tôi đã nhận thấy rằng nhận xét về các loại mime. Cảm ơn vì cách giải quyết của bạn, bất kỳ cách nào trong số đó sẽ hoạt động tốt nhất – KCD

+0

Cảm ơn bạn. Sử dụng mutt là giải pháp đơn giản hơn. –

2

Trong trường hợp của tôi, kịch bản được gọi là từ cron nơi LC_ * không được định nghĩa và điểm nhấn được hiểu là "kiểm soát chars ". Tôi vừa chèn các dòng sau vào đầu tệp crontab của tôi:

LC_NAME=fr_FR.UTF-8 
LC_ALL=fr_FR.UTF-8 
+0

Hoặc 'en_US.UTF-8' –

3

Tôi gặp một số rắc rối khi chạy tập lệnh email tự động sau khi chuyển sang Ubuntu chính xác 12.04. Tôi không biết, khi Ubuntu (hoặc Debian) trao đổi bsd-mailx chống lại thư gia truyền-mailx, nhưng hai "mail" -commands hành xử rất khác nhau. (Ví dụ: gia truyền sử dụng -a cho tệp đính kèm, trong khi nó được sử dụng cho các tiêu đề bổ sung trong bsd.) Trong trường hợp của tôi gia truyền-mailx đã không thể xác định đáng tin cậy loại Mime và tiếp tục gửi văn bản dưới dạng tệp đính kèm. Đổ lỗi cho tôi vì không làm mất kiểm soát nhân vật hoặc bất cứ điều gì, nhưng tôi không thấy nhiều điểm trong việc thay đổi kịch bản đã làm công việc của họ hoàn hảo trước khi nâng cấp. Vì vậy, nếu bạn thích thiết lập chính Mimetype, bsd-mailx là một giải pháp tốt hơn.

sudo apt-get install bsd-mailx 
sudo apt-get remove heirloom-mailx 

Giải quyết nó cho tôi.

+0

+1 để đề cập đến [gia truyền] (http://heirloom.sourceforge.net/mailx/mailx.1.html). Trên một hệ thống Linux mà không có 'người đàn ông', tôi đã gặp khó khăn trong việc tìm ra 'mailx' nào được sử dụng, vì' mailx -V' chỉ in phiên bản chứ không phải tên hay kiểu của nó. – Qtax

8

Tôi có vấn đề tương tự gần đây và cuối cùng kết thúc với một giải pháp đó là ngắn hơn:

cat -v log/logfile.log | mail -s "here is a log file" "[email protected]" 

Thông tin chi tiết của discussion of cat with mailx.

+0

Tùy chọn -v của mèo thực sự hữu ích vì tôi có thể hiểu tại sao tôi gặp sự cố khi nhận thư của tôi dưới dạng tệp đính kèm. Cảm ơn. – MadJlzz

3

Trên hệ thống RedHat dựa (SL, CentOS, Fedora, vv), bạn sẽ muốn cài đặt bsd-mailx và sau đó thiết lập/etc/alternatives/mail một cách thích hợp:

sudo yum -y install bsd-mailx 
sudo alternatives --set mail /usr/bin/bsd-mailx 

Tất nhiên, bạn có nguy cơ phá vỡ các ứng dụng dựa trên hành vi của gia truyền-mailx nhưng không rõ ràng gọi 'mailx' thay vì 'mail'.

Để hiển thị thông tin về/bin/mail hiện trỏ tới:

sudo alternatives --display mail 

Để kiểm tra đối với các gói mailx cài đặt khác nhau:

sudo rpm -qa *mailx 
Các vấn đề liên quan