Google App Engine:如何使用 send_mail 发送 html

Posted

技术标签:

【中文标题】Google App Engine:如何使用 send_mail 发送 html【英文标题】:Google App Engine: how to send html using send_mail 【发布时间】:2011-05-31 08:58:51 【问题描述】:

我有一个带有休息 api 的应用程序,我用它来发送电子邮件。但是它目前只发送文本电子邮件,所以我需要知道如何修改它并让它发送 html 。下面是代码:

从 __future__ 导入 with_statement #!/usr/bin/env python # 导入cgi 导入操作系统 导入日志 导入上下文库 从 xml.dom 导入 minidom 从 xml.dom.minidom 导入文档 导入例外 导入警告 导入 imghdr 从 google.appengine.api 导入图片 从 google.appengine.api 导入用户 从 google.appengine.ext 导入数据库 从 google.appengine.ext 导入 webapp 从 google.appengine.ext.webapp.util 导入 run_wsgi_app 从 google.appengine.ext.webapp 导入模板 从 google.appengine.api 导入邮件 导入 wsgiref.handlers # 开始常量 CONTENT_TYPE_HEADER = "内容类型" CONTENT_TYPE_TEXT = "文本/纯文本" XML_CONTENT_TYPE = "应用程序/xml" XML_ENCODING = "utf-8" """ 允许您指定 IP 地址和关联的“api_key”以防止其他人使用您的应用程序。 存储和操作方法将在 POST/GET 参数中检查此“api_key”。 检索方法不使用它(但是您可以让它们使用它,但可能会重写,因此您有一个“读取”键和一个“写入”键以防止其他人操作您的数据)。 将“AUTH = False”设置为禁用(允许任何人使用您的应用程序并 CRUD 您的数据)。 要生成哈希/api_key,请访问 https://www.grc.com/passwords.htm 要查找您的 IP,请访问 http://www.whatsmyip.org/ """ 授权 = '000.000.000.000':'JLQ7P5SnTPq7AJvLnUysJmXSeXTrhgaJ', # END 常量 # 开始异常处理 类错误(标准错误): 经过 禁止类(错误): 经过 logging.getLogger().setLevel(logging.DEBUG) @contextlib.contextmanager def mailExcpHandler(ctx): 尝试: 屈服 除了(ValueError),exc: xml_error_response(ctx, 400 ,'app.invalid_parameters', '指示的参数无效:' + exc.message) 除了(禁止),exc: xml_error_response(ctx, 403 ,'app.forbidden', '您没有执行此操作的权限:' + exc.message) 除了(例外),exc: xml_error_response(ctx, 500 ,'system.other', 'Web 服务发生意外错误:' + exc.message) def xml_error_response(ctx, status, error_id, error_msg): ctx.error(状态) 文档 = 文档() 错误卡 = doc.createElement("错误") errorcard.setAttribute("id", error_id) doc.appendChild(错误卡) ptext = doc.createTextNode(error_msg) errorcard.appendChild(ptext) ctx.response.headers[CONTENT_TYPE_HEADER] = XML_CONTENT_TYPE ctx.response.out.write(doc.toxml(XML_ENCODING)) # END 异常处理 # START 辅助方法 def isAuth(ip = None, key = None): 如果 AUTH == 假: 返回真 elif AUTH.has_key(ip) 和 key == AUTH[ip]: 返回真 别的: 返回假 # END 辅助方法 # 开始请求处理程序 类发送(webapp.RequestHandler): def post(自我): """ 根据 POST 参数发送电子邮件。如果当时资源不可用,它将排队。 返回“成功” 发布参数: to:收件人地址 from:发件人地址(必须是注册的 GAE 电子邮件) 主题:电子邮件主题 正文:电子邮件正文内容 """ 使用 mailExcpHandler(self): #检查授权 如果 isAuth(self.request.remote_addr,self.request.POST.get('api_key')) == False: raise Forbidden("无效凭证") # 从请求中读取数据 mail_to = str(self.request.POST.get('to')) mail_from = str(self.request.POST.get('from')) mail_subject = str(self.request.POST.get('subject')) mail_body = str(self.request.POST.get('body')) mail.send_mail(mail_from,mail_to,mail_subject,mail_body) self.response.headers[CONTENT_TYPE_HEADER] = CONTENT_TYPE_TEXT self.response.out.write("成功") # END 请求处理程序 # 开始申请 应用程序 = webapp.WSGIApplication([ ('/发送', 发送) ],调试=真) 定义主(): run_wsgi_app(应用程序) 如果 __name__ == '__main__': 主要的() #结束申请

【问题讨论】:

【参考方案1】:

看看send_mail函数的Email message fields。 这是您需要的参数:

html 正文内容的 HTML 版本,适用于喜欢 HTML 电子邮件的收件人。

您应该像这样添加html 输入参数:

#Your html body
mail_html_body = '<h1>Hello!</h1>'

# read data from request
mail_to = str(self.request.POST.get('to'))
mail_from = str(self.request.POST.get('from'))
mail_subject = str(self.request.POST.get('subject'))
mail_body = str(self.request.POST.get('body'))

mail.send_mail(mail_from, 
               mail_to,
               mail_subject, 
               mail_body,
               html = mail_html_body ) #your html body

【讨论】:

【参考方案2】:

你可以使用EmailMessage类的html字段

message = mail.EmailMessage(sender=emailFrom,subject=emailSubject)
message.to = emailTo
message.body = emailBody
message.html = emailHtml
message.send()

【讨论】:

单独的代码块并不能提供好的答案。请添加解释(为什么它解决了问题,错误在哪里等等......)

以上是关于Google App Engine:如何使用 send_mail 发送 html的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Google App Engine 中使用 sbt?

如何减少 Google App Engine 部署的 ktor App 文件大小

如何使用 Google App Engine 验证表单数据? [关闭]

如何在 Google Cloud Functions 和 Google App Engine 之间进行选择?

如何在 Google App Engine Python 上的 Django nonrel 中使用查询游标?

Google App Engine 如何实现分析(堆栈跟踪)?