메일 주제가 이렇게 복잡한 줄 누가 알았겠어요.

7237 단어
기본적으로 전자 우편 테마는 127자만 지원하는 거 알아요?!아니요. 올해 초에 Microsoft Outlook에서 Courier가 생성한 e-메일에 문제가 있다는 사실을 알게 된 고객도 있었습니다.이런 작은 과장 문제와 오류는 전자 우편 수신자에게 잘못된 인상을 남길 수 있다.이것은 최종 사용자로 하여금 그들이 사용한 제품이 주도면밀하지 않거나 테스트를 거치지 않았다고 느끼게 할 것이다.뿐만 아니라 일부 문자를 지원하지 않으면 다른 언어와 국가의 고객에게 연락할 수 없을 수도 있습니다.
이것은 우리가 받은 캡처입니다 (검은 다이아몬드를 주의하세요):

왜 그랬게요?또는 이메일 제목should은 무엇입니까?이메일 테마는 프랑스어로'Vèrifiez votre email'이어야 합니다.우리 함께 깊이 들어가고 디버깅하며 이 문제를 해결합시다.

우리가 어떻게 이 문제를 해결했는가


2021년 엔지니어로서 첫 번째 단계는 구글로 문제를 검색하는 것이다. 예를 들어 블랙 다이아몬드 물음표 메일 주제다.불행히도 이것은 우리에게 좋은 답안을 주지 못했다.최초의 결과는 마이크로소프트의 한 포럼에서 나온 것으로, 해결 방안은 사람들이 로컬 Outlook 설정을 업데이트하도록 요구하는 것이고, 문제는 로컬에 불과하다고 생각하는 것이다.문제는 우리가 도움을 제공할 수 있도록 우리의 고객(그리고 그들의 모든 고객)에게 이 업데이트를 요구해야 한다는 것이다.이 모든 사람들과 연락할 수도 없고, 그들이 왜 이렇게 해야 하는지 명확하게 설명할 수도 없다. 이것은 해결 방안이 불가능하다는 것을 의미한다.
일부 키워드를 깊이 파헤치고 수정한 후에 나는 이 특정한 문자를 발견했다.�, 실제로는 클라이언트가 모든 문자가 UTF-8이 되기를 원할 때 UTF-8 문자가 아닌 로고를 사용합니다.

UTF-8이란?


기본적으로 UTF-8 문자는 128개의 유니버설 문자로 a-z, a-z와 0-9개의 문자와 키보드 코드(문장부호, 탭부호, 위치 이동 등 포함)를 대표한다.이것은 우리가 위에서 본 중음 문자를 포함하지 않는다.이러한 문자는 처음 128자 코드 외부에 있습니다.

살려주세요!


우선 배경 지식이다.전자 우편 (일반적으로 http 요청 포함) 은 제목과 본문으로 구성되어 있습니다.이메일 본문(HTML)은 상대적으로 간단합니다.전자 메일의 다른 부분에는'보낸 사람','받는 사람','주제'등 필드가 포함되어 있습니다. 이 필드들은 모두 제목입니다.제목은 일이 까다로워지기 시작하는 곳이다.전자 우편 서버가 메일 헤더를 디코딩하기 시작할 때, 메일 헤더가 UTF-8이 되기를 희망합니다.이것은 앞에서 언급한 128개의 유니버설 문자 이외의 문자를 포함할 수 없다는 것을 의미합니다.
이 제한을 무시하기 위해서, 우리는 전자 우편 테마를 베이스64로 인코딩할 수 있습니다.바이너리 데이터를 인코딩해야 할 때 Base64 인코딩 방안을 사용합니다. 특히 텍스트 처리를 위한 미디어 저장과 전송 방안을 설계해야 할 때.유니코드 문자를 받아들여 UTF-8 읽을 수 있는 텍스트로 변환합니다.이것은 확실히 텍스트가 더 길다는 것을 의미하지만, 제목에 필요한 모든 데이터를 보낼 수 있도록 합니다.
Node에서 base64를 이렇게 인코딩할 수 있습니다.js.
const buffer = Buffer.from(subject);
const base64 = buffer.toString("base64");
그러나 이것은 전자 우편 서버에 전자 우편 테마가base64라는 것을 알려주지 않습니다.서버의 전자 우편 테마가 base64로 인코딩되어 있음을 알리기 위해 RFC 1342를 사용할 수 있습니다.
const buffer = Buffer.from(subject);
const encodedSubject = '=?UTF-8?B?${buffer.toString("base64");
이러한 메일 테마를 보내려면 '정상적으로 작업' 해야 합니다. 왜냐하면 서버는 문자열을 디코딩하고 정확하게 보여 주기 때문입니다.🎉

하지만 잠깐만, 더 있어!


제한:(
우리는 일부 전자 우편 공급자의 문제와 베이스 64 인코딩 문자열의 길이에 부딪혔다.베이스64에서 문자열을 인코딩하고 길이를 검사하며 길이가 너무 높은지 확인하면 인코딩된 문자열만 편집할 수 없습니다. 인코딩이 깨지기 때문입니다.나는 이 문자열을 디코딩할 수 없다.
이 문제를 해결하기 위해서, 나는 테마에 대해 귀속 인코딩을 하고 문자열이 너무 길었는지 검사해야 한다.만약 길이가 너무 길다면, 우리는 원시 문자열을 잘라서 다시 인코딩하고 길이를 검사할 것입니다.우리는 전자 우편 공급자의 길이와 일치하는 인코딩 문자열을 얻을 때까지 이 과정을 반복했다.
export const encode = (subject: string, maxLength?: number) => {
  if (!hasUnicode(subject) {
    return subject;
  }

  if (maxLength) {
    subject = subject.slice(0, maxLength).trim();

const buffer = Buffer.from(subject);
const encodedSubject = '=?UTF-8?B?${buffer.toString("base64")}?=';

// postmark breaks when we send encoded messages > 78
  if (maxLength && encodedSubject.length > maxLength) {
    return encode(subject.slice(0, -1), maxLength);
  }
  return encodedSubject;
};
Microsoft Outlook이 메시지 테마의 일부 문자를 좋아하지 않는 것을 발견했을 때, 이것이 바로 메시지 테마로 들어가는 여정입니다.이 과정은 우리로 하여금 곤혹에서 이해에 이르기까지 최종적으로 여러 공급자에게 적용되는 해결 방안을 구축하게 했다.
2021년의 이메일(여전히)은 나를 골치 아프게 할 것이다.실제로 이것은 마이크로소프트의 Outlook일 뿐이다.이 전자 우편 클라이언트는 이런 두통을 일으키는 것으로 악명이 높다.또 두 명의 가장 인기 있는 고객인 Gmail과 Superhuman은 모두 이 메일의 주제를 잘 처리할 수 있다.Google은 Internet Explorer를 지원하지 않음 처럼 간단하지만, 많은 사람들이 여전히 이러한 이전 버전의 Microsoft Outlook을 사용하고 있습니다.따라서 이 글을 읽고 전자 우편 프로그램을 구축하는 모든 사람들에게만약 어떤 불안한 일이 발생하면 반드시 Microsoft Outlook이 맞는지 확인해야 합니다..해결 방안이 둔하고 실행하기 어려울 때 너무 낙담하지 마라.
EMC 솔루션을 이해하고 테스트하는 데 도움이 되는 훌륭한 웹 사이트를 살펴보고 싶습니다.
  • https://www.sendblaster.com/utf8-email-subject-encoder/
  • https://ncona.com/2011/06/using-utf-8-characters-on-an-e-mail-subject/
  • 저자: 라이리 나필

    좋은 웹페이지 즐겨찾기