먼저 이 게시글은 아래의 모듈을 사용하고 있으며, php버전에 맞는 오류 수정은 각 사용자가 직접 하여야 합니다.

https://xe1.xpressengine.com/index.php?mid=download&package_id=20393822

 

기존의 새글 알림 모듈은 게시글의 제목을 메일의 제목으로 사용하게 되었습니다.

때로는 별도의 메일 제목으로 고정하여 보내고 싶을때 소스를 직접 수정하여, 제목을 고정하게 되는데요..

 

이렇게 되면, 각 게시판 별로 제목을 달리하여 보내거나, 이를 바꾸고 싶을때 난관에 부딛히곤 합니다.

 

이 팁에서는

 

1. 게시판 별 발송할 메일의 제목을 설정합니다.

2. 만약 별도로 설정할 제목이 없다면, 게시글의 제목으로 발송할 수 있도록 합니다.

 

 

1. 먼저 게시판 설정의 제목을 설정하기 위하여

modules/newposts/tpl/modify.html과 modules/newposts/tpl/insert.html에 하기와 같이 코드를 추가 합니다.

 

<div class="x_control-group">
    <label class="x_control-label">이메일 제목</label>
    <div class="x_controls">
        <input type="text" name="mail_title" style="width: 250px;" value="{$config->mail_title}" />
    </div>
</div>

 

코드 위치는 각자 알아보기 편하도록 추가 하시면 됩니다.

저는 관리자 이메일 주소 하단에 추가 했습니다.

 

이 다음은 DB에도 저장 해야하니 modules/newposts/schemas/newposts_config.xml 파일에 sender_email 줄 아래에 아래의 XML 코드를 추가 합니다.

 

<column name="mail_title" type="bigtext" notnull="notnull" />

 

똑같은 코드를 /modules/newposts/queries/insertConfig.xml 에도 추가 합니다.

 

그런 다음 modules/newposts/newposts.controller.php 파일의 151번 라인으로 이동하면

 

if (in_array($config->sending_method,array('1','3'))) 코드를 보시게 됩니다.

 

해당 if문을 아래로 교체 합니다.

if (in_array($config->sending_method, ['1', '3'])) {
    if ($config->sender_email) {
        $sender_email_address = $config->sender_email;
    } else {
        $sender_email_address = $sender->email_address;
    }
    if ($config->sender_name) {
        $sender_name = $config->sender_name;
    } else {
        $sender_name = $sender->nick_name;
    }

    if ($config->mail_title) {
        //만약 제목이 설정되어 있다면
        $m_title = $config->mail_title;
    } else {
        //만약 제목이 없다면
        $m_title = $obj->title;
    }

    //새로운 게시글을 작성 후 사전에 저장된 제목 또는 게시글 제목으로 이메일을 발송한다

    $oMail = new Mail();
    $oMail->setTitle($m_title);
    $oMail->setContent($mail_content);
    $oMail->setSender($sender_name, $sender_email_address);

    //분류별 관리자 E-mail
    $target_email = explode(',', $output->data->email);
    foreach ($target_email as $email_address) {
        $email_address = trim($email_address);
        if (!$email_address) {
            continue;
        }
        $oMail->setReceiptor($email_address, $email_address);
        $oMail->send();
    }

    //전체관리자 E-mail
    $target_email = explode(',', $config->admin_emails);
    foreach ($target_email as $email_address) {
        $email_address = trim($email_address);
        if (!$email_address) {
            continue;
        }
        $oMail->setReceiptor($email_address, $email_address);
        $oMail->send();
    }
}

 

변경된 내용은 모듈 설정에 mail_title이 있으면 설정된 메일 제목으로, 없는 경우 게시글 제목으로 발송한다는 코드입니다.

 

그 다음은 설정 페이지에서 입력한 값을 무사히 DB에 입력할 수 있도록 

modules/newposts/newposts.admin.controller.php 43번 라인에 mail_title을 아래와 같이 수정 합니다.

 

$params = Context::gets('admin_phones','admin_emails','sender_phone','sender_name','sender_email','content','mail_title','mail_content','module_srls','msgtype','sending_method', 'sms_method', 'time_switch', 'time_start', 'time_end', 'reserv_switch', 'selected_days', 'sender_key', 'template_code');

 

그 다음 데이터 베이스 항목에 아래와 같이 mail_title을 추가 해주면 됩니다.

 

image.png

 

어때요? 참 쉽죠?

 

별것 아니지만, 그래도 게시판 별로 다른 제목과 내용으로 이메일을 보내고 싶은 욕구는 있었을 것 같습니다.

고급메일 발송을 통해 메일을 보내고, Newpost같은 메일로 새글 메일을 보낼 때 유용할 것 같습니다.

 

 

 

모자장수꾼

profile
:)