谷歌应用引擎:如何使用send_mail发送html
我有一个应用程序,它使用一种叫做REST API的技术来发送电子邮件。不过现在它只能发送纯文本邮件,所以我需要知道怎么修改它,让它可以发送HTML格式的邮件。下面是相关的代码:
from __future__ import with_statement #!/usr/bin/env python # import cgi import os import logging import contextlib from xml.dom import minidom from xml.dom.minidom import Document import exceptions import warnings import imghdr from google.appengine.api import images from google.appengine.api import users from google.appengine.ext import db from google.appengine.ext import webapp from google.appengine.ext.webapp.util import run_wsgi_app from google.appengine.ext.webapp import template from google.appengine.api import mail import wsgiref.handlers # START Constants CONTENT_TYPE_HEADER = "Content-Type" CONTENT_TYPE_TEXT = "text/plain" XML_CONTENT_TYPE = "application/xml" XML_ENCODING = "utf-8" """ Allows you to specify IP addresses and associated "api_key"s to prevent others from using your app. Storage and Manipulation methods will check for this "api_key" in the POST/GET params. Retrieval methods don't use it (however you could enable them to use it, but maybe rewrite so you have a "read" key and a "write" key to prevent others from manipulating your data). Set "AUTH = False" to disable (allowing anyone use your app and CRUD your data). To generate a hash/api_key visit https://www.grc.com/passwords.htm To find your ip visit http://www.whatsmyip.org/ """ AUTH = { '000.000.000.000':'JLQ7P5SnTPq7AJvLnUysJmXSeXTrhgaJ', } # END Constants # START Exception Handling class Error(StandardError): pass class Forbidden(Error): pass logging.getLogger().setLevel(logging.DEBUG) @contextlib.contextmanager def mailExcpHandler(ctx): try: yield {} except (ValueError), exc: xml_error_response(ctx, 400 ,'app.invalid_parameters', 'The indicated parameters are not valid: ' + exc.message) except (Forbidden), exc: xml_error_response(ctx, 403 ,'app.forbidden', 'You don\'t have permission to perform this action: ' + exc.message) except (Exception), exc: xml_error_response(ctx, 500 ,'system.other', 'An unexpected error in the web service has happened: ' + exc.message) def xml_error_response(ctx, status, error_id, error_msg): ctx.error(status) doc = Document() errorcard = doc.createElement("error") errorcard.setAttribute("id", error_id) doc.appendChild(errorcard) 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 Exception Handling # START Helper Methods def isAuth(ip = None, key = None): if AUTH == False: return True elif AUTH.has_key(ip) and key == AUTH[ip]: return True else: return False # END Helper Methods # START Request Handlers class Send(webapp.RequestHandler): def post(self): """ Sends an email based on POST params. It will queue if resources are unavailable at the time. Returns "Success" POST Args: to: the receipent address from: the sender address (must be a registered GAE email) subject: email subject body: email body content """ with mailExcpHandler(self): # check authorised if isAuth(self.request.remote_addr,self.request.POST.get('api_key')) == False: raise Forbidden("Invalid Credentials") # 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) self.response.headers[CONTENT_TYPE_HEADER] = CONTENT_TYPE_TEXT self.response.out.write("Success") # END Request Handlers # START Application application = webapp.WSGIApplication([ ('/send', Send) ],debug=True) def main(): run_wsgi_app(application) if __name__ == '__main__': main() # END Application
2 个回答
1
你可以使用EmailMessage类中的html字段。
message = mail.EmailMessage(sender=emailFrom,subject=emailSubject)
message.to = emailTo
message.body = emailBody
message.html = emailHtml
message.send()
7
看看这个发送邮件的字段,它是send_mail
函数的一部分。
这里有一个你需要的参数:
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