2010-05-18 2 views
2

올바른 순서로 SMTP 멀티 파트 메시지를 작성하여 아이폰 메일 클라이언트 (올바르게 GMail에서 렌더링)에서 올바르게 렌더링하는 방법을 알고 싶습니다.JavaMail에 이미지 및 일반 첨부 파일이 포함 된 전자 메일을 보내려면 어떻게해야합니까?

나는 다음과 같은 부품이 포함 된 이메일을 구축 할 수있는 javamail을 사용하고 있습니다 :

  • 콘텐츠 형식이 "text/html로, UTF-8"이있는 신체 부위
  • 포함 된 이미지 첨부.
  • 첨부 파일

내가 (SSL을 통해) Gmail의 SMTP를 통해 메일을 보내고 및 메일을 보내 Gmail 계정을 사용하여 정확하게 렌더링하지만, 메일이 아이폰 메일 클라이언트에서 제대로 렌더링하지 않습니다 . iPhone 메일 클라이언트에서 이미지는 나중에 렌더링되어야 할 때 "이미지 전"텍스트 전에 렌더링됩니다. "Before Image"텍스트 다음에 물음표가있는 아이콘이 나타납니다 (참조 된 CID를 찾을 수 없다고 가정합니다). 이것이 iPhone 메일 클라이언트의 제한 사항인지 또는 메일 전송 코드의 버그인지는 확실하지 않습니다.

아마 내 파트의 헤더가 잘못되었거나 잘못된 순서로 멀티 파트를 제공하고있는 것 같습니다. 포럼의 회원 나를를 전달할 수 있다면 난 당신이 나를 도와 수없는 경우

Message-ID: <[email protected]> 
Subject: =?UTF-8?Q?Test_from_=E3=82=AF=E3=83=AA=E3=82=B9?= 
MIME-Version: 1.0 
Content-Type: multipart/mixed; 
    boundary="----=_Part_0_20870565.1274154021755" 

------=_Part_0_20870565.1274154021755 
Content-Type: application/octet-stream 
Content-Transfer-Encoding: base64 
Content-ID: <20100518124021763_368238_0> 

iVBORw0K ----- TRIMMED FOR CONCISENESS 
6p1VVy4alAAAAABJRU5ErkJggg== 
------=_Part_0_20870565.1274154021755 
Content-Type: text/html; charset=UTF-8 
Content-Transfer-Encoding: 7bit 

<html><head><title>Employees Favourite Foods</title> 
<style> 
     body { font: normal 8pt arial; } 
     th { font: bold 8pt arial; white-space: nowrap; } 
     td { font: normal 8pt arial; white-space: nowrap; } 
</style></head><body> 

     Before Image<br><img src="cid:20100518124021763_368238_0"> 
     After Image<br><table border="0"> 
<tr> 
<th colspan="4">Employees Favourite Foods</th> 
</tr> 
<tr> 
<th align="left">Name</th><th align="left">Age</th><th align="left">Tel.No</th><th align="left">Fav.Food</th> 
</tr> 
<tr style="background-color:#e0e0e0"> 
<td>Chris</td><td>34</td><td>555-123-4567</td><td>Pancakes</td> 
</tr> 
</table></body></html> 
------=_Part_0_20870565.1274154021755 
Content-Type: text/plain; charset=us-ascii; name=textfile.txt 
Content-Transfer-Encoding: 7bit 
Content-Disposition: attachment; filename=textfile.txt 

This is a textfile with numbers counting from one to ten beneath this line: 
one 
two 
three 
four 
five 
six 
seven 
eight 
nine 
ten(no trailing carriage return) 
------=_Part_0_20870565.1274154021755-- 

에도 correc 파일을 렌더링의 Gmail에 의해 출력으로 수신 된 메일의 텍스트를 (포함, 나는 그것을 감사하겠습니다 인라인 이미지 (안 외부 하이퍼 링크 된 이미지하지만)을 포함 (비 개인) 메일. 난 그냥 나는이지나 이동할 수 있습니다 작업 예제를 찾을 필요가있다.

감사합니다,

크리스.

답변

1

되세요 당신은 사양을 정의하는 RFC 2822를 읽습니다. requ 이메일에 대한 irements? 필자는이 글을 읽지 않았기 때문에 여러 부분으로 구성된 전자 메일을 언급 할 지 모르겠지만 시작할 수있는 좋은 곳 일 수 있습니다. 애플은 표준을 고수하는 것에 꽤 능숙한 것 같다.

http://www.faqs.org/rfcs/rfc2822.html

1

는 미안 화상 부분에서 base64 인코딩 된 임의의 콘텐츠 처리를 볼 수 없음. 아마 이것을 인라인으로 설정해야합니다. 여기에 파일 이름을 포함시킬 수도 있고, 더 많은 옵션이 있습니다 (그 파일들을 찾으세요).

예 : 그것은 당신이뿐만 아니라 응용 프로그램/octet-stream을에 콘텐츠 형식을 설정하는 약간 맛없어 보인다

Content-Disposition: inline; filename="inlineimage1.gif" 

, 당신은 단지 올바른 형식이 설정할 수 있습니다.

예 :

Content-Type: image/gif; name="inlineimage1.gif" 
0

사람이에 실수를 한단다 경우 - 여기에 멀티 파트가되어야한다 방법은 다음과 같습니다

  • 다중/혼합 (텍스트 및 첨부 파일이 포함 된 것)

    • multipart/alternative (텍스트 및 HTML 포함)

      • 텍스트/일반 (일반 텍스트)
      • 다중/관련 (HTML + 포함 된 이미지)
        • 텍스트/HTML (HTML 콘텐츠, SRC = "CID : XXX"로 참조 이미지
        • image1에 (컨텐츠 ID : XXX)
        • 이미지 2
        • ...
    • 첨부 2
    • 첨부 한
    • ...
관련 문제