CentOS 5에 Exim 4.71 설치 및 DKIM 설정하기

CentOS 5에 yum으로 설치가능한 Exim 버전은 4.63이다. 4.63은 DKIM을 지원하지 않으므로 DKIM을 사용하기 위해서는 상위 버전을 설치해야 한다.

  1. /etc/yum.repos.d/atrpms.repo 파일을 만든다.

    [atrpms-stable]
    name=Centos $releasever – $basearch – ATrpms
    baseurl=http://dl.atrpms.net/el$releasever-$basearch/atrpms/stable
    gpgkey=http://ATrpms.net/RPM-GPG-KEY.atrpms
    gpgcheck=1
    enabled=1
    includepkgs=libspf2* libsrs*[atrpms-testing]
    name=Centos $releasever – $basearch – ATrpms
    baseurl=http://dl.atrpms.net/el$releasever-$basearch/atrpms/testing
    gpgkey=http://ATrpms.net/RPM-GPG-KEY.atrpms
    gpgcheck=1
    enabled=1
    includepkgs=exim*

  2. exim을 설치한다.

    yum install exim

  3. /etc/exim/exim.conf의 상단에 다음 라인 추가

    DKIM_DOMAIN = ${lc:${domain:$h_from:}}
    DKIM_FILE = /etc/exim/dkim/${lc:${domain:$h_from:}}.pem
    DKIM_PRIVATE_KEY = ${if exists{DKIM_FILE}{DKIM_FILE}{0}}

  4. /etc/exim/exim.conf의 remote_smtp 항목 수정

    remote_smtp:
    driver = smtp
    dkim_domain = DKIM_DOMAIN
    dkim_selector = mail
    dkim_private_key = DKIM_PRIVATE_KEY
    dkim_canon = relaxed
    dkim_strict = 0

  5. 인증서 생성

    $ mkdir /etc/exim/dkim/ && cd /etc/exim/dkim/
    $ openssl genrsa -out example.com.pem 768
    $ openssl rsa -in example.com.pem -out example.com-public.pem -pubout -outform PEM

  6. DNS에 위에서 생성된 DKIM public 키 추가mail._domainkey.example.com.     IN      TXT     “v=DKIM1; t=y; k=rsa; p=MIGfMA0AQAB”

    t=y는 테스트 중임을 의미. 테스트가 끝나면 삭제해야 한다.

  7. DNS 설정 테스트

    $ dig +short txt x._domainkey.example.com
    “v=DKIM1\; k=rsa\; p=MIGfMA0AQAB”

  8. gmail 계정으로 메일을 발송. DKIM  인증이 되는지 gmail에서 ‘원본 보기’ 메뉴를 통해서 확인

    Authentication-Results: mx.google.com; spf=neutral (google.com: ….., dkim=pass (test mode) header.i=@example.com

  9. DNS 수정
    t=y 삭제

ASP : UTF-8 파일 읽고 쓰기

ASP에서 FileSystemObject를 이용해서 UTF-8 파일을 읽으면 글자가 깨진다. ASCII나 유니코드(UCS-2) 파일이 아닌 경우는 FileSystemObject로 파일을 읽을 수 없다.

ASP에서 UTF-8 파일을 읽거나 쓸 때 다음 함수를 이용하면 유용한다.


Function ReadUTF8File(sFileName)
Dim Stream, TextBuffer

Set Stream = Server.CreateObject("ADODB.Stream")
With Stream
.Charset = "utf-8"
.Type = 2 'adTypeText
.Open
.LoadFromFile sFileName
.Position = 0
ReadUTF8File = .ReadText
.Close
End With

Set Stream = Nothing
End Function
Function WriteUTF8File(sFileName, sText)
Dim Stream

Set Stream = Server.CreateObject("ADODB.Stream")
With Stream
.Charset = "utf-8"
.Type = 2 'adTypeText
.Open
.WriteText sText
.SaveToFile sFileName, 2 'adSaveCreateOverWrite
.Close
End With

Set Stream = Nothing
End Function

PHP : PDO를 이용해서 MSSQL에 UTF-8로 접속하기

리눗스에서 MSSQL을 접속하기 위해서는 FreeTDS를 사용한다.  PHP에서 PDO를 이용해서 MSSQL로 접속하기 위해서는 이 FreeTDS를 사용하는 PDO_DBLIB를 사용해야 한다.

다음은 PDO를 사용해서 MSSQL 접속하는 예이다.

$dbh = new PDO("dblib:host=sqlserver;dbname=db;","id","passwd");
$sql = 'UPDATE Category SET Name = N? where CategoryID = ?';
$sth = $dbh->prepare($sql);
$sth->execute(Array($name, $id));

만약에 위의 Category 테이블의 Name 컬림이 NVARCHAR 형태라면 다음처럼 수정을 해야 데이타가 제대로 갱신된다.

$dbh = new PDO("dblib:host=sqlserver;dbname=db;charset=UTF-8","id","passwd");
$sql = 'UPDATE Category SET Name = N? where CategoryID = ?';
$sth = $dbh->prepare($sql);
$sth->execute(Array($name, $id));