오픈 소스 프로젝트 - XE 개발 포럼
글수 288
안녕하세요.
현재 qmail 환경(ex:x-y.net)에서 메일을 발송하면 메일 내용 대신 헤더가 내용으로 전송되는 문제가 있는데요.
짱돌의세상님이 올려주신 팁에 따라 뉴라인 문자를 도스 스타일에서 유닉스 스타일로 변경하면 해결이 됩니다.
그런데 이 팁이 올라온지 시간이 꽤 지났고 저를 포함해 여러 분이 문제를 겪고 계시는데 티케팅조차 안 된 것 같네요.
아이디/비번찾기 뿐 아니라 전체메일 발송/게시물 발송 등의 부가 모듈 1.0.3의 메일 인증에도 영향을 미칠텐데...
하다못해 부가 모듈에서 이용할 수 있도록 mail 클래스에 간단한 setter라도 적용해주시면 어떨까요.
버그도 아니고 기능제안이라기도 뭣해서 여기 올려봅니다.
덧. 커미터나 리포터 신청은 어디로 해야 하나요.(혹은 접수(?)가 끝난건가요? -_-; )
지금은 제로님께는 쪽지를 보낼 수 없던데요.
현재 qmail 환경(ex:x-y.net)에서 메일을 발송하면 메일 내용 대신 헤더가 내용으로 전송되는 문제가 있는데요.
짱돌의세상님이 올려주신 팁에 따라 뉴라인 문자를 도스 스타일에서 유닉스 스타일로 변경하면 해결이 됩니다.
그런데 이 팁이 올라온지 시간이 꽤 지났고 저를 포함해 여러 분이 문제를 겪고 계시는데 티케팅조차 안 된 것 같네요.
아이디/비번찾기 뿐 아니라 전체메일 발송/게시물 발송 등의 부가 모듈 1.0.3의 메일 인증에도 영향을 미칠텐데...
하다못해 부가 모듈에서 이용할 수 있도록 mail 클래스에 간단한 setter라도 적용해주시면 어떨까요.
버그도 아니고 기능제안이라기도 뭣해서 여기 올려봅니다.
class Mail {
//...
var $newline = '\r\n';
//...
function setNewline($newline){
$this->newline = $newline;
}
//...
function send() {
//...
$body = sprintf(
"--%s".this->newline.
"Content-Type: text/plain; charset=utf-8; format=flowed".$this->newline.
//...
);
}
}
덧. 커미터나 리포터 신청은 어디로 해야 하나요.(혹은 접수(?)가 끝난건가요? -_-; )
지금은 제로님께는 쪽지를 보낼 수 없던데요.
Setzer Gabbiani
2008.04.24 00:35:17 (*.78.113.56)
에고...
메일 모듈이 따로 없기 때문에 mail_line_delimiter를 전역 변수에 추가해서 메인 페이지에서 관리하게 하려고 했는데,
설정빈도가 많지 않은데 비해 일이 엄청나게 커지는군요. 보다 간소하게 변수를 넣는 법이 없는지 모르겠습니다.
(차라리 config.inc.php에 넣을까나요?)
여담입니다만 install.admin.controller.php procInstallAdminSaveTimeZone()의 함수명과 주석은 바꿔야 할 듯 싶습니다. use_rewrite와 use_optimizer도 함께 다루니까요.
메일 모듈이 따로 없기 때문에 mail_line_delimiter를 전역 변수에 추가해서 메인 페이지에서 관리하게 하려고 했는데,
설정빈도가 많지 않은데 비해 일이 엄청나게 커지는군요. 보다 간소하게 변수를 넣는 법이 없는지 모르겠습니다.
(차라리 config.inc.php에 넣을까나요?)
여담입니다만 install.admin.controller.php procInstallAdminSaveTimeZone()의 함수명과 주석은 바꿔야 할 듯 싶습니다. use_rewrite와 use_optimizer도 함께 다루니까요.
2008.04.24 00:49:03 (*.45.157.5)
일단, func.inc.php에 mail_line_delimiter라는 전역 변수를 추가하는 쪽으로 잡아 보았습니다.
변경은 관리자 메인페이지에서 합니다.
mail.class.php의 내용은 본문과 같지만 setter는 빼버리고 전역 변수를 멤버 변수로 넣을 생각입니다.
메일 모듈이 따로 없다 보니 이것저것 손봐야 할 게 많아지는 것 같군요.
변경은 관리자 메인페이지에서 합니다.
config/func.inc.php
$mail_line_delimiter = array( 'DOS' => '\r\n', 'UNIX' => '\n' ) ;
modules/admin/admin.admin.view.php
Context::set
('mail_line_delimiter_list', $GLOBALS['mail_line_delimiter']);
Context::set('mail_line_delimiter', $GLOBALS
['_mail_line_delimiter']);modules/admin/tpl/index.html
<tr>
<th scope="row">{$lang->mail_line_delimiter}</th>
<td>
<select name="mail_line_delimiter" class="mail_line_delimiter">
<!--@foreach($mail_line_delimiter_list as $key => $val)-->
<option value="{$key}" <!--@if($mail_line_delimiter==$key)--
>selected="selected"<!--@end-->>{$val}</option>
<!--@end-->
</select>
<p>{$lang->about_mail_line_delimiter}</p>
</td>
</tr>modules/install/lang/ko.lang.php
$lang->mail_line_delimiter = '메일 내용의 개행문자'; $lang->about_mail_line_delimiter = '발송된 메일의 내용이 제대로 출력되지 않을 경우 이 값을 변경해 보시기 바랍니 다.';
install.admin.controller.php
$mail_line_delimiter = Context::get('mail_line_delimiter');
//...
$db_info->mail_line_delimiter = $mail_line_delimiter; classes/context/Context.class.php
$GLOBALS['_mail_line_delimiter'] = $db_info->mail_line_delimiter;
mail.class.php의 내용은 본문과 같지만 setter는 빼버리고 전역 변수를 멤버 변수로 넣을 생각입니다.
메일 모듈이 따로 없다 보니 이것저것 손봐야 할 게 많아지는 것 같군요.
2008.04.24 13:40:38 (*.45.157.5)
일단 기본값이 \r\n이 된 배경을 알아야 할 것 같습니다.
찾아보니 인터넷상의 많은 예제들이 \r\n으로 되어있고, PHP 메뉴얼의 예제에도 \r\n으로 되어있네요.
유닉스 쪽에서는 \n, 윈도우즈 환경에서는 \r\n을 쓰는게 좋을 것 같다는 이야기도 있는데, 확실하진 않군요.
여기 내용을 읽어보면 도움이 될 것 같습니다. PHP_EOL 이라는 상수를 쓰면 해결이 될까요?
찾아보니 인터넷상의 많은 예제들이 \r\n으로 되어있고, PHP 메뉴얼의 예제에도 \r\n으로 되어있네요.
유닉스 쪽에서는 \n, 윈도우즈 환경에서는 \r\n을 쓰는게 좋을 것 같다는 이야기도 있는데, 확실하진 않군요.
여기 내용을 읽어보면 도움이 될 것 같습니다. PHP_EOL 이라는 상수를 쓰면 해결이 될까요?
2008.04.25 10:52:45 (*.8.18.250)
네. 제가 아는 지식상으로는 \r\n 으로 할 경우 대부분의 MTA나 웹서버등에서 문제 없는 것으로 알고 있습니다.
qmail 역시 이런 기본적인 부분에 대해서 처리가 되었어야 하는데.. 안되어 있다는 걸 보니 qmail의 문제라고 생각이 되네요.
아무튼 func.inc.php 에 넣는것은 좀 무리가 있지 않을까 싶습니다.
장기적으로 config 디렉토리 안의 파일들에 정의된 함수나 상수들을 모두 빼야 하는데 매우 특별한 상황에서 사용될 변수를 세팅하는 것은 무리가 있지 않을까 싶습니다. ^^
그리고 PHP_EOL의 경우 상당히 유용하다고 보여지지만 qmail의 문제라고 보여지기에 zbXE 가 실행되는 환경이 유닉스냐 도스냐 하는 것을 PHP_EOL에 의존하게 될 경우 예외사항이 생길 것 같습니다.
예를 들어 웹서버는 윈도우서버인데 메일서버가 별도의 유닉스 서버이고 qmail 사용한다면 문제가 생기겠죠.
일단 이렇게 시도하면 어떨까요?
윈도우, 리눅스 서버의 센드메일을 설치하고 각 환경에서 메일헤더의 값을 \r\n이 아닌 \n으로 하였을 경우에 잘 발송이 되는지?
잘 발송이 된다면 그냥 mail class의 헤더 생성 부분의 \r\n을 \n 으로 일괄 변경해 버리면 문제가 해결될 것 같습니다.
혹시 sendmail등 qmail외의 MTA에서 \r\n이 아닐 경우 오류가 생긴다면 sendmail/ qmail등의 MTA를 자동으로 파악할 수가 없을 것 같기에 관리자의 설정을 받로고 하여 files/config/db.config.php 파일에 관련값을 저장하도록 해야 할 것 같습니다. ^^;
qmail 역시 이런 기본적인 부분에 대해서 처리가 되었어야 하는데.. 안되어 있다는 걸 보니 qmail의 문제라고 생각이 되네요.
아무튼 func.inc.php 에 넣는것은 좀 무리가 있지 않을까 싶습니다.
장기적으로 config 디렉토리 안의 파일들에 정의된 함수나 상수들을 모두 빼야 하는데 매우 특별한 상황에서 사용될 변수를 세팅하는 것은 무리가 있지 않을까 싶습니다. ^^
그리고 PHP_EOL의 경우 상당히 유용하다고 보여지지만 qmail의 문제라고 보여지기에 zbXE 가 실행되는 환경이 유닉스냐 도스냐 하는 것을 PHP_EOL에 의존하게 될 경우 예외사항이 생길 것 같습니다.
예를 들어 웹서버는 윈도우서버인데 메일서버가 별도의 유닉스 서버이고 qmail 사용한다면 문제가 생기겠죠.
일단 이렇게 시도하면 어떨까요?
윈도우, 리눅스 서버의 센드메일을 설치하고 각 환경에서 메일헤더의 값을 \r\n이 아닌 \n으로 하였을 경우에 잘 발송이 되는지?
잘 발송이 된다면 그냥 mail class의 헤더 생성 부분의 \r\n을 \n 으로 일괄 변경해 버리면 문제가 해결될 것 같습니다.
혹시 sendmail등 qmail외의 MTA에서 \r\n이 아닐 경우 오류가 생긴다면 sendmail/ qmail등의 MTA를 자동으로 파악할 수가 없을 것 같기에 관리자의 설정을 받로고 하여 files/config/db.config.php 파일에 관련값을 저장하도록 해야 할 것 같습니다. ^^;
2008.04.25 16:05:53 (*.45.157.5)
\n으로 대체하고 linux->local sendmail, win32->remote sendmail로 해보아 별 이상은 없었습니다.
그러나 \r\n(CRLF)은 유지하고, db.config.php에 넣는 것이 바람직할 듯 합니다. 더 찾아보니 CRLF로 줄을 구분하는 것은 RFC 822/2822에 명시된 사항이고, qmail이 이것을 어기고 있는 것이더군요. 그러나 위에서 언급한 x-y.net/cafe24 등 qmail을 쓰는 호스팅이 적지 않고, \r\n 헤더를 스팸 처리하는 필터나 제대로 인식하지 못하는 윈도 기반의 에이전트까지 있다고 하니, 선택권을 두는 것은 어쩔 수 없을 것 같습니다.
그러나 \r\n(CRLF)은 유지하고, db.config.php에 넣는 것이 바람직할 듯 합니다. 더 찾아보니 CRLF로 줄을 구분하는 것은 RFC 822/2822에 명시된 사항이고, qmail이 이것을 어기고 있는 것이더군요. 그러나 위에서 언급한 x-y.net/cafe24 등 qmail을 쓰는 호스팅이 적지 않고, \r\n 헤더를 스팸 처리하는 필터나 제대로 인식하지 못하는 윈도 기반의 에이전트까지 있다고 하니, 선택권을 두는 것은 어쩔 수 없을 것 같습니다.





다른 얘기 : mmx900님..워터마크 버전업 해주소...현재 버전에서 안됩니다..