Python脚本也可以用来发送电子邮件
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python脚本也可以用来发送电子邮件相关的知识,希望对你有一定的参考价值。
参考技术A 准备工作:安装第三方包,yagmail和keyring安装完成后,打开命令提示符窗口(我用的是win)。输入python回车,输入import yagmail回车,输入yagmail.register('你的邮箱地址','邮箱密码或邮箱安全码')回车。没有报错后,就可以开始编写python脚本了。
直接上脚本:
import yagmail
smtp_server=yagmail.SMTP(user='xxxxx@qq.com',host='smtp.qq.com')
#host 需要你到邮箱首页帮助中心找一下,一般都是smtp.xxxx.com
contents=['邮件正文内容,可以逗号分开多写几行,也可以用转行符号!']
smtp_server.send('xxxx@xxxx.com','邮件主题描述',contents)
# xxxx@xxxx.com收件邮箱地址,可以设置成一样的,测试一下自己能收到不。
执行上面的脚本,基本上就可以收到邮件了。不要执行多次,太频繁,容易被服务器拦截,最后可能会被封号。
另外 contents 里可以写html,也可以放附件,附件的话直接写个本机文件路径即可。
一个python的邮件发送脚本,自动,定时,可以附件发送,抄送,附有说明文件
‘‘‘ 设要排序的数组A[0]....A[N-1],首先任意选取一个数据(通常选用数组的第一个数)作为关键数据,然后 将所有比它小的数都放到前面,所有比它大的数都放到它后面,这个过程称为一趟快速排序,值得注意的是, 快速排序不是一种稳定的排序算法,也就是说,多个相同的值得相对位置也许会在算法结束时产生变动。 ‘‘‘ #!/bin/env python # -*- coding: utf-8 -*- import datetime import smtplib import os,sys from email.mime.text import MIMEText from email.mime.multipart import MIMEMultipart from email.mime.base import MIMEBase from optparse import OptionParser EMAILHOME=sys.path[0] #sender name and password sendername="" senderpass="" #list of all receiver (include cc-receiver) receiverlist=[] receivertmplist=[] receivercctmplist=[] #get the username and pasword #no try catch here def getUserAndPass(senderfile): upf=open(senderfile) username=upf.readline() password=upf.readline() upf.close() return (username.strip(os.linesep),password.strip(os.linesep)) #get the receiver list #return the list with no ‘‘ def getReceiverList(filename): lif=open(filename) li=lif.readlines() lif.close() for x in range(len(li)): li[x]=li[x].strip().strip(os.linesep) while ‘‘ in li: li.remove(‘‘) return (li) #get content of the mail def getContent(filename): contenttmp=‘‘ if os.path.exists(filename): contentf=open(filename) contenttmp=contentf.read() contentf.close() return contenttmp #parameters process parser = OptionParser() parser.add_option(‘-s‘, ‘--sender‘, dest=‘sender‘, help=‘file for sender of the mail‘, default=None) parser.add_option(‘-r‘, ‘--receiver‘, dest=‘receiver‘, help=‘list file for receivers of the mail‘,default=None) parser.add_option(‘-p‘, ‘--cc‘, dest=‘cc‘, help=‘list file for receivers of carbon copy‘, default=None) parser.add_option(‘-t‘, ‘--title‘, dest=‘title‘, help=‘title of the email,string‘, default=‘Auto email‘) parser.add_option(‘-c‘, ‘--content‘, dest=‘content‘, help=‘content of the mail,must be a file‘,default=None) parser.add_option(‘-a‘, ‘--attach‘, dest=‘attach‘, help=‘attachment of the file‘,default=None) parser.add_option(‘-n‘, ‘--nameattach‘, dest=‘nameattach‘, help=‘name for attachment of the file‘,default=None) parser.add_option(‘-l‘, ‘--server‘, dest=‘server‘, help=‘log in to the server‘,default=‘smtp.163.com‘) parser.add_option(‘-i‘, ‘--info‘, dest=‘info‘, help=‘information of the content,string,but not file‘,default=‘Auto email‘) parser.add_option(‘-f‘, ‘--form‘, dest=‘form‘, help=‘form of the content,html or plain‘,default=‘plain‘) (options, args) = parser.parse_args() #get sender infor if not options.sender: if os.path.exists(EMAILHOME+r‘/sender.list‘): (sendername,senderpass)=getUserAndPass(EMAILHOME+r‘/sender.list‘) if sendername.strip()=="" or senderpass.strip()=="": print ("no sender!") exit(0) else: print ("no sender!") exit(0) else: if os.path.exists(options.sender): (sendername,senderpass)=getUserAndPass(EMAILHOME+r‘/sender.list‘) if sendername.strip()=="" or senderpass.strip()=="": print ("no sender!") exit(0) else: print ("the file for sender list does not exists!") exit(0) #get list of all receiver if not options.receiver: if os.path.exists(EMAILHOME+r‘/receiver.list‘) or os.path.exists(EMAILHOME+r‘/receivercc.list‘): if os.path.exists(EMAILHOME+r‘/receiver.list‘): receivertmplist= getReceiverList(EMAILHOME+r‘/receiver.list‘) if os.path.exists(EMAILHOME+r‘/receivercc.list‘): receivercctmplist= getReceiverList(EMAILHOME+r‘/receivercc.list‘) receiverlist=receivertmplist+receivercctmplist if len(receiverlist)==0: print ("no receiver!") exit(0) else: print ("no receiver list file!") exit(0) else: if os.path.exists(options.receiver) or os.path.exists(options.cc): if os.path.exists(options.receiver): receivertmplist= getReceiverList(options.receiver) if os.path.exists(options.cc): receivercctmplist= getReceiverList(options.cc) receiverlist=receivertmplist+receivercctmplist if len(receiverlist): print ("no receiver from the list file!") exit(0) else: print ("receiver list file does not exist!") exit(0) if options.attach and not options.nameattach: print ("give a name to the attachment!") exit(0) #make a mail mailall=MIMEMultipart() #content of the mail if options.content: mailcontent =getContent(options.content) mailall.attach(MIMEText(mailcontent,options.form,‘utf-8‘)) elif options.info: mailcontent = str(options.info) mailall.attach(MIMEText(mailcontent,options.form,‘utf-8‘)) #attachment of the mail if options.attach: mailattach =getContent(options.attach) if mailattach !=‘‘: contype = ‘application/octet-stream‘ maintype,subtype=contype.split(‘/‘,1) attfile=MIMEBase(maintype,subtype) attfile.set_payload(mailattach) attfile.add_header(‘Content-Disposition‘,‘attachment‘,options.nameattach) print ("attach file prepared!") mailall.attach(attfile) #title,sender,receiver,cc-receiver, mailall[‘Subject‘]=options.title mailall[‘From‘]=sendername mailall[‘To‘]=str(receivertmplist) if len(receivercctmplist) !=0: mailall[‘CC‘]=str(receivercctmplist) #get the text of mailall fullmailtext=mailall.as_string() print ("prepare fullmailtext ok.") mailconnect = smtplib.SMTP(options.server) try: mailconnect.login(sendername,senderpass) except Exception as e: print ("error when connect the smtpserver with the given username and password !") print (e) exit(0) print ("connect ok!") try: mailconnect.sendmail(sendername, receiverlist, fullmailtext) except Exception as e: print ("error while sending the email!") finally: mailconnect.quit() print (‘email to ‘+str(receiverlist)+‘ over.‘) print (‘***‘*80)
说明:
#mail.py使用方法:
1,本脚本同目录下文件介绍:
sender.list:邮件发送者邮箱和密码,第一行账号(如[email protected]),第二行密码(必须项,不能为空)
receiver.list:邮件接收者列表,每行一个收件人(如e[email protected])
receivercc.list:邮件抄送者列表,每行一个收件人(如[email protected])
调用方法举例1:
把发件人和收件人信息(sender.list和receiver.list)填好后,在mail.py所在目录执行
python mail.py -s sender.list -r receiver.list
2,其它帮助信息获得方法:
在mail.py所在目录执行:python mail.py -h
显示:
Options:
-h, --help show this help message and exit
-s SENDER, --sender=SENDER //配置本脚本发件人信息存放的文件的路径 如 /tmp/tmp/list.list
file for sender of the mail
-r RECEIVER, --receiver=RECEIVER //配置本脚本收件人列表存放的文件的路径 如 /tmp/tmp/list.list
list file for receivers of the mail
-p CC, --cc=CC list file for receivers of carbon copy //配置抄送收件人列表存放的文件的路径 如 /tmp/tmp/list.list
-t TITLE, --title=TITLE //配置邮件的标题,字符串(不能有空格)
title of the email,string
-c CONTENT, --content=CONTENT //配置邮件的内容,文件路径(和-i冲突时,-i参数无效)
content of the mail,must be a file
-a ATTACH, --attach=ATTACH //配置邮件的附件,文件路径(有附件时,必须配置-n参数)
attachment of the file
-n NAMEATTACH, --nameattach=NAMEATTACH //配置邮件的附件名称,字符串(不能有空格)(有附件时,必须配置本参数)
name for attachment of the file
-l SERVER, --server=SERVER //配置邮件的服务器,默认是smtp.163.com
log in to the server
-i INFO, --info=INFO information of the content,string,but not file //配置邮件的内容,字符串(不能有空格)(和-c冲突时,本参数无效)
-f FORM, --form=FORM form of the content,html or plain //配置邮件的内容的类型,默认是plain
调用方法举例2:
在mail.py所在目录执行:
python mail.py -s /root/tmp/sender.list -r /root/tmp/receiver.list -p /root/tmp/receivercc.list -t test_the_py -c /root/tmp/content.log -a /root/tmp/attch.log -n attachname1.log
将会把/root/tmp/content.log作为文件内容,
把/root/tmp/attch.log作为附件,
把attachname1.log作为附件名称,
把test_the_py作为邮件标题的邮件;
从/root/tmp/sender.list文件里的发件人,
发送到/root/tmp/receiver.list和/root/tmp/receivercc.list文件里的收件人列表。
以上是关于Python脚本也可以用来发送电子邮件的主要内容,如果未能解决你的问题,请参考以下文章