2017-05-19 13 views
1

내가 첨부 파일이있는 HTML 이메일을 보내려고하지만, 작동하지 않는 경우, 바로 다음 코드는 HTML 작동 파일

을 보내는 KSH :

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 개 문자의 선 길이에 전통적으로 제한됩니다. 이것은 바이너리 데이터가 이러한 제한을 준수하도록 인코딩되어야하고 인코딩 유형을 지정해야한다는 것을 의미합니다. 인코딩을 지정하면 base64으로 올바르게 설정 한 Content-Transfer-Encoding 헤더를 사용하여 인코딩을 지정합니다. 문제는 데이터를 base64로 인코딩하지 않고 원본 데이터를 삽입한다는 것입니다. 이 경우 대부분의 메일 클라이언트는 base64에 속하지 않는 문자 (예 : A-Za-z0-9/+ 외부의 모든 문자)를 가비지로 무시합니다. 나머지는 base64 인코딩으로 처리되고 그에 따라 디코딩되어 사용자가 볼 수있는 정크 데이터가됩니다.

따라서 ${message}을 직접 포함하지 말고 먼저 메시지를 인코딩해야합니다. 가능한 경우 base64 tool을 사용하거나 uuencode --base64을 사용하여이 작업을 수행 할 수 있습니다. 그러나 uuencode를 사용하면 접두어와 접미사 줄을 제거하고 인코딩 된 데이터 만 유지해야합니다.

메시지가 이미 ASCII 문자 및 제한 길이 998 자 이내로 제한되지 않는 한 HTML 메시지에서도이 작업을 수행해야합니다. 대부분의 경우 인코딩없이 작동하지만 메일 클라이언트의 기능과 메일 서버에 따라 일부 수신자가 실패 할 수 있습니다.