Python论坛  - 讨论区

标题:[python-chinese] 用gmail发邮件的脚本,大家一起学习python

2007年01月13日 星期六 16:39

jetrix chan jetrixc在gmail.com
星期六 一月 13 16:39:24 HKT 2007

#!/usr/bin/env python
# -*- coding: utf-8 -*-

from email import Encoders
from email.Message import Message
from email.MIMEAudio import MIMEAudio
from email.MIMEBase import MIMEBase
from email.MIMEMultipart import MIMEMultipart
from email.MIMEImage import MIMEImage
from email.MIMEText import MIMEText
from email.Header import Header
import smtplib
import mimetypes
import time

import os
import sys
import getopt

def gmail_connect(user, passwd):
   server = smtplib.SMTP()
   print server.connect('smtp.gmail.com:587')
   print server.ehlo()
   print server.starttls()
   print server.ehlo()
   print server.login(user, passwd)
   return server

def gmail_close(server):
   server.close()

def set_header(subject, fr_addr, to_addr):
   msg = MIMEMultipart()
   msg['subject'] = Header(subject, 'utf-8')
   msg['to'] = to_addr
   msg['from'] = fr_addr
   msg['date']=time.ctime()
   msg.preamble = 'You will not see this in a MIME-aware mail reader.\n'
   msg.epilogue = ''

   return msg

def encode_file(path):
   fp = open(path, 'rb')
   data = MIMEText(fp.read(), _subtype='plain', _charset='utf-8')
   fp.close()

   return data

def encode_attach(path):
   filename = os.path.split(path)[1]
   ctype, encoding = mimetypes.guess_type(path)
   if ctype is None or encoding is not None:
       ctype = 'application/octet-stream'
   maintype, subtype = ctype.split('/', 1)
   if maintype == 'text':
       fp = open(path)
       data = MIMEText(fp.read(), _subtype=subtype)
       fp.close()
   elif maintype == 'image':
       fp = open(path, 'rb')
       data = MIMEImage(fp.read(), _subtype=subtype)
       fp.close()
   elif maintype == 'audio':
       fp = open(path, 'rb')
       data = MIMEAudio(fp.read(), _subtype=subtype)
       fp.close()
   else:
       fp = open(path, 'rb')
       data = MIMEBase(maintype, subtype)
       data.set_payload(fp.read())
       fp.close()
       # Encode the payload using Base64
       Encoders.encode_base64(data)
   data.add_header('Content-Disposition', 'attachment', filename=filename)

   return data


def sendmail(server, msg):
   str = '''
--
Best Regards,
   Jetrix Chan
----
jetrixc在gmail.com
'''
   data = MIMEText(str, _subtype='plain', _charset='utf-8')
   msg.attach(data)

   server.sendmail(msg['from'], [msg['to']], msg.as_string())

def _usage():
 print '''usage: %s [-he:d] ...''' % os.path.basename(sys.argv[0])

def main(argv, user, passwd, to_addr='jetrixc在gmail.com'):
   try:
       opts, args = getopt.getopt(argv[1:], 'he:d', \
                                  ['help', 'eflags', 'dflags'])
   except getopt.GetoptError:
       print 'illegal option(s) -- ', str(argv[1:])
       sys.exit(1)

   eflags = dflags = False
   for o, a in opts:
       if o == '-h' or o == '--help':
           _usage()
           sys.exit(0)
       if o == '-e' or o == '--eflags':
           eflags = True
           to_addr = a
       if o == '-d' or o == '--dflags':
           dflags = True

   print 'Send to...:', to_addr
   server = gmail_connect(user, passwd)
   for arg in args:
       msg = set_header(arg, user+'@gmail.com', to_addr)
       if dflags == False:
           msg.attach(encode_file(arg))
           sendmail(server, msg)
           del msg
       else:
           if os.path.isfile(arg):
               msg.attach(encode_attach(arg))
               sendmail(server, msg)
               del msg
           if os.path.isdir(arg):
               for filename in os.listdir(arg):
                   path = os.path.join(arg, filename)
                   if not os.path.isfile(path):
                       continue
                   msg.attach(encode_attach(path))

               sendmail(server, msg)
               del msg
   gmail_close(server)

if __name__ == '__main__':
   main(sys.argv, 'login', 'passwd')


-- 
Best Regards,
         Jetrix Chan
----
jetrixc在gmail.com

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2007年01月14日 星期日 00:54

Neil(木野狐) chenrong2003在gmail.com
星期日 一月 14 00:54:21 HKT 2007

Very helpful for me!
Thanks,

Neil Chen

2007/1/13, jetrix chan <jetrixc在gmail.com>:
> #!/usr/bin/env python
> # -*- coding: utf-8 -*-
>
> from email import Encoders
> from email.Message import Message
> from email.MIMEAudio import MIMEAudio
> from email.MIMEBase import MIMEBase
> from email.MIMEMultipart import MIMEMultipart
> from email.MIMEImage import MIMEImage
> from email.MIMEText import MIMEText
> from email.Header import Header
> import smtplib
> import mimetypes
> import time
>
> import os
> import sys
> import getopt
>
> def gmail_connect(user, passwd):
>   server = smtplib.SMTP()
>   print server.connect('smtp.gmail.com:587')
>   print server.ehlo()
>   print server.starttls()
>   print server.ehlo()
>   print server.login(user, passwd)
>   return server
>
> def gmail_close(server):
>   server.close()
>
> def set_header(subject, fr_addr, to_addr):
>   msg = MIMEMultipart()
>   msg['subject'] = Header(subject, 'utf-8')
>   msg['to'] = to_addr
>   msg['from'] = fr_addr
>   msg['date']=time.ctime()
>   msg.preamble = 'You will not see this in a MIME-aware mail reader.\n'
>   msg.epilogue = ''
>
>   return msg
>
> def encode_file(path):
>   fp = open(path, 'rb')
>   data = MIMEText(fp.read(), _subtype='plain', _charset='utf-8')
>   fp.close()
>
>   return data
>
> def encode_attach(path):
>   filename = os.path.split(path)[1]
>   ctype, encoding = mimetypes.guess_type(path)
>   if ctype is None or encoding is not None:
>       ctype = 'application/octet-stream'
>   maintype, subtype = ctype.split('/', 1)
>   if maintype == 'text':
>       fp = open(path)
>       data = MIMEText(fp.read(), _subtype=subtype)
>       fp.close()
>   elif maintype == 'image':
>       fp = open(path, 'rb')
>       data = MIMEImage(fp.read(), _subtype=subtype)
>       fp.close()
>   elif maintype == 'audio':
>       fp = open(path, 'rb')
>       data = MIMEAudio(fp.read(), _subtype=subtype)
>       fp.close()
>   else:
>       fp = open(path, 'rb')
>       data = MIMEBase(maintype, subtype)
>       data.set_payload(fp.read())
>       fp.close()
>       # Encode the payload using Base64
>       Encoders.encode_base64(data)
>   data.add_header('Content-Disposition', 'attachment', filename=filename)
>
>   return data
>
>
> def sendmail(server, msg):
>   str = '''
> --
> Best Regards,
>   Jetrix Chan
> ----
> jetrixc在gmail.com
> '''
>   data = MIMEText(str, _subtype='plain', _charset='utf-8')
>   msg.attach(data)
>
>   server.sendmail(msg['from'], [msg['to']], msg.as_string())
>
> def _usage():
>  print '''usage: %s [-he:d] ...''' % os.path.basename(sys.argv[0])
>
> def main(argv, user, passwd, to_addr='jetrixc在gmail.com'):
>   try:
>       opts, args = getopt.getopt(argv[1:], 'he:d', \
>                                  ['help', 'eflags', 'dflags'])
>   except getopt.GetoptError:
>       print 'illegal option(s) -- ', str(argv[1:])
>       sys.exit(1)
>
>   eflags = dflags = False
>   for o, a in opts:
>       if o == '-h' or o == '--help':
>           _usage()
>           sys.exit(0)
>       if o == '-e' or o == '--eflags':
>           eflags = True
>           to_addr = a
>       if o == '-d' or o == '--dflags':
>           dflags = True
>
>   print 'Send to...:', to_addr
>   server = gmail_connect(user, passwd)
>   for arg in args:
>       msg = set_header(arg, user+'@gmail.com', to_addr)
>       if dflags == False:
>           msg.attach(encode_file(arg))
>           sendmail(server, msg)
>           del msg
>       else:
>           if os.path.isfile(arg):
>               msg.attach(encode_attach(arg))
>               sendmail(server, msg)
>               del msg
>           if os.path.isdir(arg):
>               for filename in os.listdir(arg):
>                   path = os.path.join(arg, filename)
>                   if not os.path.isfile(path):
>                       continue
>                   msg.attach(encode_attach(path))
>
>               sendmail(server, msg)
>               del msg
>   gmail_close(server)
>
> if __name__ == '__main__':
>   main(sys.argv, 'login', 'passwd')
>
>
> --
> Best Regards,
>         Jetrix Chan
> ----
> jetrixc在gmail.com
> _______________________________________________
> python-chinese
> Post: send python-chinese在lists.python.cn
> Subscribe: send subscribe to python-chinese-request在lists.python.cn
> Unsubscribe: send unsubscribe to  python-chinese-request在lists.python.cn
> Detail Info: http://python.cn/mailman/listinfo/python-chinese

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

如下红色区域有误,请重新填写。

    你的回复:

    请 登录 后回复。还没有在Zeuux哲思注册吗?现在 注册 !

    Zeuux © 2025

    京ICP备05028076号