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

2024-04-18 18:31:28 发布

您现在位置:Python中文网/ 问答频道 /正文

谷歌应用引擎文档没有更新吗?在

当我这样做的时候,它工作得很好(通过附件发送电子邮件):

message = mail.EmailMessage( sender=EMAIL_SENDER, 
subject=subject,body=theBody,to=['test@gmail.com'],attachments=[(attachname, 
new_blob.archivoBlob)])
message.send()

但当我使用邮件.附加,它表示EmailMessage对象没有属性attach

^{pr2}$

两者都说:EmailMessage对象没有属性attach/attachment

在文档中有“Attachment”的例子。在

请帮忙!在


Tags: 对象文档引擎message附件属性电子邮件email
3条回答

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

如果你在应用程序yaml对于直接url访问,请确保“应用程序可读”设置为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)])

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

class EmailMessage(_EmailMessageBase):

    def __init__(self, **kwargs):
        for name, value in kwargs.items():
            setattr(self, name, value)

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

正如Jofre在他们的回答中所观察到的,您仍然可以直接指定给attachments

^{pr2}$

创建“附件”属性后,还可以附加到该属性:

message.attachments.append(attachment2)

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

就我在文档中所看到的,有类^{},但类^{}没有任何方法attach()。在

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

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

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

message.attach("certificate.pdf", new_file, "application/pdf")

你也许应该在

^{pr2}$

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

相关问题 更多 >