mail -s "subject" xxxxx@gmail.com <test.html
ใช้งานได้ แต่สำหรับอีเมลข้อความธรรมดาเท่านั้น
วิธีที่ถูกต้องในการส่งอีเมล HTML โดยใช้คำสั่ง Linux mail
คืออะไร
mail -s "subject" xxxxx@gmail.com <test.html
ใช้งานได้ แต่สำหรับอีเมลข้อความธรรมดาเท่านั้น
วิธีที่ถูกต้องในการส่งอีเมล HTML โดยใช้คำสั่ง Linux mail
คืออะไร
คำตอบ:
มีรุ่นที่แตกต่างของอยู่mail
รอบ ๆ เมื่อคุณไปไกลกว่านั้นmail -s subject to1@address1 to2@address2 <body
(สำหรับการส่งนั่นคือการรับประกันPOSIXทั้งหมด- และแม้-s
ไม่มีในสมัยก่อน ) พวกเขามักจะมีตัวเลือกบรรทัดคำสั่งที่แตกต่างกัน การเพิ่มส่วนหัวเพิ่มเติมนั้นไม่ใช่เรื่องง่ายเสมอไป
ด้วยmailx
การใช้งานบางอย่างเช่นจากmailutils
UbuntuหรือDebian'sbsd-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"
ด้วยPOSIXmailx
ทั่วไปฉันไม่รู้ว่าจะไปที่ส่วนหัวได้อย่างไร
หากคุณกำลังจะใช้ใด ๆmail
หรือmailx
จำไว้ว่า
mail
mailx
mail
และmailx
ปฏิบัติต่อบรรทัดที่ขึ้นต้นด้วย~
คำสั่ง หากคุณข้อความท่อเข้าไปคุณจะต้องจัดให้มีข้อความนี้ไม่ได้ที่จะมีเส้นเริ่มต้นด้วยmail
~
หากคุณกำลังจะติดตั้งซอฟต์แวร์ต่อไปคุณอาจรวมทั้งการติดตั้งสิ่งที่คาดการณ์มากขึ้นกว่าmail
/ /Mail
mailx
ตัวอย่างเช่นคนโง่ ด้วย Mutt คุณสามารถจัดหาส่วนหัวในอินพุตด้วย-H
ตัวเลือกแต่ไม่Content-Type
จำเป็นต้องตั้งค่าผ่านตัวเลือก mutt
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
#!/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 วิธีที่สะดวกคือ
mailx -s "$(echo -e "Newsletter issue 3\nContent-Type: text/html")" user@server.com < /tmp/htmlmail.txt
ขอบคุณเพื่อน
ทดสอบที่ Fedora 17 และทำงาน
คุณจะต้องเพิ่มContent-Type
ส่วนหัวในอีเมลของคุณเพื่อให้สิ่งนี้เกิดขึ้น
echo "<html><b>Hello</b></html>" | mail -a "Content-type: text/html;" -s "Testing" me@example.com
จะทำงาน
mailx
? นั่นอาจมีตัวเลือก หากไม่ได้ผล หากไม่ได้ผลคุณสามารถลองใช้ mutt ได้แม้ว่าฉันจะไม่ทราบว่าบรรทัดคำสั่งเปลี่ยนไปทำอะไร
ด้วย heirloom-mailx คุณสามารถเปลี่ยนโปรแกรม sendmail เป็น hook script ของคุณแทนที่ส่วนหัวที่นั่นแล้วใช้ sendmail
สคริปต์ที่ฉันใช้ ( ~/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 เพราะมันไม่ได้สร้างไฟล์ชั่วคราวและเพียงแค่แก้ไขกระแสข้อมูลแบบทันที
ฉันใช้สคริปต์ด้านล่างนี้แล้ว
#!/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
สำหรับฉันฉันจำเป็นต้องระบุตัวแปรเช่นเซิร์ฟเวอร์ SMTP ดังนั้นคำสั่ง mail จึงทำงานในรูปแบบด้านล่าง ฉันค้นหาจากหลาย ๆ โพสต์และฉันพบด้านล่างคุณสมบัติเพื่อแปลงเนื้อหาให้เป็นข้อความ / html ตอนนี้อีเมลที่ฉันได้รับอยู่ในรูปแบบ HTML
การจัดการเนื้อหา: แบบอินไลน์
รุ่น Unix: เซิร์ฟเวอร์ Linux Red Hat Enterprise รุ่น 6.6 (Santiago)
เป็นครั้งแรก สร้างข้อมูลใดก็ตามที่จำเป็นในสคริปต์ (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>"
ที่สอง ไพพ์สคริปต์นั้นไปยังคำสั่ง 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
โดยทำเช่นนี้ฉันได้รับข้อมูลด้านล่างในอีเมล:
การจัดการเนื้อหา: แบบอินไลน์ข้อความ -ID: User-Agent: Heirloom mailx 12.4 7/29/08 MIME-Version: 1.0 Content-Type: text / plain; charset = us-ascii การเข้ารหัสการถ่ายโอนเนื้อหา: 7 บิต ค่า 1 มูลค่า 2
Value1 และ Value2 ตามการติดแท็ก HTML ที่ทำใน testSql.sh
cat htmlfile.html | mail -s "subject" xx@example.com