मैं linux 'mail' कमांड का उपयोग करके HTML ईमेल कैसे भेज सकता हूँ?


66

mail -s "subject" xxxxx@gmail.com <test.html काम करता है, लेकिन केवल सादे पाठ ईमेल के लिए।

लिनक्स कमांड का उपयोग करके HTML ईमेल भेजने का सही तरीका क्या है mail?

जवाबों:


61

mailआसपास कई अलग-अलग संस्करण हैं । जब आप आगे बढ़ते हैं mail -s subject to1@address1 to2@address2 <body(भेजने के लिए, वह सभी POSIX गारंटी है - और यहां तक -sकि पुराने दिनों में मौजूद नहीं था ), तो वे अलग-अलग अनुभाग विकल्प रखते हैं। एक अतिरिक्त हेडर जोड़ना हमेशा आसान नहीं होता है।

  • कुछ के साथ mailxकार्यान्वयन, जैसे से mailutilsUbuntu पर या डेबियन केbsd-mailx , यह आसान है कि के लिए एक विकल्प है क्योंकि।

    mailx -a 'Content-Type: text/html' -s "Subject" to@address <test.html
    
  • Heirloom के साथ mailx, कोई सुविधाजनक तरीका नहीं है। editheaders=1बाहरी हेडर डालने की एक संभावना बाहरी संपादक को सेट करना और उसका उपयोग करना है (जो एक स्क्रिप्ट हो सकती है)।

    ## 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"
    
  • एक सामान्य POSIX के साथmailx , मुझे नहीं पता कि हेडर कैसे प्राप्त करें।

यदि आप किसी भी mailया का उपयोग करने जा रहे हैं mailx, तो ध्यान रखें कि

  • यह किसी दिए गए लिनक्स वितरण के भीतर भी पोर्टेबल नहीं है। उदाहरण के लिए, उबंटू और डेबियन दोनों के लिए mailऔर कई विकल्प हैं mailx
  • जब एक संदेश की रचना, mailऔर आदेशों के mailxसाथ शुरू होने वाली रेखाओं का व्यवहार करता है ~। यदि आप पाठ को पाइप करते हैं mail, तो आपको इस पाठ की व्यवस्था करने की आवश्यकता है, जिसमें शुरुआत के साथ लाइनें न हों ~

यदि आप वैसे भी सॉफ़्टवेयर इंस्टॉल करने जा रहे हैं, तो आप mail/ Mail/ से अधिक पूर्वानुमानित कुछ भी इंस्टॉल कर सकते हैं mailx। उदाहरण के लिए, उत्परिवर्तन । मट के साथ, आप -Hविकल्प के साथ इनपुट में अधिकांश हेडर की आपूर्ति कर सकते हैं , लेकिन नहींContent-Type , जिसे म्यूट विकल्प के माध्यम से सेट करने की आवश्यकता है।

mutt -e 'set content_type=text/html' -s 'hello' 'to@address' <test.html

या आप sendmailसीधे आह्वान कर सकते हैं। वहाँ से sendmailबाहर कई संस्करण हैं , लेकिन वे सभी sendmail -tमेल से प्राप्तकर्ताओं की सूची को पढ़ते हुए, सरलतम तरीके से एक मेल भेजने के लिए समर्थन करते हैं । (मुझे लगता है कि वे सभी समर्थन नहीं करते हैं Bcc:।) अधिकांश प्रणालियों sendmailमें, सामान्य रूप से नहीं है $PATH, यह अंदर है /usr/sbinया है /usr/lib

cat <<'EOF' - test.html | /usr/sbin/sendmail -t
To: to@address
Subject: hello
Content-Type: text/html

EOF

उपरोक्त म्यूट उदाहरण का उपयोग करने की कोशिश की; फ़ाइल नाम के लिए वास्तविक मूल्यों को प्रतिस्थापित करते हुए, ईमेल पते आदि के लिए, लेकिन "कोई प्राप्तकर्ता निर्दिष्ट नहीं किया गया" मुझे म्यूट करने के लिए बहुत नया है, @ क्या आप जानते हैं कि ऐसा क्यों हुआ होगा? (ओक्स पर्वत सिंह, म्यूटब्र 1.5.21 होमबॉव के माध्यम से स्थापित)
चक वैन डेर लिंडेन

मेरी दूसरी पंक्ति "टू: myaddress@mycompany.com" थी (फ़ॉर्मेटिंग की कमी के लिए खेद है, प्रतिक्रिया में संभव नहीं, वास्तविक पाठ उद्धरण उद्धरण था) और मैंने ईओएफ में डालने से पहले एक खाली लाइन शामिल की। वहाँ विन्यास होगा मुझे म्यूट करने की आवश्यकता है? आपके द्वारा दिए गए उदाहरण (उचित मूल्यों के साथ) दिए गए उदाहरण को आजमाने से पहले मैंने जो किया था वह था 'काढ़ा स्थापित म्यूट'
चक वैन डेर लिंडेन

@ChuckvanderLinden एक नया प्रश्न पूछें। आपके द्वारा चलाए गए सटीक कमांड और पूर्ण त्रुटि संदेश को कॉपी-पेस्ट करें। देखें कि आप इंटरेक्टिव इंटरफ़ेस का उपयोग करके म्यूट से कोई ईमेल भेज सकते हैं या नहीं।
गाइल्स

मैं 'इंटरेक्टिव' इंटरफ़ेस के माध्यम से कुछ भेजने में सक्षम था, इसने शुरुआत में एक मेल निर्देशिका के गुम होने की शिकायत की और इसे बनाने की पेशकश की। याद दिलाया कि मुझे विम से कितनी नफरत है;; लेकिन इसे भेजने के लिए मिला। मैं एक नया प्रश्न शुरू करूंगा क्योंकि यह प्रारूप आदि के लिए आसान है। सटीक त्रुटि संदेश सिर्फ मैंने कहा था "कोई प्राप्तकर्ता निर्दिष्ट नहीं किया गया था।"
चक वैन डेर लिंडन


13
#!/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

5
यह एकान्त उपयोग नहीं करता है mail

3
@ user16144 नहीं, लेकिन यह एक अच्छा विकल्प है जिसे ओपी विचार करना चाह सकता है।
त्रिकूट

हां, यह मेल का उपयोग नहीं करता है, लेकिन यह हर जगह काम करता है मैंने इसे आज़माया है जो अन्य समाधानों के लिए मैं जितना कह सकता हूं उससे अधिक है।
user1683793

मैक पर भी खूबसूरती से काम करता है।
असीम जालिस

7

हीरलूम मेलएक्स के साथ, सुविधाजनक तरीका है

mailx -s "$(echo -e "Newsletter issue 3\nContent-Type: text/html")" user@server.com < /tmp/htmlmail.txt

धन्यवाद, दोस्त
ने फेडोरा 17 पर परीक्षण किया, और काम किया


1
चीकी। मुझें यह पसंद है। : -]
एलिस्टेयर इर्विन

1
खबरदार कि यह समाधान "कंटेंट-टाइप: टेक्स्ट / html" और "कंटेंट-टाइप: टेक्स्ट / प्लेन", और संभावित विसंगतियों दोनों को ईमेल कर सकता है , अगर आप इस तरह का इस्तेमाल करते हैं ताकि आप इसे निर्दिष्ट कर सकें।
स्किप्पी ले ग्रांड गौरौ

5

ऐसा करने के Content-Typeलिए आपको अपने ईमेल में हेडर जोड़ना होगा।

echo "<html><b>Hello</b></html>" | mail -a "Content-type: text/html;" -s "Testing" me@example.com

काम करेगा


2
मेल: गैरकानूनी विकल्प - a
pyth0ner

क्या आपके पास है mailx? इसका विकल्प हो सकता है। अगर वह काम नहीं करता है। यदि वह काम नहीं करता है, तो आप उत्परिवर्तन का उपयोग करने पर विचार कर सकते हैं, हालांकि मुझे यह पता नहीं है कि कमांड लाइन स्विच क्या करता है।
नौफल इब्राहिम

1
यदि मेल सरसों को नहीं काट रहा है, तो अजगर का उपयोग करें ... docs.python.org/library/email-examples.html उदाहरण 3 एक या # 6 है जो आपकी आवश्यकता के अनुरूप है।
sdolgy

अजगर को आपको एक स्क्रिप्ट लिखने (और बनाए रखने) की आवश्यकता होगी। एक कमांड लाइन वन लाइनर के अलग-अलग फायदे हैं।
नौफल इब्राहिम

मेरे पास mailx है, लेकिन "विकल्प -a" काम नहीं करता है, फिर भी दिखाता है: मेल: अवैध विकल्प - a
pyth0ner

3

हिरलूम-मेलक्स के साथ आप अपने हुक लिपि में सेंडमेल प्रोग्राम को बदल सकते हैं, वहां हेडर बदल सकते हैं और फिर सेंडमेल का उपयोग कर सकते हैं।

मेरे द्वारा उपयोग की जाने वाली स्क्रिप्ट ( ~/bin/sendmail-mailx-hook):

#!/bin/bash

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

यह स्क्रिप्ट मेल हेडर में दिए गए मानों को इस प्रकार बदलती है:

  • Content-Type: सेवा text/html; charset=utf-8
  • Content-Transfer-Encoding:करने के लिए 8bit(यकीन है कि अगर यह वास्तव में जरूरत है नहीं)।

HTML ईमेल भेजने के लिए:

mailx -Ssendmail='~/bin/sendmail-mailx-hook' -s "subject" xxxxx@gmail.com < test.html

यह विधि @Gilles द्वारा प्रस्तावित की तुलना में अधिक प्रभावी है क्योंकि यह अस्थायी फ़ाइलों को नहीं बनाता है और बस ऑन-द-फ्लाई को ठीक करता है।


1

मैंने नीचे दी गई स्क्रिप्ट का उपयोग करने के लिए किया है

#!/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

0

मेरे लिए मुझे SMTP सर्वर जैसे चर को निर्दिष्ट करने की आवश्यकता थी, इसलिए मेल कमांड ने नीचे के फैशन में काम किया। मैंने कई पोस्ट खोजे, और मैंने शरीर को टेक्स्ट / html में बदलने के लिए संपत्ति के नीचे पाया। अब जो ईमेल मुझे मिलता है वह HTML फॉर्मेट में है।

सामग्री-विवाद: इनलाइन

यूनिक्स संस्करण: Red Hat Enterprise Linux सर्वर रिलीज़ 6.6 (सैंटियागो)

प्रथम। स्क्रिप्ट में जो भी जानकारी चाहिए वह बनाएं (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>"

दूसरा। उस स्क्रिप्ट को मेल कमांड पर पाइप करें

./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

ऐसा करने से मुझे ईमेल में नीचे दी गई जानकारी मिलती है:

सामग्री-विवाद: इनलाइन संदेश-आईडी: उपयोगकर्ता-एजेंट: Heirloom mailx 12.4 7/29/08 MIME- संस्करण: 1.0 सामग्री-प्रकार: पाठ / सादा; charset = us-ascii सामग्री-अंतरण-एन्कोडिंग: 7bit

मान १ मान २

TestSql.sh में किए गए HTML टैगिंग के अनुसार मान 1 और मान 2


-5
cat htmlfile.html | mail -s "subject" xx@example.com

5
नहीं। यह शरीर में HTML के साथ एक टेक्स्ट ईमेल भेजेगा।
नौफल इब्राहिम
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.