2017-11-06 3 views
0

phpmailer를 사용하여 월별 보고서를 보내고 있습니다.phpmailer에 첨부하기위한 인코딩 설정

여기에는 € 기호가 포함됩니다. 따라서 인코딩을 utf-8로 설정해야합니다. 여기에 문제가 발생했습니다. 이 같은 인코딩없이

:

$mail->addStringAttachment($csvstring, $fileName); 

메일이 전송됩니다하지만 인코딩을 추가 할 때 첨부 파일의 € 기호

를 표시하지 않습니다

$mail->addStringAttachment($csvstring, $fileName, "utf-8", "text/csv"); 

을 메일이 전송되었지만 본문 및 첨부 파일이 없습니다. 나는 그것을 보려고했지만 아주 작은 문서가있는 것 같다.

나는 분명한 것을 놓치고 있습니까?

+0

소스를 탐색 한 결과 나는 PHPmailer가 정말 어색하고 스위치가 있다고 생각할 것입니다. 그러나 세 번째 매개 변수가 무엇인지 예상하십시오 :'https : // github.com/PHPMailer/PHPMailer/blob/master/src/PHPMailer.php # L62', "utf-8"은 필요하지 않습니다. . 네 번째 매개 변수로''text/html; charset = utf-8 "'을 시도 할 수도 있습니다. 그냥 실험하고있는 비트. PHPMailer가 작동하는 방식을 리버스 엔지니어링하지 않으면 아무 것도 도움이되지 않는다고 생각합니다. –

+0

"Documentation"제목 아래 숨겨진 프로젝트 홈 페이지에서 링크 된 수많은 문서가 있습니다. [addStringAttachment의 문서] (http : //phpmailer.github.io/PHPMailer/classes/PHPMailer.PHPMailer.PHPMailer.html # method_addStringAttachment)를 사용하면 첨부 파일을 추가 할 때 tansfer 인코딩을 어떻게 지정해야하는지 명확하게 알 수 있습니다. 다른 라이브러리와 거의 동일합니다. 같은 물건. – Synchro

+0

매일 모든 사람들이 PHPMailer에서 일하는 것은 아닙니다 ... 그래서 나는 코를 물지 않는 것을 선호합니다. 그래도 도움이되는 링크에 대해 감사드립니다. –

답변

0

혼란스러워지고 있습니다. EncodingCharSet은 서로 다른 두 가지입니다. 일반적으로 charset은 일반적으로 base-64로 인코딩되어 있기 때문에 첨부 파일에 영향을 미치지 않으므로 7 비트입니다.

메시지 전체에 CharSetEncoding을 설정할 수 있지만 각 첨부 파일의 전체 인코딩을 무시할 수 있습니다.

the docs에 따라, 귀하의 콘텐츠를 연결하는 올바른 방법 : 그 패턴으로

$mail->addStringAttachment($csvstring, $fileName, 'base64', 'text/csv'); 

을, 당신은 그것으로 통과 정확한 바이너리 컨텐츠 유지됩니다 첨부 파일 - 당신은 여전히 ​​문자에 문제가있는 경우, 그것은이다 원본 데이터의 문제가 아니라 전송의 원인이됩니다.

+0

질문과 문자셋에 관한 이전의 혼란에 동의하지 않습니다. 그러나 여전히 콘텐츠 형식에 charset을 추가하는 것이이 문제를 처리하는 적절한 방법이라고 생각합니다. 현재 인코딩에 명시 적으로 UTF-8을 설정하는 솔루션은 없습니다. 반면에 'text/csv; charset = utf-8'은 스펙에 따라 그렇게합니다. https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Type – jaswrks

0

참조 : 당신이 원하는 경우 CSV 그것을 열 프로그램에 UTF-8로 this line in PHPMailer's source code

$mail->CharSet = 'utf-8'; 

을 읽을 수 있도록하는 BOM을 추가, 문자열 파일의 내용에 (Byte Order Marker 즉, "\\xef\\xbb\\xbf") .

"\\xef\\xbb\\xbf".$csvstring 

UPDATE :

는 또한 다음과 같이 그것을 할 수 있습니다. 이 인코딩을 설정하는 적절한 방법을 지적으로

$mail->addStringAttachment($csvstring, $fileName, "base64", "text/csv; charset=utf-8"); 

MIME Content-Type에, 또한 사양 참조; 즉 text/csv; charset=utf-8입니다.

+0

첨부 파일의 인코딩을 설정해야하는 이메일 본문의 인코딩을 설정합니다. 나는 이미이 코드를 나머지 코드에서 사용하고있다. –

+0

@MathiasKiekens Understood. 내 솔루션을 업데이트했습니다. 업데이트 후 – jaswrks

+0

: 여전히 작동하지 않는 것 같습니다. 나는 두려워합니다. –