Mailjet으로 이메일 보내기


Mailjet은 Compute Engine 사용자에게 매월 이메일 6,000개를 사용할 수 있는 무료 등급을 제공하는 타사 글로벌 이메일 서비스입니다. 또한 다음과 같은 서비스도 제공합니다.

  • 트랜잭션 및 마케팅 이메일을 전송하기 위한 API, 사용자 인터페이스, SMTP 릴레이
  • 유럽 데이터 개인정보 보호 규정 준수
  • 맞춤설정 가능한 우선순위 설정 및 자동 제한 관리와 같은 이메일과 전달 기능
  • 하위 계정, 인증, 연락처, 캠페인, 커스텀 페이로드, 통계, 실시간 이벤트, 파싱을 Event API를 통해 관리할 수 있는 Go, PHP, Nodejs, 자바, Python, Ruby로 작성된 API 리소스 라이브러리
  • 응답 HTML 이메일 템플릿을 만들기 위한 통합 MJML 프레임워크
  • 4개 이상의 언어로 연중무휴 지원
  • gmail.com이 아닌 도메인에서 이메일 메시지를 보내는 기능

이 문서에서는 다음 방법으로 Mailjet을 통해 메일을 전송하기 위해 VM 인스턴스를 구성하는 방법을 설명합니다.

  • 다음 소프트웨어를 사용한 SMTP 릴레이를 통해 전송
  • 자바를 사용하여 Mailjet API를 통해 직접 전송

대부분의 일반적인 SMTP 서버, 라이브러리, 프레임워크와의 통합 예를 비롯하여 기타 이메일 솔루션에 관한 포괄적인 문서는 Mailjet 문서를 참조하세요.

시작하기 전에

  1. Mailjet의 Google 파트너 페이지*에서 새 Mailjet 계정을 만듭니다. 가입할 때 이메일 메시지를 보낼 도메인 및 이메일 주소를 입력합니다.

  2. Mailjet SMTP 계정 사용자 인증 정보를 가져옵니다.

  3. 이메일을 보내려는 이메일 주소가 검증되었는지 확인합니다.

  4. 방화벽 규칙을 설정하여 포트 2525에서 TCP 트래픽을 허용합니다.

* Google은 유료 계정에 가입한 고객에 대한 보상을 받습니다.

Mailjet을 SMTP 릴레이로 구성

Mailjet을 메일 릴레이로 구성하면 원격 전달을 위해 이메일 메시지를 Mailjet으로 전달할 수 있습니다.

Postfix 사용

  1. SSH를 사용하여 VM에 연결합니다. instance-name을 이메일 메시지를 보내려는 인스턴스의 이름으로 바꿉니다.

    gcloud compute ssh instance-name
  2. VM에 Postfix Mail Transport Agent를 설치합니다. 메시지가 표시되면 도메인 이름에 기본 선택 항목을 수락하고 Local Only 구성을 선택합니다.

    Debian

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

    CentOS

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

  3. Postfix 구성 옵션을 수정합니다. Postfix 구성 옵션은 main.cf 파일에 설정됩니다. 원하는 텍스트 편집기로 파일을 엽니다.

    sudo vi /etc/postfix/main.cf
    
  4. 파일을 업데이트합니다.

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

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

      relayhost = in-v3.mailjet.com:2525
      smtp_tls_security_level = encrypt
      smtp_sasl_auth_enable = yes
      smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
      smtp_sasl_security_options = noanonymous
      

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

    3. 변경사항을 저장하고 파일을 닫습니다.

  5. 선택한 텍스트 편집기를 사용하여 SASL 비밀번호 맵을 생성합니다.

    sudo vi /etc/postfix/sasl_passwd
    
  6. sasl_passwd 파일에 다음 줄을 추가하여 Mailjet에 대한 사용자 인증 정보를 제공합니다.

    in-v3.mailjet.com:2525 YOUR_API_KEY:YOUR_SECRET_KEY
    
  7. postmap 유틸리티를 사용하여 .db 파일을 생성합니다.

    sudo postmap /etc/postfix/sasl_passwd
    sudo ls -l /etc/postfix/sasl_passwd*
    

    다음과 같은 응답이 표시됩니다.

    -rw------- 1 root root    68 Jun  1 10:50 /etc/postfix/sasl_passwd
    -rw------- 1 root root 12288 Jun  1 10:51 /etc/postfix/sasl_passwd.db
    
  8. 다음으로, 사용자 인증 정보가 들어 있는 파일은 더 이상 필요 없으므로 삭제합니다.

    sudo rm /etc/postfix/sasl_passwd
    
  9. .db 파일에 대한 권한을 설정합니다.

    sudo chmod 600 /etc/postfix/sasl_passwd.db
    sudo ls -la /etc/postfix/sasl_passwd.db
    
  10. 마지막으로 구성을 새로고침하여 수정된 매개변수를 로드합니다.

    Debian

    sudo /etc/init.d/postfix restart
    

    CentOS

    sudo postfix reload
    

  11. 구성을 테스트합니다. mailx 또는 mailutils 패키지를 설치하고 구성을 테스트합니다.

    Debian

    sudo apt -y install mailutils
    

    CentOS

    sudo yum install mailx -y
    

    테스트 메시지를 보냅니다.

    echo 'Test passed.' | mail -s 'Test-Email' -aFrom:from-email destination-email

    다음을 바꿉니다.

    • from-email: 검증된 이메일 주소입니다.
    • destination-email: 이메일 메시지가 전송될 주소입니다.

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

    Debian

    sudo tail -n 5 /var/log/syslog
    

    CentOS

    sudo tail -n 5 /var/log/maillog
    

Mailjet에서 Postfix를 설정하는 중에 문제가 발생하는 경우 Mailjet Postfix 설정 안내를 참조하세요.

Nodemailer 사용

다음 안내에서는 Debian Wheezy에서 Node.js로 Mailjet을 사용하는 방법을 설명합니다.

Debian
  1. SSH를 사용하여 인스턴스에 연결합니다.
    gcloud compute ssh instance-name
  2. 패키지 저장소를 업데이트합니다.
    user@test-wheezy:~# sudo apt update
  3. Node.js 종속 항목을 설치합니다.
    user@test-wheezy:~# sudo apt -y install git-core curl build-essential openssl libssl-dev
  4. GitHub에서 Node.js 저장소를 클론합니다.
    user@test-wheezy:~# git clone https://github.com/nodejs/node
  5. 디렉터리를 Node.js 소스 트리로 변경합니다.
    user@test-wheezy:~# cd node
  6. 이 OS와 가상 머신에 맞게 노드 소프트웨어를 구성합니다.
    user@test-wheezy:~# ./configure
  7. Node.js, npm, 관련 객체를 빌드합니다.
    user@test-wheezy:~# sudo make

    완료하는 데 몇 분 정도 걸릴 수 있습니다.

  8. Node.js, npm, 다른 소프트웨어를 기본 위치에 설치합니다.
    user@test-wheezy:~# sudo make install
  9. 메일 프로그램 패키지를 설치합니다.
    user@test-wheezy:~# npm install nodemailer nodemailer-smtp-transport
  10. node 디렉터리에서 다음 자바스크립트가 포함된 sendmail.js라는 새 파일을 만듭니다.
    const mailer = require('nodemailer');
    const smtp = require('nodemailer-smtp-transport');
    
    async function mailjet() {
      const transport = mailer.createTransport(
        smtp({
          host: 'in.mailjet.com',
          port: 2525,
          auth: {
            user: process.env.MAILJET_API_KEY || '<your-mailjet-api-key',
            pass: process.env.MAILJET_API_SECRET || '<your-mailjet-api-secret>',
          },
        })
      );
    
      const json = await transport.sendMail({
        from: 'ANOTHER_EMAIL@ANOTHER_EXAMPLE.COM', // From address
        to: 'EMAIL@EXAMPLE.COM', // To address
        subject: 'test email from Node.js on Google Cloud Platform', // Subject
        text: 'Hello!\n\nThis a test email from Node.js.', // Content
      });
      console.log(json);
    }
    mailjet();
  11. 프로그램을 실행하여 Mailjet을 통해 이메일 메시지를 보냅니다.
    user@test-wheezy:~# node sendmail.js
CentOS
  1. SSH를 사용하여 인스턴스에 연결합니다.
    gcloud compute ssh instance-name
  2. 패키지 저장소를 업데이트합니다.
    user@test-centos:~# sudo yum update -y
  3. Node.js 종속 항목을 설치합니다.
    user@test-centos:~# sudo yum install git-core curl openssl openssl-dev -y
    ...
    user@test-centos:~# sudo yum groupinstall "Development Tools" -y
    ...
  4. GitHub에서 Node.js 저장소를 복제합니다.
    user@test-centos:~# git clone https://github.com/nodejs/node
  5. 디렉터리를 Node.js 소스 트리로 변경합니다.
    user@test-centos:~# cd node
  6. 이 OS와 가상 머신에 맞게 노드 소프트웨어를 구성합니다.
    user@test-centos:~# ./configure
  7. Node.js, npm, 관련 객체를 빌드합니다.
    user@test-centos:~# sudo make

    완료하는 데 몇 분 정도 걸릴 수 있습니다.

  8. Node.js, npm, 다른 소프트웨어를 기본 위치에 설치합니다.
    user@test-centos:~# sudo make install
  9. 메일 프로그램 패키지를 설치합니다.
    user@test-centos:~# npm install npm install nodemailer nodemailer-smtp-transport
  10. node 디렉터리에서 다음 자바스크립트가 포함된 sendmail.js라는 새 파일을 만듭니다.
    const mailer = require('nodemailer');
    const smtp = require('nodemailer-smtp-transport');
    
    async function mailjet() {
      const transport = mailer.createTransport(
        smtp({
          host: 'in.mailjet.com',
          port: 2525,
          auth: {
            user: process.env.MAILJET_API_KEY || '<your-mailjet-api-key',
            pass: process.env.MAILJET_API_SECRET || '<your-mailjet-api-secret>',
          },
        })
      );
    
      const json = await transport.sendMail({
        from: 'ANOTHER_EMAIL@ANOTHER_EXAMPLE.COM', // From address
        to: 'EMAIL@EXAMPLE.COM', // To address
        subject: 'test email from Node.js on Google Cloud Platform', // Subject
        text: 'Hello!\n\nThis a test email from Node.js.', // Content
      });
      console.log(json);
    }
    mailjet();
  11. 프로그램을 실행하여 Mailjet을 통해 이메일 메시지를 보냅니다.
    user@test-centos:~# node sendmail.js

자바를 사용하여 Mailjet API를 통해 메일 전송

Mailjet API 사용에 대한 자세한 예는 공식 Mailjet 문서를 참조하세요.

Debian
  1. SSH를 사용하여 인스턴스에 연결합니다.
    gcloud compute ssh instance-name
  2. 패키지 저장소를 업데이트하고 필수 패키지를 설치합니다.
    user@test-instance:~# sudo apt update && sudo apt install git-core openjdk-8-jdk maven
  3. GitHub에서 자바 저장소를 복제합니다.
    user@test-instance:~# git clone https://github.com/GoogleCloudPlatform/java-docs-samples.git
  4. 다음 위치에 있는 기본 소스 코드로 이동하여 예를 참조합니다.
    /root/java-docs-samples/compute/mailjet/src/main/java/com/example/compute/mailjet
  5. Mailjet 설정을 구성합니다. 다음 변수를 바꾸는 방법은 Mailjet 인증 문서를 참조하세요.

    • your-mailjet-api-key: Mailjet 계정의 API 키입니다.
    • your-mailjet-secret-key: Mailjet 계정의 해당 보안 비밀 키입니다.

    public class MailjetSender {
    
      public static void main(String[] args) throws MailjetException {
        final String mailjetApiKey = "YOUR-MAILJET-API-KEY";
        final String mailjetSecretKey = "YOUR-MAILJET-SECRET-KEY";
        ClientOptions options =
            ClientOptions.builder().apiKey(mailjetApiKey).apiSecretKey(mailjetSecretKey).build();
        MailjetClient client = new MailjetClient(options);
    
        MailjetSender sender = new MailjetSender();
        sender.sendMailjet(args[0], args[1], client);
      }
    
      public MailjetResponse sendMailjet(String recipient, String sender, MailjetClient client)
          throws MailjetException {
        MailjetRequest email =
            new MailjetRequest(Emailv31.resource)
                .property(
                    Emailv31.MESSAGES,
                    new JSONArray()
                        .put(
                            new JSONObject()
                                .put(
                                    Emailv31.Message.FROM,
                                    new JSONObject().put("Email", sender).put("Name", "pandora"))
                                .put(
                                    Emailv31.Message.TO,
                                    new JSONArray().put(new JSONObject().put("Email", recipient)))
                                .put(Emailv31.Message.SUBJECT, "Your email flight plan!")
                                .put(
                                    Emailv31.Message.TEXTPART,
                                    "Dear passenger, welcome to Mailjet!" 
                                    + "May the delivery force be with you!")
                                .put(
                                    Emailv31.Message.HTMLPART,
                                    "<h3>Dear passenger, welcome to Mailjet!</h3>"
                                    + "<br />May the delivery force be with you!")));
    
        try {
          // trigger the API call
          MailjetResponse response = client.post(email);
          // Read the response data and status
          System.out.println(response.getStatus());
          System.out.println(response.getData());
          return response;
        } catch (MailjetException e) {
          System.out.println("Mailjet Exception: " + e);
          return null;
        }
      }
    }
  6. mailjet 디렉터리에서 Maven을 사용하여 클래스를 JAR 파일로 패키징합니다.
    user@test-instance:~# mvn clean package
  7. OpenJDK 8이 사용 중인지 확인합니다.
    user@test-instance:~# sudo update-alternatives --config java
  8. 대상 디렉터리에서 이메일을 보내려면 받는 사람 이메일 주소와 보내는 사람 이메일 주소를 인수로 사용하여 JAR 파일을 실행합니다.
    user@test-instance:~# java -jar
            compute-mailjet-1.0-SNAPSHOT-jar-with-dependencies.jar
            recipient-email sender-email
CentOS
  1. SSH를 사용하여 인스턴스에 연결합니다.
    gcloud compute ssh instance-name
  2. 패키지 저장소를 업데이트하고 필수 패키지를 설치합니다.
    user@test-centos:~# sudo yum update && sudo yum install git-core openjdk-8-jdk maven
  3. GitHub에서 자바 저장소를 복제합니다.
    user@test-centos:~# git clone https://github.com/GoogleCloudPlatform/java-docs-samples.git
  4. 다음 위치에 있는 기본 소스 코드로 이동하여 예를 참조합니다.
    /root/java-docs-samples/compute/mailjet/src/main/java/com/example/compute/mailjet
  5. Mailjet 설정을 구성합니다. 다음 변수를 바꾸는 방법은 Mailjet 인증 문서를 참조하세요.

    • your-mailjet-api-key: Mailjet 계정의 API 키입니다.
    • your-mailjet-secret-key: Mailjet 계정의 해당 보안 비밀 키입니다.

    public class MailjetSender {
    
      public static void main(String[] args) throws MailjetException {
        final String mailjetApiKey = "YOUR-MAILJET-API-KEY";
        final String mailjetSecretKey = "YOUR-MAILJET-SECRET-KEY";
        ClientOptions options =
            ClientOptions.builder().apiKey(mailjetApiKey).apiSecretKey(mailjetSecretKey).build();
        MailjetClient client = new MailjetClient(options);
    
        MailjetSender sender = new MailjetSender();
        sender.sendMailjet(args[0], args[1], client);
      }
    
      public MailjetResponse sendMailjet(String recipient, String sender, MailjetClient client)
          throws MailjetException {
        MailjetRequest email =
            new MailjetRequest(Emailv31.resource)
                .property(
                    Emailv31.MESSAGES,
                    new JSONArray()
                        .put(
                            new JSONObject()
                                .put(
                                    Emailv31.Message.FROM,
                                    new JSONObject().put("Email", sender).put("Name", "pandora"))
                                .put(
                                    Emailv31.Message.TO,
                                    new JSONArray().put(new JSONObject().put("Email", recipient)))
                                .put(Emailv31.Message.SUBJECT, "Your email flight plan!")
                                .put(
                                    Emailv31.Message.TEXTPART,
                                    "Dear passenger, welcome to Mailjet!" 
                                    + "May the delivery force be with you!")
                                .put(
                                    Emailv31.Message.HTMLPART,
                                    "<h3>Dear passenger, welcome to Mailjet!</h3>"
                                    + "<br />May the delivery force be with you!")));
    
        try {
          // trigger the API call
          MailjetResponse response = client.post(email);
          // Read the response data and status
          System.out.println(response.getStatus());
          System.out.println(response.getData());
          return response;
        } catch (MailjetException e) {
          System.out.println("Mailjet Exception: " + e);
          return null;
        }
      }
    }
  6. mailjet 디렉터리에서 Maven을 사용하여 클래스를 JAR 파일로 패키징합니다.
    user@test-centos:~# mvn clean package
  7. OpenJDK 8이 사용 중인지 확인합니다.
    user@test-centos:~# sudo alternatives --config java
  8. 대상 디렉터리에서 이메일을 보내기 위해 수신자 및 발신자 이메일 주소를 인수로 사용하여 JAR 파일을 실행합니다.
    user@test-centos:~# java -jar
            compute-mailjet-1.0-SNAPSHOT-jar-with-dependencies.jar
            recipient-email sender-email

Mailjet SMTP 설정

다음은 클라이언트를 구성하는 데 사용되는 Mailjet 관련 SMTP 설정에 대한 빠른 참조입니다.

  • 호스트: in-v3.mailjet.com
  • 포트: 2525

다음 단계

Google Cloud에 대한 참조 아키텍처, 다이어그램, 권장사항 살펴보기. Cloud 아키텍처 센터를 살펴보세요.