Python:smtplib sendmail函数

Amy*_*yth 2 python google-app-engine sendmail smtplib

我有一个激活邮件发送脚本如下.

#!/usr/bin/python

__author__ = 'Amyth Arora (***@gmail.com)'

import smtplib
import string
import sys
import random

from email.MIMEText import MIMEText


def generate_activation_key(size=64, chars=string.ascii_lowercase + string.digits):
  return ''.join(random.choice(chars) for x in range(size))


def generate_activation_url(key):
  return 'http://www.example.com/users/activate/' + key

def Activate(name, to_addr):
  sender, reciever = 'mymail@gmail.com', to_addr
  act_url = generate_activation_url(generate_activation_key())
  main_mssg = """
  Dear %s,

  Thakyou for creating an account with Example.com. You are now just one click away from using your example account. Please click the following link to verify this email address and activate your account. 

  Please Note, You must complete this step to become a registered member of example. you will only need to visit this url once in order to activate your account.

  ============================
  Activation Link Below:
  ============================

  %s


  if you are facing problems activating your account please contact our support team at
  support@example.com

  Best Regards,

  Example Team
  """ % (name, act_url)


  message = MIMEText(main_mssg)
  message['From'] = 'Example <' + sender + '>'
  message['To'] = reciever
  message['MIME-Version'] = '1.0'
  message['Content-type'] = 'text/HTML'
  message['Subject'] = 'Activate Your Example Account'
  try:
    smtpObj = smtplib.SMTP('smtp.gmail.com', 587)
    smtpObj.set_debuglevel(1)  # Swith On/Off Debug Mode
    smtpObj.ehlo()
    smtpObj.starttls()
    smtpObj.ehlo()
    smtpObj.login('mymail@gmail.com', 'mypass')
    smtpObj.sendmail(sender, reciever, message.as_string())
    smtpObj.close()
    return act_url
  except:
    return None

def main(argv):
  if len(argv) != 2:
    sys.exit(1)
  Activate(argv[0], argv[1])


if __name__ == '__main__':
  main(sys.argv[1:])
Run Code Online (Sandbox Code Playgroud)

该脚本工作正常,因为我通过命令行尝试这样:

./scriptname 'Reciepent Name' 'reciepent@gmail.com'
Run Code Online (Sandbox Code Playgroud)

但是我想从我的一个应用程序处理程序中调用激活脚本.

import activation

act_key = activation.Activate('Reciepent Name', 'reciepent@gmail.com')
Run Code Online (Sandbox Code Playgroud)

但当我这样做时,脚本返回None.任何人都可以弄清楚如何解决这个问题?

Seb*_*eft 7

App Engine不允许用户使用smtplib库发送电子邮件.相反,您需要使用提供的API.可以在此处找到文档:https://developers.google.com/appengine/docs/python/mail