Câu trả lời:
Có nhiều phiên bản khác nhau mail
xung quanh. Khi bạn đi xa hơn mail -s subject to1@address1 to2@address2 <body
(để gửi, đó là tất cả các đảm bảo POSIX - và thậm chí -s
không tồn tại trong những ngày xưa ), họ có xu hướng có các tùy chọn dòng lệnh khác nhau. Thêm một tiêu đề bổ sung không phải lúc nào cũng dễ dàng.
Với một số mailx
triển khai, ví dụ như từ mailutils
trên Ubuntu hoặc Debianbsd-mailx
, thật dễ dàng, bởi vì có một tùy chọn cho điều đó.
mailx -a 'Content-Type: text/html' -s "Subject" to@address <test.html
Với Gia truyền mailx
, không có cách nào thuận tiện. Một khả năng để chèn các tiêu đề tùy ý là đặt editheaders=1
và sử dụng trình soạn thảo bên ngoài (có thể là tập lệnh).
## Prepare a temporary script that will serve as an editor.
## This script will be passed to ed.
temp_script=$(mktemp)
cat <<'EOF' >>"$temp_script"
1a
Content-Type: text/html
.
$r test.html
w
q
EOF
## Call mailx, and tell it to invoke the editor script
EDITOR="ed -s $temp_script" heirloom-mailx -S editheaders=1 -s "Subject" to@address <<EOF
~e
.
EOF
rm -f "$temp_script"
Với một POSIXmailx
chung , tôi không biết làm thế nào để có được tiêu đề.
Nếu bạn sẽ sử dụng bất kỳ mail
hoặc mailx
, hãy nhớ rằng
mail
và mailx
.mail
và mailx
xử lý các dòng bắt đầu bằng ~
các lệnh. Nếu bạn chuyển văn bản vào mail
, bạn cần sắp xếp để văn bản này không chứa các dòng bắt đầu bằng ~
.Nếu bạn vẫn sẽ cài đặt phần mềm, bạn cũng có thể cài đặt một cái gì đó dễ dự đoán hơn mail
/ Mail
/ mailx
. Ví dụ, mutt . Với Mutt, bạn có thể cung cấp hầu hết các tiêu đề trong đầu vào với -H
tùy chọn, nhưng khôngContent-Type
, cần phải được đặt thông qua tùy chọn mutt.
mutt -e 'set content_type=text/html' -s 'hello' 'to@address' <test.html
Hoặc bạn có thể gọi sendmail
trực tiếp. Có một số phiên bản sendmail
ngoài kia, nhưng tất cả đều hỗ trợ sendmail -t
để gửi thư theo cách đơn giản nhất, đọc danh sách người nhận từ thư. (Tôi nghĩ rằng tất cả họ đều không hỗ trợ Bcc:
.) Trên hầu hết các hệ thống, sendmail
không phải thông thường $PATH
, nó nằm trong /usr/sbin
hoặc /usr/lib
.
cat <<'EOF' - test.html | /usr/sbin/sendmail -t
To: to@address
Subject: hello
Content-Type: text/html
EOF
#!/bin/sh
(
echo "To: me@example.com"
echo "Subject: hello"
echo "Content-Type: text/html"
echo
echo "<html><b><font size='7'>H</font>ello</b></html>"
echo
) | /usr/sbin/sendmail -t
Với mailx gia truyền, cách thuận tiện là
mailx -s "$(echo -e "Newsletter issue 3\nContent-Type: text/html")" user@server.com < /tmp/htmlmail.txt
Cảm ơn, Dude đã
thử nghiệm trên Fedora 17, và đã làm việc
Bạn sẽ phải thêm Content-Type
tiêu đề vào email của bạn để thực hiện điều này.
echo "<html><b>Hello</b></html>" | mail -a "Content-type: text/html;" -s "Testing" me@example.com
sẽ làm việc
mailx
không Điều đó có thể có tùy chọn. Nếu điều đó không làm việc. Nếu điều đó không hiệu quả, bạn có thể cân nhắc sử dụng mutt mặc dù tôi không biết tay dòng lệnh sẽ làm gì.
Với gia truyền-mailx, bạn có thể thay đổi chương trình sendmail thành tập lệnh hook của mình, thay thế các tiêu đề ở đó và sau đó sử dụng sendmail.
Kịch bản tôi sử dụng ( ~/bin/sendmail-mailx-hook
):
#!/bin/bash
sed '1,/^$/{
s,^\(Content-Type: \).*$,\1text/html; charset=utf-8,g
s,^\(Content-Transfer-Encoding: \).*$,\18bit,g
}' | sendmail $@
Tập lệnh này thay đổi các giá trị trong tiêu đề thư như sau:
Content-Type:
đến text/html; charset=utf-8
Content-Transfer-Encoding:
đến 8bit
(không chắc chắn nếu điều này thực sự cần thiết).Để gửi email HTML:
mailx -Ssendmail='~/bin/sendmail-mailx-hook' -s "subject" xxxxx@gmail.com < test.html
Phương pháp này hiệu quả hơn so với đề xuất của @Gilles vì nó không tạo các tệp tạm thời và chỉ sửa lỗi khi đang di chuyển.
Tôi đã sử dụng các kịch bản dưới đây để xảy ra
#!/bin/ksh
(
echo "To: yourmail@domain.com"
echo "Subject: Job Status"
echo "Content-Type: text/html"
echo
echo "<html>
<head>
<title>Status of the jobs during the day</title>
<style>
table, th, td {
border: 1px solid blue;
border-collapse: collapse;
}
th, td {
padding: 5px;
}
</style>
</head>
<body>
<table style='width:100%'>
<tr bgcolor='#808080'>
<th>Job Name</th>
<th>System name</th>
<th>Status</th>
</tr>
<tr>
<td>Job-1</td>
<td>Sys</td>
<td>Sucess</td>
</tr>
<tr>
<td>Job-2</td>
<td>sys</td>
<td>Failure</td>
</tr>
<tr>
<td>Job-3</td>
<td>sys</td>
<td>Sucess</td>
</tr>
</table>
</body></html>"
echo
) | /usr/sbin/sendmail -t
Đối với tôi, tôi cần chỉ định một biến như máy chủ SMTP, vì vậy lệnh mail hoạt động theo kiểu bên dưới. Tôi đã tìm kiếm trên nhiều bài viết, và tôi tìm thấy bên dưới tài sản để chuyển đổi nội dung thành văn bản / html. Bây giờ email tôi nhận được ở định dạng HTML.
Bố trí nội dung: nội tuyến
Phiên bản Unix: Red Hat Enterprise Linux Server phát hành 6.6 (Santiago)
Đầu tiên. Tạo bất cứ thông tin nào là cần thiết vào một tập lệnh (testSql.sh)
echo "<html><body><pre>"
mysql -u USERNAME -pPASSWORD -P PORTNUMBER -h HOSTNAME DBNAME --table -e "select columns from tablename where member in ('value1','value2')"
echo "</pre></body></html>"
Thứ hai. Đặt đoạn script đó vào lệnh mail
./testSql.sh | mail -v -S smtp=smtp://IP:PORTNUMBER -s "$(echo -e "This is the subject\nContent-Type: text/ht ml\nMIME-Version: 1.0\nContent-Disposition: inline")" userid@email.com
Bằng cách này, tôi nhận được thông tin như dưới đây trong email:
Bố trí nội dung: Nội dung Tin nhắn-ID: Tác nhân người dùng: Gia truyền mailx 12.4 7/29/08 MIME-Phiên bản: 1.0 Loại nội dung: văn bản / thuần túy; charset = us-ascii Nội dung-Chuyển-Mã hóa: 7 bit Giá trị1 Giá trị2
Value1 và Value2 theo cách gắn thẻ HTML được thực hiện trong testSql.sh
cat htmlfile.html | mail -s "subject" xx@example.com