SendGrid로 이메일 보내기

이 가이드에서는 SendGrid를 사용하여 Compute Engine 인스턴스에서 실행되는 앱에서 이메일을 보내는 방법을 보여줍니다. SendGrid는 타사 이메일 서비스로, Compute Engine 사용자에게 매월 12,000건의 거래 이메일을 무료로 사용할 수 있는 무료 체험판을 제공합니다.

목표

  • Compute Engine 인스턴스에서 SendGrid를 Postfix와 함께 사용합니다.
  • Compute Engine 인스턴스에서 실행되는 자바 코드에서 SendGrid를 사용합니다.
  • Compute Engine 인스턴스에서 실행되는 Node.js 코드에서 SendGrid를 사용합니다.

비용

이 가이드에서는 Compute Engine과 같이 비용이 청구될 수 있는 Google Cloud 구성요소를 사용합니다.

Google Cloud를 처음 사용하는 사용자는 무료 체험판을 사용할 수 있습니다.

시작하기 전에

  1. Google 계정에 로그인합니다.

    아직 계정이 없으면 새 계정을 등록하세요.

  2. GCP Console의 프로젝트 선택기 페이지에서 GCP 프로젝트를 선택하거나 만듭니다.

    프로젝트 선택기 페이지로 이동

  3. Google Cloud Platform 프로젝트에 결제가 사용 설정되어 있는지 확인합니다. 프로젝트에 결제가 사용 설정되어 있는지 확인하는 방법을 알아보세요.

  4. GCP Console에서 VM 인스턴스 페이지로 이동합니다.

    VM 인스턴스 페이지로 이동

  5. 인스턴스 만들기를 클릭합니다.
  6. 이름sendgrid-tutorial으로 설정합니다.
  7. 부팅 디스크 섹션에서 변경을 클릭하여 부팅 디스크 구성을 시작합니다.
  8. OS 이미지 탭에서 a Debian or CentOS image를 선택합니다.

  9. 선택을 클릭합니다.
  10. 만들기를 클릭하여 인스턴스를 만듭니다.
  11. Google Cloud Marketplace를 사용하여 SendGrid 이메일 서비스에 가입합니다. 사용자 이름, 비밀번호, 호스트 이름을 비롯한 SendGrid SMTP 계정 사용자 인증 정보를 기록합니다. SMTP 사용자 이름과 비밀번호는 서비스에 가입할 때 사용한 것과 같습니다. SendGrid 호스트 이름은 smtp.sendgrid.net입니다.
  12. API 키 만들기:
    1. SendGrid에 로그인하고 Settings(설정) > API Keys(API 키)로 이동합니다.
    2. API 키를 만듭니다.
    3. 키의 권한을 선택합니다. 키에는 최소한 이메일을 전송할 수 있는 Mail send 권한이 필요합니다.
    4. Save(저장)를 클릭하여 키를 만듭니다.
    5. SendGrid에서 새로운 키가 생성됩니다. 이 키는 키의 유일한 사본이므로 나중을 위해 키를 복사하여 저장해 두세요.

인스턴스에서 Postfix를 사용하여 메일 보내기

다음 단계에 따라 sendgrid-tutorial 인스턴스에 연결하고 SendGrid를 Postfix와 함께 실행합니다.

SSH를 사용하여 sendgrid-tutorial 인스턴스에 연결

  1. GCP Console에서 VM 인스턴스 페이지로 이동합니다.

    VM 인스턴스 페이지로 이동

  2. 가상 머신 인스턴스 목록에서 연결할 인스턴스 행의 SSH를 클릭합니다.

SendGrid를 Postfix가 있는 SMTP 릴레이로 구성

SSH 터미널에서 다음 명령어를 실행하여 SendGrid를 Postfix가 있는 SMTP 릴레이로 사용합니다.

  1. 슈퍼유저가 됩니다.

    sudo su -
    
  2. 안전한 언마스크를 설정합니다.

    umask 077
    
  3. Postfix Mail Transport Agent를 설치합니다.

    Debian

    apt-get update && apt-get install postfix libsasl2-modules -y

    CentOS

    yum install postfix cyrus-sasl-plain cyrus-sasl-md5 -y

    메시지가 나타나면 로컬 전용 구성을 선택하고 기본 도메인 이름을 그대로 사용합니다.

  4. Postfix 구성 옵션을 수정합니다. 수정할 /etc/postfix/main.cf를 엽니다. 예를 들어 nano 텍스트 편집기를 사용하려면 다음 명령어를 입력합니다.

    nano /etc/postfix/main.cf
    
  5. 파일을 업데이트합니다.

    1. 다음 줄을 주석 처리합니다.

      # default_transport = error
      # relay_transport = error
      
    2. 파일 끝에 다음 줄을 추가합니다.

      relayhost = [smtp.sendgrid.net]:2525
      smtp_tls_security_level = encrypt
      smtp_sasl_auth_enable = yes
      smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
      header_size_limit = 4096000
      smtp_sasl_security_options = noanonymous
      

      위 줄은 SSL/TLS 지원을 적용하고 이러한 요청에 SMTP 인증을 구성합니다. SASL(단순 액세스 및 보안 계층) 모듈은 Postfix 구성에서 인증을 처리합니다.

  6. 파일을 저장하고 닫습니다.

  7. 시작하기 전에 섹션에서 생성한 API 키를 사용하여 SASL 비밀번호 맵을 생성합니다.

    echo [smtp.sendgrid.net]:2525 apikey:[YOUR_API_KEY] >> /etc/postfix/sasl_passwd
    

    여기서 [YOUR_API_KEY]는 생성한 API 키입니다.

  8. postmap 유틸리티를 사용하여 .db 파일을 생성합니다.

    postmap /etc/postfix/sasl_passwd
    
  9. .db 파일이 있는지 확인합니다.

    ls -l /etc/postfix/sasl_passwd*
    
    -rw------- 1 root root    ...  /etc/postfix/sasl_passwd
    -rw------- 1 root root    ...  /etc/postfix/sasl_passwd.db
    
  10. 사용자 인증 정보가 들어 있는 파일은 더 이상 필요하지 않으므로 삭제합니다.

    rm /etc/postfix/sasl_passwd
    
  11. .db 파일에 대한 권한을 설정하고 나머지 파일이 삭제되었는지 확인합니다.

    chmod 600 /etc/postfix/sasl_passwd.db
    ls -la /etc/postfix/sasl_passwd.db
    
    -rw------- 1 root root    ...  /etc/postfix/sasl_passwd.db
    
  12. 구성을 다시 로드하여 수정된 매개변수를 로드합니다.

    Debian

    /etc/init.d/postfix restart
    

    CentOS

    postfix reload
    

  13. mailutils 또는 mailx 패키지를 설치합니다.

    Debian

    apt-get install mailutils -y

    CentOS

    yum install mailx -y
    

  14. 테스트 이메일을 전송합니다.

    echo '[MESSAGE]' | mail -s [SUBJECT] [EMAIL@EXAMPLE.COM]

    각 항목의 의미는 다음과 같습니다.

    • [MESSAGE]는 이메일 본문입니다.
    • [SUBJECT]는 이메일 제목입니다.
    • [EMAIL@EXAMPLE.COM]는 메시지를 보낼 이메일 주소입니다.

    시스템 로그에서 status가 포함된 상태 줄과 성공한 서버 응답 코드 (250)를 찾습니다.

    Debian

    tail -n 5 /var/log/syslog
    

    CentOS

    tail -n 5 /var/log/maillog
    

인스턴스에서 자바를 사용하여 메일 보내기

SSH를 사용하여 sendgrid-tutorial 인스턴스에 연결

  1. GCP Console에서 VM 인스턴스 페이지로 이동합니다.

    VM 인스턴스 페이지로 이동

  2. 가상 머신 인스턴스 목록에서 연결할 인스턴스 행의 SSH를 클릭합니다.

이메일 메시지 작성 및 보내기

다음 안내에서는 SendGrid 자바 클라이언트 라이브러리를 사용하여 SendGrid를 통해 이메일 메시지를 작성하고 보냅니다. 전체 예시는 GitHub에서 볼 수 있습니다.

SSH 단말기에서:

  1. 수퍼유저가 되어 안전한 umask를 설정합니다.

    sudo su -
    umask 077
    
  2. 자바 및 Maven을 설치합니다.

    apt-get update -y && apt-get install git-core openjdk-8-jdk maven -y
    
  3. GitHub 저장소를 복제합니다.

    git clone https://github.com/GoogleCloudPlatform/java-docs-samples.git
    
  4. 예시의 기본 소스 코드로 이동합니다.

    cd /root/java-docs-samples/compute/sendgrid/src/main/java/com/example/compute/sendgrid
    
  5. 수정할 SendEmailServelet.java을 엽니다.

    • YOUR-SENDGRID-API-KEY를 SendGrid 계정의 API 키로 바꿉니다.

    • YOUR-SENDGRID-FROM-EMAIL을 메일을 발신하는 이메일 주소로 바꿉니다.

    • DESTINATION-EMAIL을 메일을 수신하는 이메일 주소로 변경합니다.

  6. 샘플 코드의 루트 디렉터리로 이동합니다.

    cd /root/java-docs-samples/compute/sendgrid
    
  7. 자바 클래스를 패키지화합니다.

    mvn clean package
    
  8. target 디렉터리로 이동합니다.

    cd target
    
  9. jar 파일을 실행할 수 있도록 권한을 설정합니다.

    chmod +x compute-sendgrid-1.0-SNAPSHOT-jar-with-dependencies.jar
    
  10. 대체 자바 버전 선택기를 실행합니다.

    update-alternatives --config java
    

    java-8-openjdk-amd64 옵션을 선택합니다.

  11. 자바 파일을 실행합니다.

    java -jar compute-sendgrid-1.0-SNAPSHOT-jar-with-dependencies.jar
    

인스턴스에서 Node.js를 사용하여 메일 보내기

이 샘플을 실행하려면 VM 인스턴스에 Node.js 버전 7.6 이상이 설치되어 있어야 합니다.

SSH를 사용하여 sendgrid-tutorial 인스턴스에 연결

  1. GCP Console에서 VM 인스턴스 페이지로 이동합니다.

    VM 인스턴스 페이지로 이동

  2. 가상 머신 인스턴스 목록에서 연결할 인스턴스 행의 SSH를 클릭합니다.

이메일 메시지 작성 및 보내기

SSH 단말기에서:

  1. 수퍼유저가 되어 안전한 umask를 설정합니다.

    sudo su -
    umask 077
    
  2. 패키지 저장소를 업데이트합니다.

    Debian

    apt-get update
    

    CentOS

    yum update -y
    

  3. Node.js 종속 항목을 설치합니다.

    Debian

    apt-get install git-core curl build-essential openssl libssl-dev -y
    

    CentOS

    yum install git-core curl openssl openssl-devel -y
    yum groupinstall "Development Tools" -y
    

  4. Node.js를 설치합니다. 설치 시 기본적으로 npm도 설치됩니다.

    Debian

    curl -sL https://deb.nodesource.com/setup_6.x | sudo -E bash -
    sudo apt-get install -y nodejs
    

    CentOS

    curl --silent --location https://rpm.nodesource.com/setup_6.x | bash -
    

    그런 다음 Node.js를 설치합니다.

    yum -y install nodejs
    

  5. SendGrid Node.js 클라이언트를 설치합니다.

    npm install sendgrid
    
  6. 샘플 저장소를 복제합니다.

    git clone https://github.com/googleapis/nodejs-compute.git
    
  7. SendGrid 샘플이 있는 디렉터리로 이동합니다.

    cd nodejs-compute/samples
    
  8. sendgrid.js 파일을 복사합니다.

    cp sendgrid.js sendmail.js
    
  9. 수정할 sendmail.js을 엽니다.

    • <your-sendgrid-api-key>를 SendGrid 계정의 API 키로 바꿉니다.

    • from_email@example.com을 메일을 발신하는 이메일 주소로 바꿉니다.

    • to_email@example.com을 메일을 수신하는 이메일 주소로 변경합니다.

    // This sample is based off of:
    // https://github.com/sendgrid/sendgrid-nodejs/tree/master/packages/mail
    const sendgrid = require('@sendgrid/mail');
    sendgrid.setApiKey(process.env.SENDGRID_API_KEY || '<your-sendgrid-api-key>');
    
    async function sendgridExample() {
      await sendgrid.send({
        to: 'to_email@example.com',
        from: 'from_email@example.com',
        subject: 'Sendgrid test email from Node.js on Google Cloud Platform',
        text:
          'Well hello! This is a Sendgrid test email from Node.js on Google Cloud Platform.',
      });
    }
    sendgridExample();

  10. SendGrid를 통해 이메일 메시지를 보내는 프로그램을 실행합니다.

    node sendmail.js
    

삭제

이 가이드에서 사용한 리소스 비용이 Google Cloud Platform 계정에 청구되지 않도록 하려면 다음 안내를 따르세요.

프로젝트 삭제

비용이 청구되지 않도록 하는 가장 쉬운 방법은 가이드에서 만든 프로젝트를 삭제하는 것입니다.

프로젝트를 삭제하는 방법은 다음과 같습니다.

  1. GCP Console에서 리소스 관리 페이지로 이동합니다.

    리소스 관리 페이지로 이동

  2. 프로젝트 목록에서 삭제할 프로젝트를 선택하고 삭제 를 클릭합니다.
  3. 대화상자에서 프로젝트 ID를 입력한 후 종료를 클릭하여 프로젝트를 삭제합니다.

Compute Engine 인스턴스 삭제

Compute Engine 인스턴스를 삭제하려면 다음 안내를 따르세요.

  1. GCP Console에서 VM 인스턴스 페이지로 이동합니다.

    VM 인스턴스 페이지로 이동

  2. sendgrid-tutorial 인스턴스의 체크박스를 클릭합니다.
  3. 삭제 를 클릭하여 인스턴스를 삭제합니다.

다음 단계

다른 Google Cloud 기능을 직접 사용해보세요. 가이드 참조