SMTP는 텍스트 기반의 프로토콜로서 요구/응답 메시지뿐 아니라 모든 문자가 7bit ASCII로 되어있어야 한다고 규정되어 있다. 이 때문에 문자 표현에 8비트 이상의 코드를 사용하는 언어나 첨부파일과 자주 사용되는 각종 바이너리는 마임(MIME)이라고 불리는 방식으로 7비트로 변환되어 전달된다.
다른글
SMTP는 원래 텍스트 기반 프로토콜이며, 요청 / 응답 메시지뿐 아니라 모든 문자가 7 비트 ASCII 이어야한다는 제한이 있었다. 현재는 확장 기능 8 bit 이상을 요구하는 언어와 첨부 파일에 사용되는 것이 많은 이진 도 그대로 전송하는 것도 가능하지만, 호환성을 고려하면 MIME 하는 방식으로, 7 bit에 맞게 하는 것이 바람직하다.
php mail 함수
bool mail ( string $to
, string $subject
, string $message
[, string $additional_headers
[, string $additional_parameters
]] )
출처 - http://php.net/manual/en/function.mail.php
mail 함수에서 $to
, $subject
, $message
변수에 한글등 아스키문자 이외의 문자가 있으면 인코딩 해줘야 한다.
예를 들면...
$subject = "=?UTF-8?B?".base64_encode("메일 제목")."?=";
그리고 가급적이면 메일제목에는 utf-8말고 euc-kr을 사용하시는 것이 좋을 거 같습니다.
utf-8을 기본으로 사용하고 있다면 제목만이라도 iconv를 통해 euc-kr로 변환하고 base64로 인코딩해주는게 좋을거 같네요...
$subject = "=?EUC-KR?B?".base64_encode(iconv("UTF-8","EUC-KR","메일 제목"))."?=";
iconv_mime_encode — Composes a MIME header field
Description
$field_name
, string $field_value
[, array $preferences
= NULL
] )Composes and returns a string that represents a valid MIME header field, which looks like the following:
Subject: =?ISO-8859-1?Q?Pr=FCfung_f=FCr?= Entwerfen von einer MIME kopfzeile
Parameters
field_name
The field name.
field_value
The field value.
preferences
You can control the behaviour of iconv_mime_encode() by specifying an associative array that contains configuration items to the optional third parameter
preferences
. The items supported by iconv_mime_encode() are listed below. Note that item names are treated case-sensitive.Configuration items supported by iconv_mime_encode() Item Type Description Default value Example scheme string Specifies the method to encode a field value by. The value of this item may be either "B" or "Q", where "B" stands for base64 encoding scheme and "Q" stands for quoted-printableencoding scheme. B B input-charset string Specifies the character set in which the first parameter field_name
and the second parameterfield_value
are presented. If not given, iconv_mime_encode() assumes those parameters are presented to it in the iconv.internal_encoding ini setting.iconv.internal_encoding ISO-8859-1 output-charset string Specifies the character set to use to compose the MIME header. iconv.internal_encoding UTF-8 line-length integer Specifies the maximum length of the header lines. The resulting header is "folded" to a set of multiple lines in case the resulting header field would be longer than the value of this parameter, according to » RFC2822 - Internet Message Format. If not given, the length will be limited to 76 characters. 76 996 line-break-chars string Specifies the sequence of characters to append to each line as an end-of-line sign when "folding" is performed on a long header field. If not given, this defaults to "\r\n" (CR LF). Note that this parameter is always treated as an ASCII string regardless of the value of input-charset. \r\n \n
Return Values
Returns an encoded MIME field on success, or FALSE
if an error occurs during the encoding.
Examples
Example #1 iconv_mime_encode() example
<?php
$preferences = array(
"input-charset" => "ISO-8859-1",
"output-charset" => "UTF-8",
"line-length" => 76,
"line-break-chars" => "\n"
);
$preferences["scheme"] = "Q";
// This yields "Subject: =?UTF-8?Q?Pr=C3=BCfung=20Pr=C3=BCfung?="
echo iconv_mime_encode("Subject", "Prüfung Prüfung", $preferences);
$preferences["scheme"] = "B";
// This yields "Subject: =?UTF-8?B?UHLDvGZ1bmcgUHLDvGZ1bmc=?="
echo iconv_mime_encode("Subject", "Prüfung Prüfung", $preferences);
?>
See Also
- imap_binary() - Convert an 8bit string to a base64 string
- mb_encode_mimeheader() - Encode string for MIME header
- imap_8bit() - Convert an 8bit string to a quoted-printable string
- quoted_printable_encode() - Convert a 8 bit string to a quoted-printable string
출처 - http://php.net/manual/en/function.iconv-mime-encode.php
'Development > PHP' 카테고리의 다른 글
php - syslog (0) | 2013.05.15 |
---|---|
php - PDT 설치 (0) | 2013.05.13 |
php - 점(.) 연산자 (3) | 2013.04.06 |
php - mail (0) | 2013.04.06 |
copyright 년도 자동표기하기 (0) | 2013.03.06 |