[Tutor] sending mails from python

Andrew Robert andrew.arobert at gmail.com
Sat Oct 21 14:20:27 CEST 2006


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

How about something like this?

Create a function and then call it with the required optins of server
url, sender address, destination address, subject, and message text?



def send(serverURL=None, sender='', to='', subject='', text=''):
    """
    Form and send an e-mail message
    """

    import smtplib

    headers = "From: %s\r\nTo: %s\r\nSubject: %s\r\n\r\n" % (sender, to,
subject)
    message = headers + text
    mailServer = smtplib.SMTP(serverURL) # replace serverURL with site
specific mail server
    check_valid=mailer.isAddressValid(to)
    if check_valid==1 :
            mailServer.sendmail(sender, to, message)
            mailServer.quit()
    else:
            print "\n\nDestination e-mail address %s is invalid.
\n\n\tPlease check and run again" % to



def isAddressValid(addr):
        """
        Validate e-mail addresses based on lexical rules set forth in
RFC 822
        Ported from Recipe 3.9 in Secure Programming Cookbook for C and
C++ by
        John Viega and Matt Messier (O'Reilly 2003)

        If the supplied email address is syntactically valid,
isAddressValid()
        will return 1; otherwise, it will return 0.
        """
        # Mail variables
        rfc822_specials = '()<>@,;:\\"[]'

        c = 0
        while c < len(addr):
            if addr[c] == '"' and (not c or addr[c - 1] == '.' or addr[c
- - 1] == '"'):
                c = c + 1
                while c < len(addr):
                    if addr[c] == '"': break
                    if addr[c] == '\\' and addr[c + 1] == ' ':
                        c = c + 2
                        continue
                    if ord(addr[c]) < 32 or ord(addr[c]) >= 127: return 0
                    c = c + 1
                else: return 0
                if addr[c] == '@': break
                if addr[c] != '.': return 0
                c = c + 1
                continue
            if addr[c] == '@': break
            if ord(addr[c]) <= 32 or ord(addr[c]) >= 127: return 0
            if addr[c] in rfc822_specials: return 0
            c = c + 1
        if not c or addr[c - 1] == '.': return 0

        # Next we validate the domain portion (name at domain)
        domain = c = c + 1
        if domain >= len(addr): return 0
        count = 0
        while c < len(addr):
            if addr[c] == '.':
                if c == domain or addr[c - 1] == '.': return 0
                count = count + 1
            if ord(addr[c]) <= 32 or ord(addr[c]) >= 127: return 0
            if addr[c] in rfc822_specials: return 0
            c = c + 1

        return count >= 1

euoar wrote:
> I'm trying to learn how to send e-mails with python. But I always become 
> this error: socket.error: (110, 'Connection timed out'). Is there 
> something bad in the code? Does anyone knows what could be wrong? I'm 
> using python from linux, and have no proxy...
> 
> The code that I use is this (of course, filling with my persona data the 
> " "):
> 
> import smtplib
> 
> smtpserver = 'my smtp server goes here'
> AUTHREQUIRED = 1
> smtpuser = 'my user name'
> smtppass = 'my password'
> 
> RECIPIENTS = ['the recipients']
> SENDER = 'my mail'
> mssg = "una prueba desde python"
> 
> session = smtplib.SMTP(smtpserver)
> if AUTHREQUIRED:
>     session.login(smtpuser, smtppass)
> smtpresult = session.sendmail(SENDER, RECIPIENTS, mssg)
> 
> if smtpresult:
>     errstr = ""
>     for recip in smtpresult.keys():
>         errstr = """Could not delivery mail to: %s
> 
> Server said: %s
> %s
> 
> %s""" % (recip, smtpresult[recip][0], smtpresult[recip][1], errstr)
>     raise smtplib.SMTPException, errstr
> 
> 
> 
> Thank you for your help
> 
> 
> 
> 	
> 	
> 		
> ______________________________________________ 
> LLama Gratis a cualquier PC del Mundo. 
> Llamadas a fijos y móviles desde 1 céntimo por minuto. 
> http://es.voice.yahoo.com
> _______________________________________________
> Tutor maillist  -  Tutor at python.org
> http://mail.python.org/mailman/listinfo/tutor
> 
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.1 (MingW32)
Comment: GnuPT 2.7.2

iD8DBQFFOhCLDvn/4H0LjDwRAm9AAJwOkrtF/R4zWQhhCwjlBrBVQ4XpwwCgpGHy
ukZIoIuoAh/hmBZ/r/ZbQmM=
=6weK
-----END PGP SIGNATURE-----


More information about the Tutor mailing list