it-swarm-tr.com

Linux 'mail' komutunu kullanarak HTML e-postasını nasıl gönderirim?

mail -s "subject" [email protected] <test.html çalışıyor, ancak yalnızca düz metin e-posta için.

mail Linux komutunu kullanarak HTML e-postası göndermenin doğru yolu nedir?

71
pyth0ner

mail'nin birçok farklı sürümü var. mail -s subject [email protected] [email protected] <body Öğesinin ötesine geçtiğinizde (göndermek için hepsi bu POSIX garantiler - ve hatta -seski günler ), farklı komut satırı seçeneklerine sahip olma eğilimindedirler. Ek bir başlık eklemek her zaman kolay değildir.

  • Bazı mailx uygulamalarıyla, ör. buntu'daki mailutils'dan veya Debian'ın bsd-mailx , kolaydır, çünkü bunun için bir seçenek vardır.

    mailx -a 'Content-Type: text/html' -s "Subject" [email protected] <test.html
    
  • Hatıramailx ile uygun bir yol yoktur. Rasgele üstbilgiler eklemek için bir olasılık, editheaders=1 Ayarlayıp harici bir düzenleyici (komut dosyası olabilir) 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" [email protected] <<EOF
    ~e
    .
    EOF
    rm -f "$temp_script"
    
  • Genel bir POSIX mailx ile, başlıklara nasıl ulaşacağımı bilmiyorum.

Herhangi bir mail veya mailx kullanacaksanız,

  • Belirli bir Linux dağıtımında bile taşınabilir değildir. Örneğin, hem Ubuntu hem de Debian'ın mail ve mailx için birkaç alternatifi vardır.
  • Bir ileti oluştururken, mail ve mailx~ İle başlayan satırları komut olarak kabul eder. Metni mail içine koyarsanız, bu metnin ~ İle başlayan satırları içermemesini sağlamanız gerekir.

Yine de yazılımı yükleyecekseniz, mail/Mail/mailx 'dan daha öngörülebilir bir şey de yükleyebilirsiniz. Örneğin, mutt . Mutt ile girişteki çoğu üstbilgiyi mutt seçeneği ile ayarlanması gereken -H Seçeneği olan ancak Content-Type ile sağlayabilirsiniz.

mutt -e 'set content_type=text/html' -s 'hello' '[email protected]' <test.html

Veya doğrudan sendmail öğesini çağırabilirsiniz. Dışarıda sendmail'ın birkaç sürümü var, ancak hepsi postadan alıcıların listesini okuyarak en basit şekilde bir posta göndermeyi sendmail -t Destekliyor. (Sanırım hepsi Bcc: 'U desteklemiyor.) Çoğu sistemde, sendmail her zamanki $PATH Değil, /usr/sbin Veya /usr/lib.

cat <<'EOF' - test.html | /usr/sbin/sendmail -t
To: [email protected]
Subject: hello
Content-Type: text/html

EOF
#!/bin/sh

(
echo "To: [email protected]"
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
14
Code Improver

Heirloom mailx ile kolay yol

mailx -s "$(echo -e "Newsletter issue 3\nContent-Type: text/html")" [email protected] < /tmp/htmlmail.txt

Teşekkürler, Dostum
Fedora 17'de test edildi ve çalıştı

7
daniel

Content-Type Bunun için e-postanıza gidin.

echo "<html><b>Hello</b></html>" | mail -a "Content-type: text/html;" -s "Testing" [email protected]

çalışacak

5
Noufal Ibrahim

Heirloom-mailx ile sendmail programını hook betiğinize değiştirebilir, oradaki başlıkları değiştirebilir ve sendmail'i kullanabilirsiniz.

Kullandığım komut dosyası (~/bin/sendmail-mailx-hook):

#!/bin/bash

sed '1,/^$/{
s,^\(Content-Type: \).*$,\1text/html; charset=utf-8,g
s,^\(Content-Transfer-Encoding: \).*$,\18bit,g
}' | sendmail [email protected]

Bu komut dosyası, posta üstbilgisindeki değerleri aşağıdaki gibi değiştirir:

  • Content-Type: ila text/html; charset=utf-8
  • Content-Transfer-Encoding: ila 8bit (bunun gerçekten gerekli olup olmadığından emin değilim).

HTML e-postası göndermek için:

mailx -Ssendmail='~/bin/sendmail-mailx-hook' -s "subject" [email protected] < test.html

Bu yöntem @Gilles tarafından önerilenden daha etkilidir, çünkü geçici dosyalar oluşturmaz ve akışı anında düzeltir.

3
loentar

Aşağıdaki komut dosyalarını kullanmak için kullandım

#!/bin/ksh

(
echo "To: [email protected]"
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
1
Bhabatosh

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 yazı arasında arama yaptım ve gövdeyi metne/html'ye dönüştürmek için özelliğin altında buldum. Şimdi aldığım e-posta HTML biçiminde.

İçerik-Elden Çıkarma: satır içi

Unix sürümü: Red Hat Enterprise Linux Server sürüm 6.6 (Santiago)

İlk. Komut dosyasına gereken bilgileri oluşturma (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 bağlama

./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")" [email protected]

Bunu yaparak e-postada aşağıdaki bilgileri alırım:

İçerik-Elden Çıkarma: satır içi İleti Kimliği: Kullanıcı-Aracı: Heirloom mailx 12.4 7/29/08 MIME-Sürüm: 1.0 İçerik Türü: metin/düz; charset = us-ascii İçerik-Transfer-Kodlama: 7bit 
 
 Değer1 Değer2

TestSql.sh dosyasında yapılan HTML etiketlemesine göre Değer1 ve Değer2

0
Vaibhav

Başka bir iş parçacığında yayınlandı, ancak temel olarak mail/mailx (12.5+) sürümümüzde, posta için -a parametresi artık bir ek eklediğinden ve ek başlıklar için herhangi bir yedek parametre bulamadığım için artık çalışmıyor. ben sendmail kullanmalıydım.

Aşağıda, bizim için çalışan bash betiğimizde çalıştırmak için oluşturduğum basit bir 1 astar var. Temel olarak Content-Type: metin/html, konu ve gövde ve çalışır geçer.

printf "Content-Type: text/html\nSubject: Test Email\nHTML BODY<b>test bold</b>" | sendmail <Email Address To>

Bir değişkenten tüm bir html sayfası oluşturmak istiyorsanız, bash betiğinde kullandığım alternatif bir yöntem, değişkeni aşağıdaki gibi geçirmekti.

emailBody="From: <Email Address From>
Subject: Test
Content-Type: text/html; charset=\"us-ascii\"
<html>
<body>
body
<b> test bold</b>

</body>
</html>
"
echo "$emailBody" | sendmail <Email Address To>
0
Miburi