Jawaban:
Ada banyak versi berbeda mail
. Ketika Anda melampaui mail -s subject to1@address1 to2@address2 <body
(untuk mengirim, itu semua jaminan POSIX - dan bahkan -s
tidak ada di masa lalu ), mereka cenderung memiliki opsi baris perintah yang berbeda. Menambahkan tajuk tambahan tidak selalu mudah.
Dengan beberapa mailx
implementasi, misalnya dari mailutils
Ubuntu atau Debianbsd-mailx
, mudah, karena ada opsi untuk itu.
mailx -a 'Content-Type: text/html' -s "Subject" to@address <test.html
Dengan Heirloom mailx
, tidak ada cara yang nyaman. Satu kemungkinan untuk memasukkan header yang berubah-ubah adalah dengan mengatur editheaders=1
dan menggunakan editor eksternal (yang bisa berupa skrip).
## 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"
Dengan POSIXmailx
umum , saya tidak tahu cara mendapatkan header.
Jika Anda akan menggunakan mail
atau mailx
, ingatlah itu
mail
dan mailx
.mail
dan mailx
memperlakukan baris yang dimulai dengan ~
sebagai perintah. Jika Anda memasukkan teks ke dalam mail
, Anda perlu mengatur agar teks ini tidak mengandung baris yang diawali dengan ~
.Jika Anda tetap akan menginstal perangkat lunak, Anda mungkin juga menginstal sesuatu yang lebih dapat diprediksi daripada mail
/ Mail
/ mailx
. Misalnya, mutt . Dengan Mutt, Anda dapat memasok sebagian besar header di input dengan -H
opsi, tetapi tidakContent-Type
, yang perlu diatur melalui opsi mutt.
mutt -e 'set content_type=text/html' -s 'hello' 'to@address' <test.html
Atau Anda bisa memohon sendmail
langsung. Ada beberapa versi di sendmail
luar sana, tetapi mereka semua mendukung sendmail -t
untuk mengirim surat dengan cara yang paling sederhana, membaca daftar penerima dari surat. (Saya pikir mereka tidak semua mendukung Bcc:
.) Pada sebagian besar sistem, sendmail
tidak seperti biasanya $PATH
, ada di /usr/sbin
atau /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
Dengan mailx Heirloom, cara yang mudah adalah
mailx -s "$(echo -e "Newsletter issue 3\nContent-Type: text/html")" user@server.com < /tmp/htmlmail.txt
Terima kasih, Bung
Diuji pada Fedora 17, dan bekerja
Anda harus menambahkan Content-Type
tajuk ke email Anda untuk mewujudkannya.
echo "<html><b>Hello</b></html>" | mail -a "Content-type: text/html;" -s "Testing" me@example.com
akan bekerja
mailx
? Itu mungkin memiliki opsi. Jika itu tidak berhasil. Jika itu tidak berhasil, Anda dapat mempertimbangkan menggunakan mutt meskipun saya tidak tahu apa yang harus dilakukan oleh baris perintah.
Dengan heirloom-mailx Anda dapat mengubah program sendmail menjadi skrip hook Anda, ganti header di sana dan kemudian gunakan sendmail.
Skrip yang saya gunakan ( ~/bin/sendmail-mailx-hook
):
#!/bin/bash
sed '1,/^$/{
s,^\(Content-Type: \).*$,\1text/html; charset=utf-8,g
s,^\(Content-Transfer-Encoding: \).*$,\18bit,g
}' | sendmail $@
Script ini mengubah nilai-nilai di header surat sebagai berikut:
Content-Type:
untuk text/html; charset=utf-8
Content-Transfer-Encoding:
ke 8bit
(tidak yakin apakah ini benar-benar diperlukan).Untuk mengirim email HTML:
mailx -Ssendmail='~/bin/sendmail-mailx-hook' -s "subject" xxxxx@gmail.com < test.html
Metode ini lebih efektif daripada yang diusulkan oleh @Gilles karena tidak membuat file sementara dan hanya memperbaiki aliran on-the-fly.
Saya telah menggunakan skrip di bawah ini untuk terjadi
#!/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
Bagi saya, saya perlu menentukan variabel seperti SMTP server, sehingga perintah mail bekerja dengan cara di bawah ini. Saya mencari di banyak posting, dan saya menemukan properti di bawah ini untuk mengubah tubuh menjadi teks / html. Sekarang email yang saya terima adalah dalam format HTML.
Content-Disposition: inline
Versi Unix: Red Hat Enterprise Linux Server rilis 6.6 (Santiago)
Pertama. Buat informasi apa pun yang diperlukan ke dalam skrip (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>"
Kedua. Pipa skrip itu ke perintah email
./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
Dengan melakukan ini saya mendapatkan informasi seperti di bawah ini di email:
Content-Disposition: inline Pesan-ID: User-Agent: Heirloom mailx 12.4 7/29/08 MIME-Versi: 1.0 Tipe-Konten: teks / polos; charset = us-ascii Content-Transfer-Encoding: 7bit Value1 Value2
Value1 dan Value2 sesuai dengan penandaan HTML yang dilakukan di testSql.sh
cat htmlfile.html | mail -s "subject" xx@example.com