2

次のようなアクティベーションメール送信スクリプトがあります。

#!/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:])

このようなコマンドラインで試したので、スクリプトは正常に機能します。

./scriptname 'Reciepent Name' 'reciepent@gmail.com'

ただし、このようなアプリケーションハンドラーの1つからアクティベーションスクリプトを呼び出したいと思います。

import activation

act_key = activation.Activate('Reciepent Name', 'reciepent@gmail.com')

しかし、これを行うと、スクリプトはを返しますNone。誰かがこれを修正する方法を理解できますか?

4

2 に答える 2

7

App Engineでは、ユーザーがsmtplibライブラリを使用してメールを送信することはできません。代わりに、提供されているAPIを使用する必要があります。ドキュメントはここにあります:https ://developers.google.com/appengine/docs/python/mail

于 2012-06-05T20:41:17.400 に答える
1

アクティベーションメールを送信するだけでよい場合は、私のAE-BaseAppプロジェクトに使用できる実用的な例があります。 AE-BaseApp / Pythonには、コードをフォークまたはダウンロードできる私のGithubリポジトリへのリンクがあります。また、メールを受信/返信するためのハンドラーもあります。

于 2012-06-05T21:09:13.347 に答える