WinError 10054 Существующее соединение было принудительно закрыто удаленным хостом при отправке электронной почты с вложением через Gmail API с Python - PullRequest
0 голосов
/ 16 ноября 2018

Попытка отправить электронное письмо с вложением через Gmail API с помощью Python.

При отправке электронного письма без вложения все работает нормально, но как только я добавляю файл PDF, Google возвращает меня "[WinError 10054]Существующее соединение было принудительно закрыто удаленным хостом ".

Кто-нибудь знает, почему это происходит?

Мой код:

import base64
from email.mime.multipart import MIMEMultipart
from oauth2client import file, client, tools
from googleapiclient.discovery import build
from email.mime.text import MIMEText
from email.mime.base import MIMEBase
from httplib2 import Http

def auth(scopes):
    store = file.Storage('token.json')
    creds = store.get()
    if not creds or creds.invalid:
        flow = client.flow_from_clientsecrets('credentials.json', scopes)
        creds = tools.run_flow(flow, store)
    service = build('gmail', 'v1', http=creds.authorize(Http()))
    return service

def create_mess():
    message = MIMEText('Message text')
    message['to'] = 'to@gmail.com'
    message['from'] = 'from@domain.com'
    message['subject'] = 'Subject'
    return {'raw': base64.urlsafe_b64encode(message.as_string().encode()).decode()}

def create_mess_att():
    message = MIMEMultipart()
    message['to'] = 'to@gmail.com'
    message['from'] = 'from@domain.com'
    message['subject'] = 'Subject'

    msg = MIMEText('Message text')
    message.attach(msg)

    fp = open('TestFile.pdf', 'rb')
    msg = MIMEBase('application', 'octet-stream')
    msg.set_payload(fp.read())
    fp.close()

    filename = 'TestFile.pdf'
    msg.add_header('Content-Disposition', 'attachment', filename=filename)
    message.attach(msg)

    return {'raw': base64.urlsafe_b64encode(message.as_string().encode()).decode()}

def send_mess(message):
    service.users().messages().send(userId='me', body=message).execute()

Эта часть работает:

service = auth('https://www.googleapis.com/auth/gmail.modify')
message = create_mess()
send_mess(message)

Эта часть не:

service = auth('https://www.googleapis.com/auth/gmail.modify')
message = create_mess_att()
send_mess(message)

ConnectionResetError: [WinError 10054] An existing connection was forcibly closed by the remote host

Заранее спасибо!

...