Yanıtlar:
mail
Çevresinde birçok farklı versiyonları vardır . Ötesine geçtiğinizde mail -s subject to1@address1 to2@address2 <body
(göndermek için, tüm POSIX garantileri - ve eski günlerde bile -s
mevcut değildi ), farklı komut satırı seçeneklerine sahip olma eğilimindedirler. Ek bir başlık eklemek her zaman kolay değildir.
Bazılarında mailx
örneğin uygulamalarda, gelen mailutils
Ubuntu veya Debian enbsd-mailx
bunun için bir seçenek var, çünkü, bu kolaydır.
mailx -a 'Content-Type: text/html' -s "Subject" to@address <test.html
Heirloom ile mailx
uygun bir yol yoktur. İsteğe bağlı başlıklar eklemek için bir olasılık editheaders=1
(bir komut dosyası olabilir) harici bir editör ayarlamak ve kullanmaktır.
## 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"
Genel bir POSIX ilemailx
, başlıklara nasıl gireceğimi bilmiyorum.
Herhangi birini kullanacaksanız mail
ya da mailx
aklınızda bulundurun.
mail
ve mailx
.mail
ve komutlarla mailx
başlayan satırları ele alır ~
. Metni içine aktarırsanız mail
, bu metinden başlayarak satır içermemesi için düzenleme yapmanız gerekir ~
.Yine de yazılımı yükleyecekseniz, mail
/ Mail
/ öğesinden daha öngörülebilir bir şey yükleyebilirsiniz mailx
. Örneğin, mutt . Mutt ile, birlikte girdi en başlıklarını sağlayabilmektedir -H
seçeneği değil amaContent-Type
bir ahmak seçeneği üzerinden ayarlanması gerekir, hangi.
mutt -e 'set content_type=text/html' -s 'hello' 'to@address' <test.html
Veya sendmail
doğrudan başvurabilirsiniz . sendmail
Dışarıda birkaç versiyon var, ancak hepsi sendmail -t
en basit şekilde bir posta göndererek, postaların alıcı listesini okuyarak destek veriyorlar . (Hepsinin desteklemediğini düşünüyorum Bcc:
.) Çoğu sistemde, sendmail
normalde değil $PATH
, içinde /usr/sbin
veya de /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
Heirloom mailx ile uygun yol
mailx -s "$(echo -e "Newsletter issue 3\nContent-Type: text/html")" user@server.com < /tmp/htmlmail.txt
Teşekkürler, Dostum
Fedora 17'de Test Edildi ve Çalıştı
Bunun gerçekleşmesi Content-Type
için e-postanıza başlık eklemeniz gerekir.
echo "<html><b>Hello</b></html>" | mail -a "Content-type: text/html;" -s "Testing" me@example.com
çalışacak
mailx
? Bu seçeneğe sahip olabilir. Bu işe yaramazsa. Bu işe yaramazsa, komut satırının ne yapmak için el değiştirdiğini bilmeme rağmen mutt kullanmayı düşünebilirsiniz.
Heirloom-mailx ile sendmail programını hook betiğinize değiştirebilir, oradaki başlıkları değiştirebilir ve daha sonra sendmail'i kullanabilirsiniz.
Kullandığım script ( ~/bin/sendmail-mailx-hook
):
#!/bin/bash
sed '1,/^$/{
s,^\(Content-Type: \).*$,\1text/html; charset=utf-8,g
s,^\(Content-Transfer-Encoding: \).*$,\18bit,g
}' | sendmail $@
Bu komut dosyası, posta başlığındaki değerleri aşağıdaki gibi değiştirir:
Content-Type:
için text/html; charset=utf-8
Content-Transfer-Encoding:
için 8bit
(bu gerçekten gerekli olup olmadığından emin değilim).HTML e-posta göndermek için:
mailx -Ssendmail='~/bin/sendmail-mailx-hook' -s "subject" xxxxx@gmail.com < test.html
Bu yöntem @Gilles tarafından önerilenlerden daha etkilidir, çünkü geçici dosyalar oluşturmaz ve sadece akışı anında düzeltir.
Aşağıdaki komut dosyalarını kullanmak için kullandım
#!/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
Benim için SMTP sunucusu gibi bir değişken belirtmem gerekiyordu, bu yüzden mail komutu aşağıdaki şekilde çalıştı. Birçok gönderide arama yaptım ve cesedi text / html biçimine dönüştürmek için aşağıdaki özelliği buldum. Şimdi aldığım e-posta HTML biçiminde.
İçerik Eğilimi: satır içi
Unix sürümü: Red Hat Enterprise Linux Sunucu sürümü 6.6 (Santiago)
İlk. Bir komut dosyasında gereken bilgileri oluşturun (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>"
İkinci. Bu komut dosyasını posta komutuna aktar
./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
Bunu yaparak e-postada aşağıdaki gibi bilgileri alıyorum:
İçerik Eğilimi: satır içi Mesaj Kimliği: Kullanıcı-Temsilcisi: Heirloom mailx 12.4 7/29/08 MIME Sürümü: 1.0 İçerik Türü: text / plain; charset = us-ascii İçerik Aktarımı-Kodlaması: 7bit Değer1 Değer2
TestSql.sh içinde yapılan HTML etiketlemeye göre Value1 ve Value2
cat htmlfile.html | mail -s "subject" xx@example.com