it-swarm.dev

Javascript를 사용하여 Microsoft Outlook에서 HTML 이메일 작성

Javascript 웹 응용 프로그램에서 이메일을 작성하고 싶습니다. 나는 이것에 대한 많은 SO 질문들에 대해 완전히 알고 있습니다 (예 : Chrome으로 Outlook HTML 열기 ).) 일반적인 답변에 문제가 있습니다 :

  1. Mailto : 링크 : 전자 메일을 만들 수 있지만 일반 텍스트 (HTML 제외)로만 만들 수 있으며 첨부 파일을 허용하지 않습니다.

  2. ActiveX : IE, 내 응용 프로그램은 Firefox 및 Chrome 역시. FF & Chrome 플러그인) ActiveX가 보안 상 위험하고 버그가있는 것 같습니다.

  3. SMTP를 통한 서버 측 전송 : 이메일이 사용자의 "보낸"폴더에 들어 가지 않습니다. 또한 사용자가 브라우저에서 HTML을 편집하고 파일을 첨부 할 수있게하는 장애물이 있습니다.

  4. Outlook .MSG 파일 만들기 : 라이브러리가없는 것 같습니다. 분명히 파일 형식에는 실제로 전체 FAT 파일 스토리지 시스템이 내장되어 있습니다.

주요 차이점 다른 많은 것들 사이의 SO 질문과 나의 것 :

  • do 클라이언트 컴퓨터에 액세스 할 수 있으므로 도우미 응용 프로그램이나 추가 기능을 설치하고 필요에 따라 설정을 변경할 수 있습니다.
  • 인터페이스는 not 실제로 메일을 보낼 필요가 있으며, 사용자를 위해서만 설정하면됩니다.
  • 또한 JS에서 전자 메일에 첨부 파일 (예 : PDF)을 제공 할 수 있어야합니다.

나는 이것을 직면 한 최초의 웹 앱 개발자가 될 수 없지만 상업용 또는 오픈 소스 솔루션을 찾을 수 없습니다.

업데이트 :

나는 EML 파일 방법을 사용했으며 지금까지는 잘 작동합니다. 생성하고 트리거하는 JS 코드는 다음과 같습니다.

var emlContent = "data:message/rfc822 eml;charset=utf-8,";
emlContent += 'To: '+emailTo+'\n';
emlContent += 'Subject: '+emailSubject+'\n';
emlContent += 'X-Unsent: 1'+'\n';
emlContent += 'Content-Type: text/html'+'\n';
emlContent += ''+'\n';
emlContent += htmlDocument;

var encodedUri = encodeURI(emlContent); //encode spaces etc like a url
var a = document.createElement('a'); //make a link in document
var linkText = document.createTextNode("fileLink");
a.appendChild(linkText);
a.href = encodedUri;
a.id = 'fileLink';
a.download = 'filename.eml';
a.style = "display:none;"; //hidden link
document.body.appendChild(a);
document.getElementById('fileLink').click(); //click the link
18
James Bell

MSG 파일 형식은 documented 이지만 확실히 재미 있지는 않습니다 ... 왜 EML (MIME) 파일을 작성하지 않습니까?

이 답변을 삭제하거나 줄이려는 사람들 : EML (MIME) 형식을 사용하는 것이 좋습니다. OP에 따르면 그는 MSG 파일 형식 (# 4)을 고려했지만 해당 형식을 처리하는 JS 라이브러리가 복잡하거나 부족하여 권장하지 않았습니다. MSG 파일을 고려한 경우 MIME가 훨씬 더 나은 선택입니다. 텍스트 기반이므로 파일을 작성하는 데 특별한 라이브러리가 필요하지 않습니다. Outlook은 MSG 파일처럼 쉽게 열 수 있습니다. Outlook에서 보내지 않은 메시지로 처리되도록하려면 X-Unsent MIME 헤더를 1로 설정하십시오.

업데이트 : 가장 간단한 EML 파일은 다음과 같습니다.

To: Joe The User <joe@domain.demo>
Subject: Test EML message
X-Unsent: 1
Content-Type: text/html

<html>
<body>
Test message with <b>bold</b> text.
</body>
</html>
17

일반 텍스트 eml 파일의 아이디어를 사용하여 다음을 생각해 냈습니다. http://jsfiddle.net/CalvT/un3hapej/

이것은 내가 찾은 것의 편집입니다-.txt 파일을 다운로드 한 다음 다운로드하십시오. 같이 .eml 파일은 실제로 .txt 파일입니다. 이것이 작동한다고 생각했습니다. 그리고 그렇습니다. 샘플 이메일이 포함 된 textarea을 (를) 남겼으므로 쉽게 테스트 할 수 있습니다. 파일 만들기를 클릭하면 .eml 파일. 내가 볼 수있는 유일한 장애물은 브라우저를 .eml 다운로드 후 파일.

편집 : 클라이언트 시스템에 액세스 할 때 브라우저는 항상 해당 유형의 파일을 열도록 설정할 수 있습니다. 예를 들어 Chrome에서 다운로드 옆의 화살표를 클릭하고 항상이 유형의 열린 파일을 선택할 수 있습니다.

코드는 다음과 같습니다

HTML :

(function () {
var textFile = null,
  makeTextFile = function (text) {
    var data = new Blob([text], {type: 'text/plain'});

    if (textFile !== null) {
      window.URL.revokeObjectURL(textFile);
    }

    textFile = window.URL.createObjectURL(data);

    return textFile;
  };


  var create = document.getElementById('create'),
    textbox = document.getElementById('textbox');

  create.addEventListener('click', function () {
    var link = document.getElementById('downloadlink');
    link.href = makeTextFile(textbox.value);
    link.style.display = 'block';
  }, false);
})();
<textarea id="textbox" style="width: 300px; height: 200px;">
To: User <user@domain.demo>
Subject: Subject
X-Unsent: 1
Content-Type: text/html

<html>
<body>
Test message
</body>
</html>
  
</textarea>

<button id="create">Create file</button>
  
<a download="message.eml" id="downloadlink" style="display: none">Download</a>
10
CalvT

아무도 첨부 파일 질문에 답한 것 같지 않으므로 여기에 내 해결책이 있습니다. 멀티 파트/혼합 메시지로 EML을 만듭니다.

Content-Type: multipart/mixed; boundary=--boundary_text_string

이를 통해 이메일에 여러 부분을 가질 수 있습니다. 여러 부분으로 이와 같은 첨부 파일을 추가 할 수 있습니다.

Content-Type: application/octet-stream; name=demo.pdf
Content-Transfer-Encoding: base64
Content-Disposition: attachment

이메일 헤더로 시작한 다음 경계를 추가 한 다음 부분 내용을 추가하십시오 (줄 바꿈 위치는 매우 중요합니다. 클라이언트는 파일을 올바르게 구문 분석하지 않습니다). 여러 부품을 추가 할 수 있습니다. 아래는 예입니다. 마지막 경계는 다른 경계와 다릅니다 (끝에 2 개의 대시).

To: Demo-Recipient <demo@demo.example.com>
Subject: EML with attachments
X-Unsent: 1
Content-Type: multipart/mixed; boundary=--boundary_text_string

----boundary_text_string
Content-Type: text/html; charset=UTF-8

<html>
<body>
<p>Example</p>
</body>
</html>

----boundary_text_string
Content-Type: application/octet-stream; name=demo.txt
Content-Transfer-Encoding: base64
Content-Disposition: attachment
ZXhhbXBsZQ==

----boundary_text_string
Content-Type: application/octet-stream; name=demo.log
Content-Transfer-Encoding: base64
Content-Disposition: attachment
ZXhhbXBsZQ==

----boundary_text_string--

두 개의 첨부 파일이있는 eml 파일이 제공됩니다. 작동 방식에 대한 자세한 내용을 보려면 RFC 1371 을 참조하십시오.

7
korhojoa