2012-06-05 36 views
2

我有一個激活郵件發送腳本如下。Python:smtplib sendmail函數

./scriptname 'Reciepent Name' '[email protected]' 

但是我想從我的應用程序處理器這樣的一箇中調用激活腳本:正如我已經嘗試了通過命令行這樣

#!/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 = '[email protected]', 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 
    [email protected] 

    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('[email protected]', '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:]) 

該腳本工作正常。

import activation 

act_key = activation.Activate('Reciepent Name', '[email protected]') 

但是當我這樣做的腳本返回None。任何人都可以弄清楚如何解決這個問題?

回答

7

App Engine不允許用戶使用smtplib庫發送電子郵件。相反,你需要使用提供的api。該文檔可以在這裏找到:https://developers.google.com/appengine/docs/python/mail

+0

感謝您的快速響應,我正在嘗試使用郵件API,並且仍然收到'無'。這是否在本地機器上工作? – Amyth

+0

不,您需要使用管理控制檯localhost:8080/_ah/admin來接收電子郵件。您需要設置一個真正的smtp服務器並使用這些設置:https://developers.google.com/appengine/docs/python/tools/devserver#Using_Mail發送。感謝Mark, –

1

如果您只需要發送激活電子郵件我的AE-BaseApp項目有一個可以使用的工作示例。 AE-BaseApp/Python有一個鏈接到我的Github存儲庫,您可以在其中分支或下載代碼。我也有一個工作處理程序來接收/回覆郵件。

+0

,非常感謝! – Amyth