google应用程序引擎python中的EmailMessage类不工作?

google应用程序引擎python中的EmailMessage类不工作?,python,django,email,google-app-engine,attachment,Python,Django,Email,Google App Engine,Attachment,谷歌应用程序引擎文档是否未更新 当我这样做时,它工作正常(发送带有附件的电子邮件): message = mail.EmailMessage( sender=EMAIL_SENDER, subject=subject,body=theBody,to=['test@gmail.com'],attachments=[(attachname, new_blob.archivoBlob)]) message.send() 但是当我使用message.attach时,它会说EmailMessage对

谷歌应用程序引擎文档是否未更新

当我这样做时,它工作正常(发送带有附件的电子邮件):

message = mail.EmailMessage( sender=EMAIL_SENDER, 
subject=subject,body=theBody,to=['test@gmail.com'],attachments=[(attachname, 
new_blob.archivoBlob)])
message.send()
但是当我使用message.attach时,它会说
EmailMessage
对象没有属性
attach

message.attach("certificate.pdf", new_file, "application/pdf")
or
message.Attachment("certificate.pdf", new_file, "application/pdf")
两者都表示:
EmailMessage
对象没有属性
attach/attachment

文档中有“”的示例


请帮忙

据我在文档中看到的,有类,但类没有任何方法
attach()

类确实有一个
attachment
属性,这就是当您使用
attachments=[(foo,bar),(foo,bar)]
初始化电子邮件时它会工作的原因。实际上,您正在创建的新实例(使用元组作为),将它们添加到数组中,并在初始化电子邮件时使用此数组作为
附件
属性

请注意,在文档中,当他们编写
attachment=mail.attachment('foo.jpg','data')
时,
mail
是对导入的
google.appengine.api.mail
的引用,而不是实例化的邮件对象

回到您的示例(请注意,我不是python开发人员,也没有尝试过,我只是浏览文档并做出假设),而不是

message.attach("certificate.pdf", new_file, "application/pdf")
你也许应该在这条路上多走一点

attachment1 = mail.Attachment("certificate.pdf", new_file, "application/pdf")
attachment2 = mail.Attachment("another_certificate.pdf", new_file, "application/pdf")
message.attachments = [attachment1, attachment2]

我已经多年没有使用python了,但是请随意探索这个想法并编辑我的答案,以防我有任何错误(或者发布您自己的答案)。

据我在文档中看到的,有类,但类没有任何方法
attach()

类确实有一个
attachment
属性,这就是当您使用
attachments=[(foo,bar),(foo,bar)]
初始化电子邮件时它会工作的原因。实际上,您正在创建的新实例(使用元组作为),将它们添加到数组中,并在初始化电子邮件时使用此数组作为
附件
属性

请注意,在文档中,当他们编写
attachment=mail.attachment('foo.jpg','data')
时,
mail
是对导入的
google.appengine.api.mail
的引用,而不是实例化的邮件对象

回到您的示例(请注意,我不是python开发人员,也没有尝试过,我只是浏览文档并做出假设),而不是

message.attach("certificate.pdf", new_file, "application/pdf")
你也许应该在这条路上多走一点

attachment1 = mail.Attachment("certificate.pdf", new_file, "application/pdf")
attachment2 = mail.Attachment("another_certificate.pdf", new_file, "application/pdf")
message.attachments = [attachment1, attachment2]

我已经有好几年没有使用python了,但是如果我有任何错误,请随意探索这个想法并编辑我的答案(或者发布您自己的答案)。

EmailMessage类的属性是动态分配的,如下*:

因此,如果
attachments
没有作为关键字参数传递给构造函数,则该实例没有
attachments
属性,如果尝试引用它,则会得到一个
AttributeError

正如Jofre在其回答中所观察到的,您仍然可以直接分配给
附件

message.attachments = [attachment1]
创建“附件”属性后,还可以向其附加:

message.attachments.append(attachment2)

*这是一个简化版本;在real类中,赋值是在一个单独的方法中完成的,但基本上是以相同的方式完成的。

EmailMessage类的属性是动态赋值的,如下*:

因此,如果
attachments
没有作为关键字参数传递给构造函数,则该实例没有
attachments
属性,如果尝试引用它,则会得到一个
AttributeError

正如Jofre在其回答中所观察到的,您仍然可以直接分配给
附件

message.attachments = [attachment1]
创建“附件”属性后,还可以向其附加:

message.attachments.append(attachment2)

*这是一个简化版本;在真正的类中,赋值是用一个单独的方法完成的,但基本上是相同的。

我用send\u mail函数解决了这个问题,其中一个错误是没有为文件名指定“.pdf”,而只是将其命名为“certificate”

此外,如果您在app.yaml中指定了任何直接url访问的处理程序,请确保将“application_readable”设置为true,以便在应用程序中访问该文件:

- url: /certificate.((pdf)|(PDF))
  static_files: pages/pdf/certificate.PDF
  upload: pages/pdf/certificate.PDF
  application_readable: true

 additional_pdf = open(os.path.dirname(__file__) + '/../pages/pdf/certificate.pdf').read()

 mail.send_mail(sender=EMAIL_SENDER,
                  to=['mmyemail@gmail.com'],
                  subject=subject,
                  body=theBody,
                  attachments=[(attachname, blob.archivoBlob),("certificate.pdf",additional_pdf)])

我修复了send_mail函数的问题,其中一个错误是没有为文件名指定“.pdf”,而只是将其命名为“certificate”

此外,如果您在app.yaml中指定了任何直接url访问的处理程序,请确保将“application_readable”设置为true,以便在应用程序中访问该文件:

- url: /certificate.((pdf)|(PDF))
  static_files: pages/pdf/certificate.PDF
  upload: pages/pdf/certificate.PDF
  application_readable: true

 additional_pdf = open(os.path.dirname(__file__) + '/../pages/pdf/certificate.pdf').read()

 mail.send_mail(sender=EMAIL_SENDER,
                  to=['mmyemail@gmail.com'],
                  subject=subject,
                  body=theBody,
                  attachments=[(attachname, blob.archivoBlob),("certificate.pdf",additional_pdf)])

感谢您提供的详细信息,我花了相当长的时间试图找出您的答案实际上是正确的,但由于某些原因,我仍然无法让它工作。我用send_mail功能(添加在下面作为我的答案)修复了它。感谢您提供的详细信息,我花了相当长的时间试图找出您的答案是否正确,但由于某些原因,我仍然无法使其正常工作。我使用send_mail功能修复了它(添加到下面作为我的答案)