HTML 이메일에 이미지 포함 저장하고 링크 만

gif 이미지가 포함 된 멀티 파트 / 관련 html 이메일을 보내려고합니다. 이 이메일은 Oracle PL / SQL을 사용하여 생성됩니다. 이미지가 빨간색 X로 표시되면서 내 시도가 실패했습니다 (Outlook 2007 및 yahoo 메일).

나는 한동안 html 이메일을 보내 왔지만 이제 내 요구 사항은 이메일에 여러 gif 이미지를 사용하는 것입니다. 웹 서버 중 하나에 저장하고 링크 만 할 수 있지만 많은 사용자 이메일 클라이언트가 자동으로 표시하지 않으며 각 이메일에 대해 설정을 변경하거나 수동으로 다운로드해야합니다.

그래서 제 생각은 이미지를 삽입하는 것입니다. 내 질문은 다음과 같습니다.

  1. 내가 여기서 뭘 잘못하고 있니?
  2. 임베딩 접근 방식이 올바른가요?
  3. 더 많은 이미지를 사용해야하는 경우 다른 옵션이 있습니까? 이미지는 일반적으로 메시지 컨텍스트에서 의미가없는 로고와 아이콘이므로 첨부 파일이 작동하지 않습니다. 또한 이메일의 일부 요소는 온라인 시스템에 대한 링크이므로 정적 PDF를 생성하고 첨부하는 것이 작동하지 않습니다 (내가 아는 한).

단편:

MIME-Version: 1.0
To: me@gmail.com
BCC: me@yahoo.com
From: email@yahoo.com
Subject: Test
Reply-To: email@yahoo.com
Content-Type: multipart/related; boundary="a1b2c3d4e3f2g1"

--a1b2c3d4e3f2g1

content-type: text/html;

    <html>
    <head><title>My title</title></head>
    <body>
    <div style="font-size:11pt;font-family:Calibri;">
    <p><IMG SRC="cid:my_logo" alt="Logo"></p>

... more html here ...

</div></body></html>

--a1b2c3d4e3f2g1

Content-Type: image/gif;
Content-ID:<my_logo>
Content-Transfer-Encoding: base64
Content-Disposition: inline

[base64 image data here]

--a1b2c3d4e3f2g1--

감사합니다.

BTW : 예, html 자체에 이미지를 포함하고 (헤더 데이터 생성에 동일한 알고리즘 사용) Firefox / IE에서 이미지를 볼 수 있으므로 base64 데이터가 올바른지 확인했습니다.

또한 이것은 스팸이 아니며 이메일이 매일이를 기대하는 특정 고객에게 전송된다는 점에 유의해야합니다. 콘텐츠는 광고가 아닌 데이터 기반입니다.



답변

직접 삽입 해보세요. 이렇게하면 이메일의 여러 위치에 여러 이미지를 삽입 할 수 있습니다.

<img src="data:image/jpg;base64,{{base64-data-string here}}" />

이 게시물을 다른 사람들에게 유용하게 만들려면 : base64 데이터 문자열이없는 경우 이미지 파일에서 http://www.motobit.com/util/base64-decoder-encoder.asp 에서 쉽게 만들 수 있습니다.
.

이메일 소스 코드는 다음과 같지만 경계가 무엇인지 정말 말할 수 없습니다.

 To: email@email.de
 Subject: ...
 Content-Type: multipart/related;
 boundary="------------090303020209010600070908"

This is a multi-part message in MIME format.
--------------090303020209010600070908
Content-Type: text/html; charset=ISO-8859-15
Content-Transfer-Encoding: 7bit

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>

    <meta http-equiv="content-type" content="text/html; charset=ISO-8859-15">
  </head>
  <body bgcolor="#ffffff" text="#000000">
    <img src="cid:part1.06090408.01060107" alt="">
  </body>
</html>

--------------090303020209010600070908
Content-Type: image/png;
 name="moz-screenshot.png"
Content-Transfer-Encoding: base64
Content-ID: <part1.06090408.01060107>
Content-Disposition: inline;
 filename="moz-screenshot.png"

[base64 image data here]

--------------090303020209010600070908--

// 편집 : 오, 나는 당신이 내 게시물의 첫 번째 코드 스 니펫을 삽입하여 thunderbird로 이메일을 작성하면 thunderbird가 내 게시물의 두 번째 코드와 거의 동일하게 보이도록 html 코드를 자동으로 변경합니다.


답변

다른 솔루션은 이미지를 첨부 파일로 첨부 한 다음 cid를 사용하여 html 코드를 참조하는 것입니다.

HTML 코드 :

<html>
    <head>
    </head>
    <body>
        <img width=100 height=100 id="1" src="cid:Logo.jpg">
    </body>
</html>

C # 코드 :

EmailMessage email = new EmailMessage(service);
email.Subject = "Email with Image";
email.Body = new MessageBody(BodyType.HTML, html);
email.ToRecipients.Add("abc@xyz.com");
string file = @"C:\Users\acv\Pictures\Logo.jpg";
email.Attachments.AddFileAttachment("Logo.jpg", file);
email.Attachments[0].IsInline = true;
email.Attachments[0].ContentId = "Logo.jpg";
email.SendAndSaveCopy();

답변

여기에 유용한 답변이 없으므로 솔루션을 제공하고 있습니다.

  1. 문제는 multipart/related이 경우 좋지 않은 콘텐츠 유형으로 사용 하고 있다는 것 입니다. 나는 multipart/mixed그것을 사용 하고 있습니다 multipart/alternative(대부분의 클라이언트에서 작동합니다).

  2. 메시지 구조는 다음과 같아야합니다.

    [Headers]
    Content-type:multipart/mixed; boundary="boundary1"
    --boundary1
    Content-type:multipart/alternative; boundary="boundary2"
    --boundary2
    Content-Type: text/html; charset=ISO-8859-15
    Content-Transfer-Encoding: 7bit
    [HTML code with a href="cid:..."]
    
    --boundary2
    Content-Type: image/png;
    name="moz-screenshot.png"
    Content-Transfer-Encoding: base64
    Content-ID: <part1.06090408.01060107>
    Content-Disposition: inline; filename="moz-screenshot.png"
    [base64 image data here]
    
    --boundary2--
    --boundary1--

그러면 작동합니다


답변

작동하지 않는 경우 이미지를 HTML 테이블로 변환하는 다음 도구 중 하나를 시도해 볼 수 있습니다 (이미지 크기에주의하십시오).


답변

Base64를 사용하여 이미지를 html로 임베드하는 것은 훌륭합니다. 그럼에도 불구하고 base64 문자열은 이메일 크기를 크게 만들 수 있습니다.

따라서,

1) 이미지가 많은 경우 이미지를 서버에 업로드하고 해당 이미지를 서버에서로드하면 이메일 크기가 작아 질 수 있습니다. (Google을 통해 많은 무료 서비스를받을 수 있습니다)

2) 메일에 이미지가 몇 개만있는 경우 base64 문자열을 사용하는 것이 확실히 멋진 옵션입니다.

기존 답변에서 제공하는 선택 사항 외에도 명령을 사용하여 Linux에서 base64 문자열을 생성 할 수도 있습니다.

base64 test.jpg

답변

나는 이것이 오래된 게시물이라는 것을 알고 있지만 현재 답변은 Outlook 및 다른 많은 이메일 공급자가 인라인 이미지 또는 CID 이미지를 지원하지 않는다는 사실을 다루지 않습니다. 이메일에 이미지를 배치하는 가장 효과적인 방법은 이미지를 온라인으로 호스팅하고 이메일에 링크를 배치하는 것입니다. 작은 이메일 목록의 경우 공개 보관함이 제대로 작동합니다. 이것은 또한 이메일 크기를 작게 유지합니다.


답변

  1. 인라인 이미지가 완벽하게 호환 되려면 3 개의 경계가 필요합니다.

  2. 모든 것이 multipart/mixed.

  3. 그런 다음 multipart/relatedmultipart/alternative 하여 이미지 첨부 헤더 를 포함합니다 .

  4. 마지막으로 다운로드 가능한 첨부 파일을 multipart/mixed.