Gmail api를 ServiceAccount (G Suite 관리)에서 수행하는 것은 어렵습니다.

목적


  • Gmail API로 이메일 보내기
  • G suite 관리하에 도메인 아래에서 전송
  • 사용자 토큰이 아니라 ServiceAccount를 통해

  • 필요한 것


  • 서비스 계정 세부 정보에서 "G suite 도메인 전체의 위임을 유공으로 만든다"
  • G suite 관리 화면에서 Api scopes 설정 (불명료 한 점 있음

  • Api scopes


    http://www.google.com/m8/feeds/contacts/,http://www.google.com/m8/feeds/groups/,https://mail.google.com/
    

    (어쩐지 모르지만 mail.google.com 범위 만 있으면 권한 오류가 발생하므로이 세 가지 범위가 필수입니다.

    샘플 코드 (루비


    # frozen_string_literal: true
    
    class GmailDeliveryMethod
      attr_reader :settings
    
      def initialize(settings)
        @settings = settings
      end
    
      def deliver(mail)
        credentials = Google::Auth::ServiceAccountCredentials.new(
          token_credential_uri: settings[:token_uri],
          audience: settings[:token_uri],
          scope: Google::Apis::GmailV1::AUTH_SCOPE,
          issuer: settings[:client_email],
          signing_key: OpenSSL::PKey::RSA.new(settings[:private_key]),
          project_id: settings[:project_id],
        )
        credentials.sub = mail.from.first
        gmail = Google::Apis::GmailV1::GmailService.new
        gmail.authorization = credentials
        gmail.send_user_message(
          mail.from.first,
          upload_source: StringIO.new(mail.to_s),
          content_type: 'message/rfc822',
        )
      end
      alias deliver! deliver
    end
    
    
    message = Mail.new(
      from: '[email protected]',
      to: '[email protected]',
      subject: 'TEST MAIL',
      body: "TEST MAIL #{Time.current}",
    )
    
    GmailDeliveryMethod.new({...}).deliver(message)
    


    좋은 웹페이지 즐겨찾기