googleapiclient возвращает ошибку Bad Request при попытке отправить письмо через Gmail - PullRequest
0 голосов
/ 21 апреля 2020

Я получаю следующую ошибку, когда мой код python пытается отправить простое тестовое электронное письмо.

googleapiclient.errors.HttpError: <HttpError 400 when requesting https://www.googleapis.com/gmail/v1/users/me/messages/send?alt=json returned "Bad Request">

Мой код выглядит так:

      scope = ['https://www.googleapis.com/auth/gmail.send']
      path = <path to my serice account key in json format>
      self.credentials = ServiceAccountCredentials.from_json_keyfile_name(
          path + <service account key>, scope )
      self.EMAIL_FROM = self.credentials.service_account_email
      self.delegated_credentials = self.credentials.create_delegated(self.EMAIL_FROM)
      self.service = build('gmail', 'v1', credentials=self.delegated_credentials)

   def send( self, to, subject, body ):
      message = MIMEText(body)
      message['to'] = to
      message['from'] = <valid email account>
      message['subject'] = subject
      message = {'raw': base64.urlsafe_b64encode(message.as_bytes()).decode()}

      try:
         message = (self.service.users().messages().send(userId=<valid email account>, body=message)
                    .execute())
         print('Message Id: %s' % message['id'])
         return message
      except errors.HttpError as error:
         print('An error occurred: %s' % error)

Я внимательно следовал инструкциям https://medium.com/lyfepedia/sending-emails-with-gmail-api-and-python-49474e32c81f и существующей документации Gmail API. Я думаю, что я правильно настроил все права доступа и разрешения. Чего мне не хватает и почему ошибка?

Любая помощь очень ценится.

1 Ответ

0 голосов
/ 21 апреля 2020

Оказывается, проблема была с self.EMAIL_FROM выше. Это должно быть установлено для пользователя с правильным набором разрешений, чтобы иметь возможность отправлять электронную почту. Это решает мою проблему с самого начала. Однако мне не ясно, какие разрешения мне нужно установить для пользователя, который будет использоваться для делегирования. в настоящее время кажется, что он работает только с электронной почтой администратора.

Если у кого-то есть ясность в этом, пожалуйста, ответьте.

...