Интеграция API календаря Google с Python - изменение почтового адреса отправителя в API календаря - PullRequest
1 голос
/ 21 марта 2019

Я пытаюсь выяснить интеграцию API Google с Python (Django) для отправки событий календаря пользователям.Пока все работает нормально, но письма отправляются с почтового адреса моей учетной записи службы Google, который имеет вид:

<project_name>-django@<project_name>.iam.gserviceaccount.com

, который исходит из атрибута client_email моего файла json.Пожалуйста, прочитайте этот ответ для реализации: https://stackoverflow.com/a/37933674/3520404

Теперь я хочу, чтобы все письма отправлялись с определенного почтового адреса, чтобы люди могли отвечать на письма.

Вот мой код:

import httplib2
from googleapiclient.discovery import build
from oauth2client.service_account import ServiceAccountCredentials

def get_google_calendar_service():
    credentials = ServiceAccountCredentials.from_json_keyfile_name(
        filename=settings.GOOGLE_SERVICE_ACCOUNT_KEY_FILE_PATH,
        scopes=['https://www.googleapis.com/auth/calendar']
    )

    http = credentials.authorize(httplib2.Http())

    service = build('calendar', 'v3', http=http)

    return service


def create_event():
    service = get_google_calendar_service()

    start_datetime = datetime.datetime.now(tz=pytz.utc)
    event = service.events().insert(calendarId='<MY_EMAIL_ID>', body={
        'summary': 'Foo',
        'description': 'Bar',
        'start': {'dateTime': start_datetime.isoformat()},
        'end': {'dateTime': (start_datetime + timedelta(minutes=15)).isoformat()},
    }).execute()

    print(event)

Я хочу отправить все приглашения с календарем из <MY_EMAIL_ID>, но этого не происходит.Есть ли способ контролировать FROM EMAIL ADDRESS при отправке календаря приглашений?Пожалуйста, помогите.

1 Ответ

1 голос
/ 22 апреля 2019

Это потому, что serviceaccount - это учетная запись, создающая события. У вас есть несколько вариантов.

1) Если у вас есть учетная запись G Suite, используйте делегирование по всему домену для учетной записи service и выдавайте себя за <MY_EMAIL_ID>, который вы хотите использовать. Это должно быть в домене G Suite, конечно. Этот пример предназначен для Admin SDK, но это все еще лучший пример олицетворения. Интересует линия credentials = credentials.create_delegated(user_email).

2) Нет учетной записи G Suite, вам нужно использовать поток входа OAuth2, чтобы получить учетные данные OAuth2 для <MY_EMAIL_ID>, а затем использовать эти учетные данные для аутентификации запроса. Доступна обширная документация .

...