>  기사  >  웹 프론트엔드  >  왜곡된 HTML 이메일 문제를 해결하는 방법

왜곡된 HTML 이메일 문제를 해결하는 방법

藏色散人
藏色散人원래의
2021-06-03 14:11:112601검색

잘못된 HTML 이메일에 대한 해결 방법: 1. 메일 기능 앞 줄에 메시지 내용을 인쇄합니다. 2. 이메일 내용을 html 파일로 저장하고 봅니다. 3. UTF-8 인코딩을 설정합니다.

왜곡된 HTML 이메일 문제를 해결하는 방법

이 문서의 운영 환경: Windows 7 시스템, HTML5 버전, Dell G3 컴퓨터.

왜곡된 HTML 이메일 문제를 해결하나요? 메일 내용에 임의의 잘못된 문자가 나타납니다

문제 설명:

데이터(중국어 포함)를 html 파일 형식으로 조합하고 지정된 사용자에게 이메일을 보냅니다.

PHP에서 메일 기능 사용하기

//拼装header。指定编码utf-8,解析邮件正文中的中文$headers = "From: xxx@xxx\n";
$headers .= "MIME-Version: 1.0\n";
$headers .= "Content-type: text/html; charset=utf-8\n";
$headers .= "Content-Transfer-Encoding: 8bit\n";//拼装标题  解决中文标题乱码问题$subject = xxx;
$subject = "=?UTF-8?B?".base64_encode($subject)."?=";

mail($toEmail,$subject,$message,$headers);   // 其中$message为邮件内容主题,格式形如"<html><head></head><body><p>".$title."</p>".$message.$table."</body></html>";

수신된 이메일의 본문 부분이 왜곡된 문자, 특수 문자가 아닌 문자, 무작위 위치로 무작위로 나타납니다. Mac으로 이메일을 보낼 때와 Windows에서 이메일을 받을 때 왜곡된 문자가 다릅니다.

  • windows: 임의의 위치에 나타납니까? 또는!
  • Mac: 데이터 위치가 수신 데이터와 일치하지 않습니다. 예를 들어 xxxxAxxxxBxxxxx여야 하고 수신된 이메일은 xxxxBxxxxAxxxx

수신 데이터가 다를 경우 왜곡된 문자가 나타날 수도 있고 나타나지 않을 수도 있습니다. . 비교는 특수 문자와 관련이 없습니다.

windows에서 문자가 깨졌습니다.

문제 해결:

1. 어셈블리가 잘못되었는지 확인하세요.

메일 기능 앞 줄에 메시지 내용을 완전한 HTML 형식으로 직접 인쇄하고, 다음과 같은 형식으로 저장하세요. html 파일을 찾아서 열어보세요. 왜곡된 문자가 없으며 기대와 일치합니다.

2. 이메일 내용 수신 확인

아웃룩에서 이메일 소스 파일을 살펴보세요(맥은 마우스 오른쪽 버튼을 클릭해도 되고, 윈도우는 이 기능이 없어서 html 파일로 저장해서 보시면 됩니다), 왜곡된 코드의 형식이 1단계의 형식과 일치하지 않음을 확인합니다. 예를 들어

라는 라벨이 나타납니다. 3. Others

사실 지금까지 PHP의 메일 기능에서 정확히 무슨 일이 일어나는지, 숨겨진 기본 버그인지 궁금했습니다. PHP의 전송 과정에서 어떤 변화가 있었는지. 하지만 볼 수 있는 해당 소스 코드를 찾을 수 없어 오랫동안 여기에 머물렀습니다.

중국어 왜곡 문자이기 때문에 UTF-8이 설정되어 있음을 반복적으로 확인했습니다. 많은 검색 결과도 이와 관련이 있습니다.

또한 Mac에서의 위치 혼동에 문제가 있는지 고려했습니다. 전송 잘림, 길이가 너무 길어서

Transfer : https://www.cnblogs.com/puzbus/archive/2013/06/07/3356342.html

두 가지 점을 요약

  • 과도한 이메일 내용은 구문 분석 문제를 일으킬 수 있습니다
  • 해결책 :Content-Transfer-Encoding: base64

추가 검토:

질문 1: 이메일 길이 제한의 근거와 방법 긴 메일 처리

PHP 메일 방식의 문서에는 상한(노출수)이 있어서 길이를 초과하면 잘려서 나오니까 깨져서 나오는 문자가 나올 때 길이 문제가 될 줄은 몰랐습니다)

PHP의 기본 메소드에서 상한선을 설정하는 기준은 RFC 2822 2.1.1입니다.

동시에 텍스트 내용을 여러 줄로 분할하는 처리 제안도 제공합니다. 조립된 html 구조는 한 줄로 길이를 확실히 초과합니다.

[추천 학습: html 동영상 튜토리얼]

질문 2: 왜 base64가 너무 긴 이메일 줄 문제를 해결할 수 있습니까?

1 base64가 무엇인지 이해하려면 http://base64 노트를 참조하세요. www.ruanyifeng.com/blog/2008/06/base64.html, 간단히 말해서 base64의 3바이트는 ASCII

2의 4바이트를 나타냅니다. RFC822에 따르면 BASE64Encoder로 인코딩된 모든 76자에는 캐리지 리턴 및 줄 바꿈이 추가되어야 합니다.

질문 3: Content-Transfer-Encoding의 다양한 값은 무엇을 의미합니까?

참조: MIME 노트 및 https://www.w3.org/Protocols/rfc1341/5_Content-Transfer-Encoding.html

개인적인 이해, 다른 방법으로는 삽입이 없습니다. base64보다 줄 바꿈 효과로 문제를 해결할 수 없습니다

보조 1: 텍스트 클래스에 charset

보조 2: "=?[인코딩]?B?".base64_encode($ subject)."?= "; B는 base64를 의미합니다. Q는 quoted-printable

을 의미합니다.

위 내용은 왜곡된 HTML 이메일 문제를 해결하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.