编程语言
首页 > 编程语言> > python – 使用Gmail API发送大型附件时出现错误10053

python – 使用Gmail API发送大型附件时出现错误10053

作者:互联网

我正在尝试使用Gmail API和以下功能发送各种尺寸的电子邮件.

一般情况下这很好用,但对于超过10MB的附件(这种情况很少但会发生)我收到Errno 10053,我认为是因为我在发送包含大附件的消息时超时.

有没有办法解决这个问题,比如指定大小或增加超时限制? Gmail API文档中提到了大小,但我很难理解如何在Python中使用它或者它是否有帮助.

def CreateMessageWithAttachment(sender, to, cc, subject,
                                message_text, file_dir, filename):
  """Create a message for an email.

  Args:
    sender: Email address of the sender.
    to: Email address of the receiver.
    subject: The subject of the email message.
    message_text: The text of the email message.
    file_dir: The directory containing the file to be attached.
    filename: The name of the file to be attached.

  Returns:
    An object containing a base64url encoded email object.
  """
  message = MIMEMultipart()
  message['to'] = to
  if cc != None:
    message['cc'] = cc
  message['from'] = sender
  message['subject'] = subject

  msg = MIMEText(message_text)
  message.attach(msg)

  path = os.path.join(file_dir, filename)
  content_type, encoding = mimetypes.guess_type(path)

  QCoreApplication.processEvents()

  if content_type is None or encoding is not None:
    content_type = 'application/octet-stream'
  main_type, sub_type = content_type.split('/', 1)
  if main_type == 'text':
    fp = open(path, 'rb')
    msg = MIMEText(fp.read(), _subtype=sub_type)
    fp.close()
  elif main_type == 'image':
    fp = open(path, 'rb')
    msg = MIMEImage(fp.read(), _subtype=sub_type)
    fp.close()
  elif main_type == 'audio':
    fp = open(path, 'rb')
    msg = MIMEAudio(fp.read(), _subtype=sub_type)
    fp.close()
  else:
    fp = open(path, 'rb')
    msg = MIMEBase(main_type, sub_type)
    msg.set_payload(fp.read())
    fp.close()
  QCoreApplication.processEvents()

  msg.add_header('Content-Disposition', 'attachment', filename=filename)
  message.attach(msg)
  return {'raw': base64.urlsafe_b64encode(message.as_string())}



def SendMessage(service, user_id, message, size):
  """Send an email message.

  Args:
    service: Authorized Gmail API service instance.
    user_id: User's email address. The special value "me"
    can be used to indicate the authenticated user.
    message: Message to be sent.

  Returns:
    Sent Message.
  """

  try:
    message = (service.users().messages().send(userId=user_id, body=message)
               .execute())
    QCoreApplication.processEvents()
    return message
  except errors.HttpError, error:
    pass

解决方法:

对于那些大的东西,您需要使用MEDIA / upload选项.然后,您可以发送最多Gmail允许的电子邮件.有关如何使用/上传的文档:
https://developers.google.com/gmail/api/v1/reference/users/messages/send

10MB的限制没有很好的记录.

标签:email-attachments,python,gmail-api
来源: https://codeday.me/bug/20191002/1844533.html