포럼
XE 비밀번호 찾기 메일 보내면 네이버 메일에 안옵니다.
2013.07.16 14:41
gmail 은 옵니다.
다른 메일은 테스트 안해봤는데 네이버는 왜 안오나요?
네이버와 xe가 궁합이 잘 맞았으면 좋겠네요.
메일이 스팸으로도 안들어 오는데 어쩌죠?
댓글 13
-
Gunmania
2013.07.16 16:02
-
푸시아
2013.07.16 16:12
그렇군요... 스팸필터가 너무 심하네요. 스팸분류도 아니고 아예 차단이라니 ㅡ.ㅡ;
그럼 화이트 도메인 아닌 쇼핑몰에서 메일 가는것도 안가겠네요....
-
푸시아
2013.07.16 19:19
네이버 메일은 가입하면 메일주소를 반드시 바꾸게 만드는 애드온을 만들어야 겠네요.
-
KTK
2013.07.16 20:14
화이트 도메인 등록을 하지 않더라도 네이버에 문의 메일 한통이면 차단해제 해 줍니다..
-
라르게덴
2013.07.16 20:19
만약 XE에서 mail()함수 대신 qmail을 사용한 방법으로도 안되시는거라면 직접 소켓에 필요한 정보만 다뤄서 보내보세요. 아래는 nmsXE, www.xeuser.org에 사용하고 있는 내용입니다. 네이버는 물론, 다음 등도 첨부파일 포함으로 잘 갑니다.
/** * @brief 메일 보내기 전 정보 초기화 **/ function sendMail($args = false) { $oModuleModel = &getModel('module'); $oNms = $oModuleModel->getModuleConfig('nms'); $mail = new Mail; $mail->smtp_secure = ($oNms->smtp_config->smtp_secure)?$oNms->smtp_config->smtp_secure:'tcp'; $mail->smtp_server = $oNms->smtp_config->smtp_server; $mail->smtp_port = $oNms->smtp_config->smtp_port; $mail->user = $oNms->smtp_config->smtp_user; $mail->pass = $oNms->smtp_config->smtp_pass; $mail->setSender($args->sender->name,$args->sender->email); $mail->setTitle($args->title); $mail->setContent($args->content); $mail->setContentType('html'); // 첨부파일 정리 if(is_array($args->attach)) { foreach($args->attach as $key => $attach) { $mail->attach[] = $attach; } } // 메일 보냄 foreach($args->receiptor as $key => $receiptors) { $mail->setReceiptor($receiptors->name, $receiptors->email); $this->_sendMail($mail); } } /** * @brief 메일 보내기 **/ function _sendMail($mail) { // 영문이외의 문자 이름이 출력되도록 함 $sender_email = sprintf("%s <%s>", '=?utf-8?b?'.base64_encode($mail->sender_name).'?= ', $mail->sender_email); $receiptor_email = sprintf("%s <%s>", '=?utf-8?b?'.base64_encode($mail->receiptor_name).'?= ', $mail->receiptor_email); $boundary = "----==".uniqid(rand(),true); // 바운드를 초기화한다 $eol = $GLOBALS['_qmail_compatibility'] == 'Y' ? "\n" : "\r\n"; $headers = sprintf( "MIME-Version: 1.0".$eol. "Content-Type: Multipart/mixed;".$eol."\tboundary=\"%s\"".$eol. "Subject: %s".$eol. "From: %s".$eol. "To: %s".$eol.$eol, $boundary, $mail->getTitle(), $sender_email, $receiptor_email ); $body = sprintf( "--%s".$eol. "Content-Type: text/html; charset=utf-8".$eol. "Content-Transfer-Encoding: base64".$eol.$eol. "%s".$eol.$eol, $boundary, $mail->getHTMLContent() ); // 첨부파일 if(is_array($mail->attach)) { foreach($mail->attach as $key => $path) { $name = basename($path->filename); $file = FileHandler::readFile($path->fileurl); $fileBody = sprintf( "--%s".$eol. "Content-Type: application/octet-stream".$eol. "Content-Transfer-Encoding: base64".$eol. "Content-Disposition: attachment; filename=\"%s\"".$eol.$eol. "%s", $boundary, $name, chunk_split(base64_encode($file)) ); $body .= $fileBody; } } // 인증방식으로 메일을 보냄 if($smtp_socket = @fsockopen($mail->smtp_secure."://".$mail->smtp_server, $mail->smtp_port, $errno, $errstr, 5)) { $this->_getMail($smtp_socket); @fputs($smtp_socket, 'HELO '.$mail->smtp_secure."://".$mail->smtp_server.$eol); $this->_getMail($smtp_socket); @fputs($smtp_socket, 'AUTH LOGIN'.$eol); $this->_getMail($smtp_socket); @fputs($smtp_socket, base64_encode($mail->user).$eol); $this->_getMail($smtp_socket); @fputs($smtp_socket, base64_encode($mail->pass).$eol); $this->_getMail($smtp_socket); @fputs($smtp_socket, 'MAIL From: <'.$mail->sender_email.'>'.$eol); $this->_getMail($smtp_socket); @fputs($smtp_socket, 'RCPT To: <'.$mail->receiptor_email.'>'.$eol); $this->_getMail($smtp_socket); @fputs($smtp_socket, 'DATA'.$eol); $this->_getMail($smtp_socket); $content = sprintf( "%s".$eol. "%s".$eol. ".".$eol, $headers, $body ); @fputs($smtp_socket, $content); $this->_getMail($smtp_socket); @fputs($smtp_socket, 'QUIT'.$eol); @fclose($smtp_socket); } } /** * @brief 상대방의 응답을 기다립니다.(gmail등 인증 방식 사용시) **/ function _getMail($socket = null) { if(!$socket) return; $i = 0; $response = '-'; while($response == '-' && $i<10) { $response = @fgets($socket, 256); if($response) $response = substr($response,3,1); else return; $i++; } }
-
푸시아
2013.07.16 20:33
일단 member 모듈의 procMemberFindAccount() 함수에 의해서 아이디/패스워드 찾는 부분인데 메일 가는 부분만 발췌 하자면
$oTemplate = &TemplateHandler::getInstance(); $content = $oTemplate->compile($tpl_path, 'find_member_account_mail'); // Get information of the Webmaster $oModuleModel = &getModel('module'); $member_config = $oModuleModel->getModuleConfig('member'); // Send a mail $oMail = new Mail(); $oMail->setTitle( Context::getLang('msg_find_account_title') ); $oMail->setContent($content); $oMail->setSender( $member_config->webmaster_name?$member_config->webmaster_name:'webmaster', $member_config->webmaster_email); $oMail->setReceiptor( $member_info->user_name, $member_info->email_address ); $oMail->send(); // Return message $msg = sprintf(Context::getLang('msg_auth_mail_sent'), $member_info->email_address); if(!in_array(Context::getRequestMethod(),array('XMLRPC','JSON'))) { $returnUrl = Context::get('success_return_url') ? Context::get('success_return_url') : getNotEncodedUrl('', 'mid', Context::get('mid'), 'act', ''); $this->setRedirectUrl($returnUrl.'&user_id='.$user_id); } return new Object(0,$msg);
929라인 정도부터 있습니다.
이게 기본 member 모듈에 있는 mail() 함수를 사용한 메일 보내기 입니다.
smtp 역시 네이버 필터링에서 자동으로 막힐 수 있습니다.
물론 고객센터에 항의하면 풀어준다고 합니다.
다음메일은 qmail 을 활성화 하면 내용이 안보이는것이 해결된다고 합니다.
그런데 개발자 마인드 말고 운영자 마인드로 보자면 일단 어떤 설정을 통해 이리저리 세팅을 다 해봤는데도 메일이 스팸도 아니고 아예 안간다는 것은 뭔가 고장이라고 판단되기 쉽습니다.
네이버를 의심하지 않고 뭔가 개발자의 코드를 의심하게 됩니다.
이러면 대략 난감해 지고, 차라리 네이버 메일을 가입 금지 메일로 설정하는것이 좋다고 생각합니다.
-
라르게덴
2013.07.16 22:12
할 수 있는 시도는 다 해봐야한다고 생각합니다. XE 기능으로 안되신다면 코드를 수정해서라도 해결보셔야 하지 않을까요?(개발을 하신다면야 더욱더)
qmail을 활성화 하시고도 네이버에 메일이 안간다면 Mail.class.php send()를 위에 제 코드로 수정해서 시도해보시기 바랍니다. 수정하시고도 메일이 안간다면(다음이나 타 메일은 가는데) 메일을 보내는 계정이 막힌걸수도 있으니 새로운 gmail을 만드셔서 시도해보시기 바랍니다.
참고로 xeuser.org에 네이버 계정으로 가입하시고 인증 메일이나 패스워드 분실 메일 보내보세요. 제가 테스트할 당시 잘 보내졌습니다.
-
푸시아
2013.07.16 23:30
일단 예상대로 xeuser.org 에서는 잘 됩니다.
제 서버만 막힌거에요. ㅜㅜ
제 서버에서도 예전에는 네이버로 메일이 잘 들어갔습니다.
아마도 제 서버에서 나간 메일중에 스팸 신고가 들어갔을수도 있다는 생각이 듭니다.
위의 코드는 적용을 안해보았습니다. smtp는 잘 몰라서요 ㅡ.ㅡ; 하지만 공부가 되었습니다. 감사합니다.
그리고 문제가 되는건 자체제작 모듈이 아니라 xe의 기본 member 모듈인데 이걸 수정하고 싶지는 않습니다.
mail 클래스도 딱히 수정해 쓰고 싶지는 않습니다.
xe코어나 member모듈 업데이트시에 삭제되면 말짱 도루묵 이라서요.
해결책은 아마도 네이버 고객센터에 전화를 하는것이라 생각합니다.
-
라르게덴
2013.07.16 23:57
xeuser.org는 위의 소스가 classes/mail/mail.class.php에 적용된 상태입니다.(예전에 메일문제로 적용시켰습니다.)
네이버 메일서버같은 대형 사이트는 정확한 포맷을 지켜 보내지 않으면 메일을 안 받는 경우가 많습니다. 메일을 던질때 포멧 중 AUTH LOGIN, MAIL From: ,RCPT To:를 잘 포함시켜야하며, 받는 사람 보내는사람 이름과 이메일 주소가 정확히 들어가있지 않으면 거부가 됩니다.(이는 스팸을 검사하기 이전에 기본 정보가 부족하여 거부되는 경우입니다.)
XE에서는 이와같은 문제를 qmail로 그나마 해결해 본 경우인데 이도 안될 경우는 직접 수정하셔야하며, 이것이 많이 힘들다면 화이트 도메인 등록을 하셔야합니다. 화이트에 등록되면 포멧이 조금 부정확하더라도 도메인만 보고 통과 시킵니다.
-
푸시아
2013.07.17 00:13
좋은 정보 감사합니다.
-
컴토피아
2013.07.16 22:33
저는 아직 단체메일 보내는 막 큰 커뮤니티 아니고 가입인증메일 정도 소규모로 보내서 그런진 몰라도 화이트도메인이나 여타 다른 인증을 받지 않은 채 그냥 유동IP로 운영하는데도 네이버 메일로 메일이 잘 갑니다...
참고하세요 :)
-
컴토피아
2013.07.16 22:45
-
푸시아
2013.07.17 12:14
화이트 도메인 싹다 신청해 드리니까 메일이 제대로 옵니다.
홈페이지 제작할때마다 이걸 해줘야 하니 일이 더 생겼네요..
SPF 등록하고 화이트 도메인 등록되있는 상태에선 가는거 같습니다