코스모스팜 인증메일 스팸처리 되는 현상

코스모스팜 회원관리 플러그인을 사용하면,  메일주소를 변경할 때 인증메일이 발송된다. 

그런데, 워드프레스에서 기본적으로 발송되는 메일은 [받은 메일함]에 잘 들어오는데, 코스모스팜 플러그인에서 발송되는 메일은 항상 스팸메일로 분류되었다.

게다가 인증메일 내용으로 작성한 글에 줄바꿈이 그대로 반영되지 않아 빈 줄이 없게 표현되어 가독성이 떨어졌다.

 

인증메일 발송 함수

코스모스팜 플러그인에서 인증메일을 발송하는 함수를 확인해 보았다.

cosmosfarm-members.php > cosmosfarm_members-send_verify_email($user,$verify_code)

public function send($args){
        add_filter(‘wp_mail_content_type’array($this‘content_type’));
        add_filter(‘wp_mail’array($this‘message_template’));
        
        $to = $args[‘to’];
        $subject = $args[‘subject’];
        $message = $args[‘message’]
        
        $result = wp_mail($to$subject$message,$header);
        
        remove_filter(‘wp_mail’array($this‘message_template’));
        remove_filter(‘wp_mail_content_type’array($this‘content_type’));
        
        return $result;
    }
 
    public function content_type(){
        return ‘text/html’;
    }
    
    public function message_template($args){
        $subject = $args[‘subject’];
       $message = wpauto($args[‘message’]);
        
        ob_start();
        include_once COSMOSFARM_MEMBERS_DIR_PATH . ‘/email/template.php’;
        $args[‘message’] = ob_get_clean();
        
        return $args;
    }

메일을 발송하기 전에  메일형식을 ‘text/html’ 로 선언하고, /email/template.php 를 읽어서 여기에 내용을 추가하여 발송하도록 하고 있다.

사용자가 작성한 글은 wpauto 함수로 일반 텍스트를 html 텍스트로 변환하기도 한다.

워드프레스 기본 메일 발송

워드프레스 기본 메일은 아래와 같이 발송된다.

            $pass_change_email = array(
                ‘to’      => $user[‘user_email’],
                /* translators: Password change notification email subject. %s: Site title. */
                ‘subject’ => __‘[%s] Password Changed’ ),
                ‘message’ => $pass_change_text,
                ‘headers’ => ,
            );
 
wp_mail$email_change_email[‘to’], sprintf$email_change_email[‘subject’], $blog_name ), $email_change_email[‘message’], $email_change_email[‘headers’] );

워드프레스에서 기본적으로 발송되는 문장은 그냥 텍스트문으로 처리되고 있는 것 같다.

 

해결 방법

스팸메일로 분류 되지 않도록

‘text/html’ 을 선언하는 부분을 제거해 보았다. 그랬더니 스팸으로 분류되지 않고 정상적으로 수신이 되었다.

그렇다고,  텍스트 문으로 보내자니 메일에 링크를 넣을 수는 없어서 적당한 해결 방법은 아닌 것 같다.

html 메일을 보내는 것은 포기할 수 없어 다른 방법을 찾기 위해서 template.php 파일을 열어보았다.

 

<!doctype html>
<html>
<head>
<meta name=”viewport” content=”width=device-width” />
<meta http-equiv=”Content-Type” content=”text/html; charset=UTF-8″ />
<title><?php echo $subject?></title>
<style>
/* ————————————-
          GLOBAL RESETS
      ————————————- */
img {
    border: none;
    -ms-interpolation-mode: bicubic;
    max-width: 100%;
}

body {
    background-color: #f6f6f6;
    font-family: Noto Sans KR,Apple SD Gothic Neo,Malgun Gothic,arial,Noto Sans KR,Apple SD Gothic Neo,Malgun Gothic,arial,sans-serif;
    -webkit-font-smoothing: antialiased;
    font-size: 14px;
    line-height: 1.4;
    margin: 0;
    padding: 0;
    -ms-text-size-adjust: 100%;
    -webkit-text-size-adjust: 100%;
}
중략
 

메일 보내는 양식에 <style></style> 에 css 정의 문장이 한 가득이다.

거창한 메일을 발송할 것이 아니라서, template.php 는 다른 백업해 두고, <style></style> 내용을 통째로 지워버렸다.

그러고서 테스트 해 보니, 스팸으로 걸러지지 않고 정상적으로 수신이 되었다.

style 서식 중 어느 부분이 왜 스팸 여부를 판단하는데 영향을 미치는 지는 모르겠지만, 일단 이렇게 함으로서 스팸으로 걸러지는 문제는 해결하였다.

 

 

메일에서 줄바꿈이 적용되지 않는 문제

남은 문제는 줄바꿈이 제대로 되지 않는 문제….  

이것은 아래 문장을

       $message = wpauto($args[‘message’]);

이렇게 바꾸어서 해결하였다.

       $message = nl2br($args[‘message’]);

 

그러나,,

일단은 해결이 되는 듯 했으나,  이미지가 들어가면 다시 스팸으로 분류된다…

 

스팸지수를 점검하는 사이트에서 테스트 해 보니,  이미지만 있고 글자수가 너무 작아도 스팸지수가 올라가는 것을 알게 되었다. 

그래서, 메일인증 링크를 보내는 단순한 메일이지만 글자수를 더 늘여보았다.

결국 복잡하게 할 것 없이 글자수를 좀 더 늘이면 되는 문제가 아니었나 싶으다. @@

댓글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다