我一直在尝试使用Jinja2创建模板化的Google云端硬盘文档,并最终通过电子邮件将该文档作为附加的PDF文档发送。
到目前为止,我已经设法充分利用它,但现在我被困在附件部分。我收到错误“InvalidAttachmentTypeError:无效的附件类型”。
有没有办法改进这一点,以便提高效率。
class Upload(webapp2.RequestHandler):
@decorator.oauth_required
def get(self):
if decorator.has_credentials():
try:
body = {'title': 'My New Text Document',
'description': 'Hello World'}
template = JINJA_ENVIRONMENT.get_template('document.html')
template_values = {'name': 'Simon'}
fh = StringIO.StringIO(template.render(template_values))
media_body = MediaIoBaseUpload(fh,
mimetype='text/html',
resumable=False)
http = httplib2.Http(memcache)
http = decorator.http()
service = discovery.build('drive', 'v2', http=http)
file = service.files().insert(body=body,
media_body=media_body,
convert=True).execute(http=http)
m = mail.EmailMessage()
m.sender = 'myfromemailaaddress@gmail.com'
m.to = 'mytoemailaddress@gmail.com'
m.subject = 'My Subject'
m.html = '<p>My body.</p>'
m.attachments = [(file['title'],
file['exportLinks']['application/pdf'])]
m.send()
self.redirect('/')
except client.AccessTokenRefreshError:
self.redirect('/')
else:
self.redirect(decorator.authorize_url())
答案 0 :(得分:1)
在m.attachments属性中你应该拥有每个附件的元组,第一个元素是文档标题,第二个元素是文档数据本身。
在您的情况下,您的文档数据只是一个字符串,它不是文件,所以这是您的问题。 您应首先从云端硬盘检索pdf文件,然后将其作为附件。
您可以使用downloadURL属性(或者在您的情况下使用exportLinks)检查here如何下载文件内容。
另外,请确保为文件设置正确的扩展名。没有扩展名或具有某些特定扩展名的文件被列入黑名单,无法作为附件发送。 Check this
希望这有帮助。
答案 1 :(得分:0)
经过大量的实验,我终于弄清楚它是如何完成的。所以这里的任何人都和我一样。
class Upload(webapp2.RequestHandler):
@decorator.oauth_required
def get(self):
if decorator.has_credentials():
try:
body = {'title': 'My New Text Document',
'description': 'Hello World'}
template = JINJA_ENVIRONMENT.get_template('document.html')
template_values = {'name': 'Simon'}
fh = StringIO.StringIO(template.render(template_values))
media_body = MediaIoBaseUpload(fh,
mimetype='text/html',
resumable=False)
http = httplib2.Http(memcache)
http = decorator.http()
service = discovery.build('drive', 'v2', http=http)
file = service.files().insert(body=body,
media_body=media_body,
convert=True).execute(http=http)
download_url = file['exportLinks']['application/pdf']
resp, content = service._http.request(download_url)
m = mail.EmailMessage()
m.sender = 'myfromemailaaddress@gmail.com'
m.to = 'mytoemailaddress@gmail.com'
m.subject = 'My Subject'
m.html = '<p>My body.</p>'
m.attachments = [('myfile.pdf', str(content))]
m.send()
self.redirect('/')
except client.AccessTokenRefreshError:
self.redirect('/')
else:
self.redirect(decorator.authorize_url())