2017-05-19 68 views
1

我試圖發送HTML郵件帶有附件,但不工作,僅僅是發送文件如何發送HTML電子郵件附件和sendmail軟件UNIX的ksh

下面的代碼,是用HTML:

message="all the HTML message" 
(
    echo "From: [email protected]"; 
    echo "To: [email protected]"; 
    echo "Subject: Testing HTML with attachment"; 
    echo "Content-Type: text/html"; 
    echo "MIME-Version: 1.0"; 
    echo ""; 
    echo "${message}"; 
) | /usr/sbin/sendmail -t 

,但我嘗試添加這樣的附件:

message="all the HTML message" 
(
    echo "From: [email protected]"; 
    echo "To: [email protected]"; 
    echo "Subject: Testing HTML with attachment"; 
    echo "Content-Type: text/html"; 
    echo "MIME-Version: 1.0"; 
    echo "Content-Transfer-Encoding: base64" 
    echo "Content-Type: application/octet-stream; name=test_file.txt" 
    echo "Content-Disposition: attachment; filename=/directory/myfile" 
    echo ""; 
    echo "${message}"; 
) | /usr/sbin/sendmail -t 

不工作,只發送附件而不需任何可讀的東西...任何想法?

回答

0
echo "Content-Transfer-Encoding: base64" 
... 
echo "${message}"; 

郵件傳統上受限於ASCII數據和998個字符的線的長度。這意味着需要對二進制數據進行編碼以遵守這些限制,並且需要指定編碼類型。指定編碼通過Content-Transfer-Encoding標題完成,該標題正確設置爲base64。問題在於,您不會將數據編碼爲base64,而只是插入原始數據。在這種情況下,大多數郵件客戶端會忽略任何不屬於base64的字符(即A-Za-z0-9/+以外的所有字符)作爲垃圾。其餘的將被視爲base64編碼並進行相應解碼,導致您看到的垃圾數據。

因此,您不應該直接包含${message},而是首先對郵件進行編碼。這可以使用base64 tool(如果可用)或使用uuencode --base64來完成。但使用uuencode,你絕對需要刪除前綴和後綴行,並只保留編碼數據。

除此之外,您應該也可以對HTML消息執行此操作,除非消息已經處於僅限ASCII字符的限制範圍內,並且行長度限制爲998個字符。在大多數情況下,它可能無需編碼工作,但可能會因某些收件人而失敗,具體取決於涉及的郵件服務器和郵件客戶端的功能。