加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

Python使用Gmail发邮件

发布时间:2020-12-17 17:22:21 所属栏目:Python 来源:网络整理
导读:今天PHP站长网 52php.cn把收集自互联网的代码分享给大家,仅供参考。 有时候需要备份些东西到邮箱,能够让脚本定时自动运行当然是最好! 抽时间用python写了这么个脚本,使用python-libgmail库 ( sudo apt-get install py

以下代码由PHP站长网 52php.cn收集自互联网

现在PHP站长网小编把它分享给大家,仅供参考

有时候需要备份些东西到邮箱,能够让脚本定时自动运行当然是最好! 抽时间用python写了这么个脚本,使用python-libgmail库 ( sudo apt-get install python-libgmail )
 msend -t  [email?protected] -s "求助,图形界面进不了,哈哈”
 msend -t [email?protected] -f readme.txt
    msend -t [email?protected] *.txt
 msend -t [email?protected] -z ./pics/
    Usage:
        msend -t [email?protected] -s title
        msend -t [email?protected] {-s title | -f file | -z file}

    Full command:
        msend [email?protected] --subject=title [--msg=body] [--files="file1;dir2"] [--zip="file1;dir2"]

    Example: ( edit ~/.msend for default sender account )
        msend -t [email?protected] -s "just a test"
        msend -t [email?protected] -s "send all pic" -f ./mypics/
        msend -t [email?protected] -s "send files as zip" -z ./mytext/
        msend -t [email?protected] -s "send both" -f mytext -z mytext

#!/usr/bin/env python
# -*- coding: utf8 -*-

import os,sys
import getopt
import libgmail

class GmailSender(libgmail.GmailAccount) :
    def __init__(self,myacct,passwd):
        self.myacct = myacct
        self.passwd = passwd

        proxy = os.getenv("http_proxy")
        if proxy :
            libgmail.PROXY_URL = proxy

        try:
            self.ga = libgmail.GmailAccount(myacct,passwd)
            self.ga.login()
        except libgmail.GmailLoginFailure,err:
            print "Login failed. (Check $HOME/.msend?)n",err
            sys.exit(1)
        except Exception,err:
            print "Login failed. (Check network?)n",err
            sys.exit(1)

    def sendMessage(self,to,subject,msg,files):
        if files :
            gmsg = libgmail.GmailComposedMessage(to,filenames=files)
        else:
            gmsg = libgmail.GmailComposedMessage(to,msg )

        try :
            if self.ga.sendMessage(gmsg):
                return 0
            else:
                return 1
        except Exception,err :
            print err
            return 1

class TOOLS :
    def extrPath(path):
        list=[]
        for root,dirs,files in os.walk(path):
            for f in files:
                list.append("%s/%s"%(root,f))
        return list

    extrPath = staticmethod(extrPath)

if __name__ == "__main__":

    to=subject=zip=None
    msg=""
    files=[]
    zip=[]

    # getopt
    try:
        opts,args = getopt.getopt(sys.argv[1:],'t:s:m:f:d:z:',[ 'to=','subject=','msg=','files=',"dir=","zip=" ])
    except getopt.GetoptError,err:
        print str(err)
        sys.exit(2)

    for o,a in opts:
        if o in [[--to","-t]]:
            to = a
        elif o in [[--msg","-m]]:
            msg = a + "n====================n"
        elif o in [[--subject","-s]]:
            subject = a
        elif o in [[--files","-f]]:
            if a.find(';') > 0:
                files += a.split(';')
            else:
                files += a.replace('n',' ').split(' ')
        elif o in [[--dir","-d]]:
            if a.find(';') > 0:
                files += a.split(';')
            else:
                files += a.replace('n',' ').split(' ')
        elif o in [[--zip","-z]]:
            if a.find(';') > 0:
                zip += a.split(';')
            else:
                zip += a.replace('n',' ').split(' ')

    # extrPath
    files += args

    if len(files)>0:
        msg += "n=====FILE=====n"
    for f in files:
        if os.path.isfile(f):
            msg += "%sn"%f
        elif os.path.isdir(f):
            files.remove(f)
            ret = TOOLS.extrPath(f)
            files += ret;
            msg += "n=====FOLDER[%s]=====n"%f
            msg += "n".join(ret)

    for f in zip:
        name=f.replace('/','_')
        cmd = "zip -r /tmp/%s.zip %s 1>/tmp/%s.log 2>&1"%(name,f,name)
        os.system(cmd)
        msg += "n=====ZIP[%s]=======n"%f
        msg += open("/tmp/%s.log"%name).read()
        os.unlink("/tmp/%s.log"%name)
        zip.remove(f)
        zip.append("/tmp/%s.zip"%name)

    files += zip
    #print msg
    #sys.exit(0)
    if not subject and len(files)>0:
        subject="Send %d files."%len(files)

    if not to or not subject:
        print """
    Usage:
        msend -t [email?protected] -s title
        msend -t [email?protected] {-s title | -f file | -z file}

    Full command:
        msend [email?protected] --subject=title [--msg=body] [--files="file1;dir2"] [--zip="file1;dir2"]

    Example: ( edit ~/.msend for default sender account )
        msend -t [email?protected] -s "just a test"
        msend -t [email?protected] -s "send all pic" -f ./mypics/
        msend -t [email?protected] -s "send files as zip" -z ./mytext/
        msend -t [email?protected] -s "send both" -f mytext -z mytext
"""
        sys.exit(3)

    conf = "%s/%s" % ( os.getenv("HOME"),".msend" )
    if not os.path.exists(conf):
        open(conf,"wb").write("[email?protected]  yourpassword")
        print """n  Edit $HOME/.msend first.n"""
        sys.exit(3)

    myacct,passwd = open( conf ).read().split()
    gs = GmailSender( myacct,passwd )
    if gs.sendMessage(to,files):
        print "FAIL"
    else:
        for f in zip:
            os.unlink(f)
        print "OK"

以上内容由PHP站长网【52php.cn】收集整理供大家参考研究

如果以上内容对您有帮助,欢迎收藏、点赞、推荐、分享。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读