Python : smtplib sendmail function

google-app-engine, python, sendmail, smtplib

Solution

App Engine does not allow the users to send emails using the smtplib library. Instead you need to use the api provided. The documentation can be found here: https://developers.google.com/appengine/docs/python/mail

Problem

i have an activation mail sending script as follows. ``` #!/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:]) ``` The script works fine as i have tried it through command line like this : ``` ./scriptname 'Reciepent Name' 'reciepent@gmail.com' ``` however i want to call the activation script from within one of my application handlers like this. ``` import activation act_key = activation.Activate('Reciepent Name', 'reciepent@gmail.com') ``` but when i do this the script returns `None`. Can anyone figure out how to fix this ?

Original source