Amazon SES와 Sendmail 통합 - Amazon Simple Email Service

Amazon SES와 Sendmail 통합

Sendmail은 1980년대 초반에 릴리스되었으며 이후 지속적으로 개선되었습니다. 대규모 사용자 커뮤니티를 보유한 유연하고 구성 가능한 메시지 전송 에이전트(MTA)입니다. Sendmail은 2013년에 Proofpoint에서 인수했지만, Proofpoint는 Sendmail의 오픈 소스 버전을 계속 제공하고 있습니다. Proofpoint 웹사이트에서, 또는 대다수 Linx 배포판에 포함된 패키지 관리자를 통해 Sendmail의 오픈 소스 버전을 다운로드하세요.

이 섹션의 절차는 Amazon SES를 통해 이메일을 전송하도록 Sendmail을 구성하는 방법을 보여줍니다. 이 절차는 Ubuntu 18.04.2 LTS를 실행하는 서버 상에서 테스트를 거쳤습니다.

참고

Sendmail은 타사 애플리케이션이며 Amazon Web Services에서 개발하거나 지원하지 않습니다. 이 섹션의 절차는 정보 제공이 목적이며 사전 통지 없이 변경될 수 있습니다.

사전 조건

이 섹션의 절차를 완료하려면 먼저 다음 작업을 수행해야 합니다.

  • 서버에 Sendmail 패키지를 설치합니다.

    참고

    사용하는 운영 체제 배포판에 따라 sendmail-cf, m4, cyrus-sasl-plain 중 해당되는 패키지를 설치해야 할 수도 있습니다.

  • 발신 주소로 사용할 ID를 확인합니다. 자세한 내용은 이메일 주소 자격 증명 생성 섹션을 참조하세요.

    계정이 Amazon SES 샌드박스에 있는 경우 이메일을 전송하려는 주소들도 확인해야 합니다. 자세한 내용은 프로덕션 액세스 요청(Amazon SES 샌드박스에서 이동) 섹션을 참조하세요.

Amazon SES를 사용하여 Amazon EC2 인스턴스로부터 이메일을 전송 중인 경우에는 다음 단계도 완료해야 합니다.

  • 이메일을 수신하는 공급자가 이메일을 수락하도록 하려면 Amazon EC2 인스턴스에 탄력적 IP 주소를 할당해야 합니다. 자세한 내용은 Amazon EC2 사용 설명서에서 Amazon EC2 탄력적 IP 주소를 참조하세요.

  • Amazon Elastic Compute Cloud(Amazon EC2)는 기본적으로 포트 25를 통한 이메일 트래픽을 제한합니다. Amazon EC2의 SMTP 엔드포인트를 통해 이메일을 전송할 때 시간 초과를 방지하려면 이러한 제한을 제거하도록 요청할 수 있습니다. 자세한 내용은 AWS Knowledge Center의 Amazon EC2 인스턴스에서 또는 AWS Lambda 함수로 포트 25의 제한을 제거할 수 있습니까?를 참조하세요.

    또는 이 섹션의 절차를 수정하여 포트 25가 아닌 포트 587을 사용할 수 있습니다.

Sendmail 구성

Amazon SES를 사용해 이메일을 전송하도록 Sendmail을 구성하려면 이 섹션에 나온 단계를 완료하세요.

중요

이 섹션의 절차는 미국 서부(오레곤) AWS 리전에서 Amazon SES를 사용하기를 원한다고 가정합니다. 다른 리전을 사용하려는 경우 이 절차에 있는 email-smtp.us-west-2.amazonaws.com의 모든 인스턴스를 원하는 리전의 SMTP 엔드포인트로 바꾸세요. Amazon SES를 사용할 수 있는 AWS 리전의 SMTP 엔드포인트 URL 목록은 AWS 일반 참조Amazon Simple Email Service(Amazon SES)를 참조하세요.

Sendmail을 설정하려면
  1. 텍스트 편집기에서 /etc/mail/authinfo 파일을 엽니다. 파일이 없으면 새로 만듭니다.

    다음 줄을 /etc/mail/authinfo에 추가합니다.

    AuthInfo:email-smtp.us-west-2.amazonaws.com "U:root" "I:smtpUsername" "P:smtpPassword" "M:PLAIN"

    이전 예제에서 다음과 같이 변경합니다.

    • email-smtp.us-west-2.amazonaws.com을 사용하려는 Amazon SES SMTP 엔드포인트로 바꿉니다.

    • smtpUsername을 Amazon SES SMTP 사용자 이름으로 바꿉니다.

    • smtpPassword를 Amazon SES SMTP 암호로 바꿉니다.

    참고

    SMTP 로그인 보안 인증 정보는 AWS 액세스 키 ID 및 비밀 액세스 키와 다릅니다. SMTP 로그인 보안 인증 정보를 받는 방법에 대한 자세한 내용은 Amazon SES SMTP 자격 증명 획득 섹션을 참조하세요.

    완료되면 authinfo를 저장합니다.

  2. 명령줄에 다음 명령을 입력하여 /etc/mail/authinfo.db 파일을 만듭니다.

    sudo sh -c 'makemap hash /etc/mail/authinfo.db < /etc/mail/authinfo'
  3. 명령줄에 다음 명령을 입력하여 Amazon SES SMTP 엔드포인트에 릴레이에 대한 지원을 추가합니다.

    sudo sh -c 'echo "Connect:email-smtp.us-west-2.amazonaws.com RELAY" >> /etc/mail/access'

    위의 명령에서 email-smtp.us-west-2.amazonaws.com을 사용하려는 Amazon SES SMTP 엔드포인트의 주소로 바꿉니다.

  4. 명령 줄에 다음 명령을 입력하여 /etc/mail/access.db를 다시 생성합니다.

    sudo sh -c 'makemap hash /etc/mail/access.db < /etc/mail/access'
  5. 명령줄에 다음 명령을 입력하여 다음과 같이 sendmail.cfsendmail.mc 파일의 백업을 생성합니다.

    sudo sh -c 'cp /etc/mail/sendmail.cf /etc/mail/sendmail_cf.backup && cp /etc/mail/sendmail.mc /etc/mail/sendmail_mc.backup'
  6. 다음 줄을 /etc/mail/sendmail.mc 파일의 MAILER() 정의 앞에 추가합니다.

    define(`SMART_HOST', `email-smtp.us-west-2.amazonaws.com')dnl define(`RELAY_MAILER_ARGS', `TCP $h 25')dnl define(`confAUTH_MECHANISMS', `LOGIN PLAIN')dnl FEATURE(`authinfo', `hash -o /etc/mail/authinfo.db')dnl MASQUERADE_AS(`example.com')dnl FEATURE(masquerade_envelope)dnl FEATURE(masquerade_entire_domain)dnl

    위의 텍스트에서 다음을 수행합니다.

    • email-smtp.us-west-2.amazonaws.com을 사용하려는 Amazon SES SMTP 엔드포인트로 바꿉니다.

    • example.com을 이메일 전송에 사용할 도메인으로 바꿉니다.

    작업을 마치고 파일을 저장합니다.

    참고

    Amazon EC2는 기본적으로 포트 25를 통한 통신을 제한합니다. Amazon EC2 인스턴스에서 Sendmail을 사용 중인 경우 이메일 전송 제한 제거 요청을 작성해야 합니다.

  7. 명령줄에 다음 명령을 입력하여 sendmail.cf를 쓰기 가능한 상태로 만듭니다.

    sudo chmod 666 /etc/mail/sendmail.cf
  8. 명령줄에 다음 명령을 입력하여 sendmail.cf를 다시 생성합니다.

    sudo sh -c 'm4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf'
    참고

    ‘명령을 찾을 수 없음’ 및 ‘해당 파일 또는 디렉터리가 없음’ 오류가 발생하면 m4sendmail-cf 패키지가 시스템에 설치되어 있는지 확인합니다.

  9. 명령줄에 다음 명령을 입력하여 sendmail.cf 권한을 읽기 전용으로 재설정합니다.

    sudo chmod 644 /etc/mail/sendmail.cf
  10. 명령줄에 다음 명령을 입력하여 Sendmail을 다시 시작합니다.

    sudo /etc/init.d/sendmail restart

    Linux 또는 Sendmail 버전에 따라 위의 내용이 작동하지 않으면 다음을 시도하세요.

    sudo su service sendmail restart
  11. 테스트 이메일을 전송하려면 다음 작업을 완료합니다.

    1. 명령줄에 다음 명령을 입력합니다.

      /usr/sbin/sendmail -vf sender@example.com recipient@example.com

      sender@example.com을 From 이메일 주소로 바꿉니다. recipient@example.com을 수신 주소로 바꿉니다. 완료되면 Enter를 누릅니다.

    2. 다음과 같은 메시지 콘텐츠를 입력합니다. 줄이 끝날 때마다 Enter를 누릅니다.

      From: sender@example.com To: recipient@example.com Subject: Amazon SES test email This is a test message sent from Amazon SES using Sendmail.

      이메일 콘텐츠의 입력이 완료되면 Ctrl+D를 눌러서 전송합니다.

  12. 해당 이메일의 수신자 이메일 클라이언트를 확인합니다. 이메일을 찾을 수 없으면 스팸 메일 폴더를 확인합니다. 그래도 이메일을 찾을 수 없는 경우, 메일 서버의 Sendmail 로그를 살펴봅니다. 로그는 대개 /var/log/mail.log 또는 /var/log/maillog에 있습니다.