发送邮件python
㈠ 用python发送邮件,可以群发,带有多个附件
'''''
函数说明:Send_email_text()函数实现发送带有附件的邮件,可以群发,附件格式包括:xlsx,pdf,txt,jpg,mp3等
参数说明:
1.subject:邮件主题
2.content:邮件正文
3.filepath:附件的地址,输入格式为["","",...]
4.receive_email:收件人地址,输入格式为["","",...]
'''
defSend_email_text(subject,content,filepath,receive_email):
importsmtplib
fromemail.mime.multipartimportMIMEMultipart
fromemail.mime.textimportMIMEText
fromemail.mime.
sender="发送方邮箱"
passwd="填入发送方密码"
receivers=receive_email#收件人邮箱
msgRoot=MIMEMultipart()
msgRoot['Subject']=subject
msgRoot['From']=sender
iflen(receivers)>1:
msgRoot['To']=','.join(receivers)#群发邮件
else:
msgRoot['To']=receivers[0]
part=MIMEText(content)
msgRoot.attach(part)
##添加附件部分
forpathinfilepath:
if".jpg"inpath:
#jpg类型附件
jpg_name=path.split("\")[-1]
part=MIMEApplication(open(path,'rb').read())
part.add_header('Content-Disposition','attachment',filename=jpg_name)
msgRoot.attach(part)
if".pdf"inpath:
#pdf类型附件
pdf_name=path.split("\")[-1]
part=MIMEApplication(open(path,'rb').read())
part.add_header('Content-Disposition','attachment',filename=pdf_name)
msgRoot.attach(part)
if".xlsx"inpath:
#xlsx类型附件
xlsx_name=path.split("\")[-1]
part=MIMEApplication(open(path,'rb').read())
part.add_header('Content-Disposition','attachment',filename=xlsx_name)
msgRoot.attach(part)
if".txt"inpath:
#txt类型附件
txt_name=path.split("\")[-1]
part=MIMEApplication(open(path,'rb').read())
part.add_header('Content-Disposition','attachment',filename=txt_name)
msgRoot.attach(part)
if".mp3"inpath:
#mp3类型附件
mp3_name=path.split("\")[-1]
part=MIMEApplication(open(path,'rb').read())
part.add_header('Content-Disposition','attachment',filename=mp3_name)
msgRoot.attach(part)
try:
s=smtplib.SMTP()
s.connect("smtp.mail.aliyun.com")#这里我使用的是阿里云邮箱,也可以使用163邮箱:smtp.163.com
s.login(sender,passwd)
s.sendmail(sender,receivers,msgRoot.as_string())
print("邮件发送成功")
exceptsmtplib.SMTPExceptionase:
print("Error,发送失败")
finally:
s.quit()
㈡ 如何在python程序中发邮件
python中email模块使得处理邮件变得比较简单,今天着重学习了一下发送邮件的具体做法,这里写写自己的的心得,也请高手给些指点。
一、相关模块介绍
发送邮件主要用到了smtplib和email两个模块,这里首先就两个模块进行一下简单的介绍:
1、smtplib模块
smtplib.SMTP([host[, port[, local_hostname[, timeout]]]])
SMTP类构造函数,表示与SMTP服务器之间的连接,通过这个连接可以向smtp服务器发送指令,执行相关操作(如:登陆、发送邮件)。所有参数都是可选的。
host:smtp服务器主机名
port:smtp服务的端口,默认是25;如果在创建SMTP对象的时候提供了这两个参数,在初始化的时候会自动调用connect方法去连接服务器。
smtplib模块还提供了SMTP_SSL类和LMTP类,对它们的操作与SMTP基本一致。
smtplib.SMTP提供的方法:
SMTP.set_debuglevel(level):设置是否为调试模式。默认为False,即非调试模式,表示不输出任何调试信息。
SMTP.connect([host[, port]]):连接到指定的smtp服务器。参数分别表示smpt主机和端口。注意: 也可以在host参数中指定端口号(如:smpt.yeah.net:25),这样就没必要给出port参数。
SMTP.docmd(cmd[, argstring]):向smtp服务器发送指令。可选参数argstring表示指令的参数。
SMTP.helo([hostname]) :使用"helo"指令向服务器确认身份。相当于告诉smtp服务器“我是谁”。
SMTP.has_extn(name):判断指定名称在服务器邮件列表中是否存在。出于安全考虑,smtp服务器往往屏蔽了该指令。
SMTP.verify(address) :判断指定邮件地址是否在服务器中存在。出于安全考虑,smtp服务器往往屏蔽了该指令。
SMTP.login(user, password) :登陆到smtp服务器。现在几乎所有的smtp服务器,都必须在验证用户信息合法之后才允许发送邮件。
SMTP.sendmail(from_addr, to_addrs, msg[, mail_options, rcpt_options]) :发送邮件。这里要注意一下第三个参数,msg是字符串,表示邮件。我们知道邮件一般由标题,发信人,收件人,邮件内容,附件等构成,发送邮件的时候,要注意msg的格式。这个格式就是smtp协议中定义的格式。
SMTP.quit() :断开与smtp服务器的连接,相当于发送"quit"指令。(很多程序中都用到了smtp.close(),具体与quit的区别google了一下,也没找到答案。)
2、email模块
emial模块用来处理邮件消息,包括MIME和其他基于RFC 2822 的消息文档。使用这些模块来定义邮件的内容,是非常简单的。其包括的类有:
class email.mime.base.MIMEBase(_maintype, _subtype, **_params):这是MIME的一个基类。一般不需要在使用时创建实例。其中_maintype是内容类型,如text或者image。_subtype是内容的minor type 类型,如plain或者gif。 **_params是一个字典,直接传递给Message.add_header()。
class email.mime.multipart.MIMEMultipart([_subtype[, boundary[, _subparts[, _params]]]]:MIMEBase的一个子类,多个MIME对象的集合,_subtype默认值为mixed。boundary是MIMEMultipart的边界,默认边界是可数的。
class email.mime.application.MIMEApplication(_data[, _subtype[, _encoder[, **_params]]]):MIMEMultipart的一个子类。
class email.mime.audio. MIMEAudio(_audiodata[, _subtype[, _encoder[, **_params]]]): MIME音频对象
class email.mime.image.MIMEImage(_imagedata[, _subtype[, _encoder[, **_params]]]):MIME二进制文件对象。
class email.mime.message.MIMEMessage(_msg[, _subtype]):具体的一个message实例,使用方法如下:
msg=mail.Message.Message() #一个实例
msg['to']='[email protected]' #发送到哪里
msg['from']='[email protected]' #自己的邮件地址
msg['date']='2012-3-16' #时间日期
msg['subject']='hello world' #邮件主题
class email.mime.text.MIMEText(_text[, _subtype[, _charset]]):MIME文本对象,其中_text是邮件内容,_subtype邮件类型,可以是text/plain(普通文本邮件),html/plain(html邮件), _charset编码,可以是gb2312等等。
二、几种邮件的具体实现代码
1、普通文本邮件
普通文本邮件发送的实现,关键是要将MIMEText中_subtype设置为plain。首先导入smtplib和mimetext。创建smtplib.smtp实例,connect邮件smtp服务器,login后发送,具体代码如下:(python2.6下实现)
# -*- coding: UTF-8 -*-
import smtplib
from email.mime.text import MIMEText
mailto_list=[[email protected]]
mail_host="smtp.XXX.com" #设置服务器
mail_user="XXXX" #用户名
mail_pass="XXXXXX" #口令
mail_postfix="XXX.com" #发件箱的后缀
def send_mail(to_list,sub,content):
me="hello"+"<"+mail_user+"@"+mail_postfix+">"
msg = MIMEText(content,_subtype='plain',_charset='gb2312')
msg['Subject'] = sub
msg['From'] = me
msg['To'] = ";".join(to_list)
try:
server = smtplib.SMTP()
server.connect(mail_host)
server.login(mail_user,mail_pass)
server.sendmail(me, to_list, msg.as_string())
server.close()
return True
except Exception, e:
print str(e)
return False
if __name__ == '__main__':
if send_mail(mailto_list,"hello","hello world!"):
print "发送成功"
else:
print "发送失败"
2、html邮件的发送
与text邮件不同之处就是将将MIMEText中_subtype设置为html。具体代码如下:(python2.6下实现)
# -*- coding: utf-8 -*-
import smtplib
from email.mime.text import MIMEText
mailto_list=["[email protected]"]
mail_host="smtp.XXX.com" #设置服务器
mail_user="XXX" #用户名
mail_pass="XXXX" #口令
mail_postfix="XXX.com" #发件箱的后缀
def send_mail(to_list,sub,content): #to_list:收件人;sub:主题;content:邮件内容
me="hello"+"<"+mail_user+"@"+mail_postfix+">" #这里的hello可以任意设置,收到信后,将按照设置显示
msg = MIMEText(content,_subtype='html',_charset='gb2312') #创建一个实例,这里设置为html格式邮件
msg['Subject'] = sub #设置主题
msg['From'] = me
msg['To'] = ";".join(to_list)
try:
s = smtplib.SMTP()
s.connect(mail_host) #连接smtp服务器
s.login(mail_user,mail_pass) #登陆服务器
s.sendmail(me, to_list, msg.as_string()) #发送邮件
s.close()
return True
except Exception, e:
print str(e)
return False
if __name__ == '__main__':
if send_mail(mailto_list,"hello","<a href=''>小五义</a>"):
print "发送成功"
else:
print "发送失败"
3、发送带附件的邮件
发送带附件的邮件,首先要创建MIMEMultipart()实例,然后构造附件,如果有多个附件,可依次构造,最后利用smtplib.smtp发送。
# -*- coding: cp936 -*-
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
import smtplib
#创建一个带附件的实例
msg = MIMEMultipart()
#构造附件1
att1 = MIMEText(open('d:\\123.rar', 'rb').read(), 'base64', 'gb2312')
att1["Content-Type"] = 'application/octet-stream'
att1["Content-Disposition"] = 'attachment; filename="123.doc"'#这里的filename可以任意写,写什么名字,邮件中显示什么名字
msg.attach(att1)
#构造附件2
att2 = MIMEText(open('d:\\123.txt', 'rb').read(), 'base64', 'gb2312')
att2["Content-Type"] = 'application/octet-stream'
att2["Content-Disposition"] = 'attachment; filename="123.txt"'
msg.attach(att2)
#加邮件头
msg['to'] = '[email protected]'
msg['from'] = '[email protected]'
msg['subject'] = 'hello world'
#发送邮件
try:
server = smtplib.SMTP()
server.connect('smtp.XXX.com')
server.login('XXX','XXXXX')#XXX为用户名,XXXXX为密码
server.sendmail(msg['from'], msg['to'],msg.as_string())
server.quit()
print '发送成功'
except Exception, e:
print str(e)
4、利用MIMEimage发送图片
# -*- coding: cp936 -*-
import smtplib
import mimetypes
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.mime.image import MIMEImage
def AutoSendMail():
msg = MIMEMultipart()
msg['From'] = "[email protected]"
msg['To'] = "[email protected]"
msg['Subject'] = "hello world"
txt = MIMEText("这是中文的邮件内容哦",'plain','gb2312')
msg.attach(txt)
file1 = "C:\\hello.jpg"
image = MIMEImage(open(file1,'rb').read())
image.add_header('Content-ID','<image1>')
msg.attach(image)
server = smtplib.SMTP()
server.connect('smtp.XXX.com')
server.login('XXX','XXXXXX')
server.sendmail(msg['From'],msg['To'],msg.as_string())
server.quit()
if __name__ == "__main__":
AutoSendMail()
利用MIMEimage发送图片,原本是想图片能够在正文中显示,可是代码运行后发现,依然是以附件形式发送的,希望有高手能够指点一下,如何可以发送在正文中显示的图片的邮件,就是图片是附件中存在,但同时能显示在正文中,具体形式如下图。
㈢ Python向多人发送、抄送带附件的邮件(含详细代码)
python要发送带附件的邮件,首先要创建MIMEMultipart()实例,然后构造附件,如果有多个附件,可依次构造,最后使用smtplib.smtp发送。
步骤:
(1)设置服务器所需信息(ps:部门邮箱密码为授权码,需自行登录相应邮箱设置授权码)
(2)设置email信息
(3)附件部分
(4)登录邮箱并发送邮件
附上源码:
㈣ Python脚本也可以用来发送电子邮件
准备工作:安装第三方包,yagmail和keyring
安装完成后,打开命令提示符窗口(我用的是win)。输入python回车,输入import yagmail回车,输入yagmail.register('你的邮箱地址','邮箱密码或邮箱安全码')回车。没有报错后,就可以开始编写python脚本了。
直接上脚本:
import yagmail
smtp_server=yagmail.SMTP(user='[email protected]',host='smtp.qq.com')
#host 需要你到邮箱首页帮助中心找一下,一般都是smtp.xxxx.com
contents=['邮件正文内容,可以逗号分开多写几行,也可以用转行符号!']
smtp_server.send('[email protected]','邮件主题描述',contents)
# [email protected]收件邮箱地址,可以设置成一样的,测试一下自己能收到不。
执行上面的脚本,基本上就可以收到邮件了。不要执行多次,太频繁,容易被服务器拦截,最后可能会被封号。
另外 contents 里可以写html,也可以放附件,附件的话直接写个本机文件路径即可。
㈤ 如何使用Python控制摄像头拍照并发邮件
这个实现起来非常容易,主要分为2步,首先控制摄像头拍照,然后将拍到的照片作为邮件附件发送就行,下面我简单介绍一下实现过程,实验环境win7+python3.6+pycharm5.0,主要内容如下:
控制摄像头拍照
这里我们直接使用opencv的python接口包就行,借助于opencv强大的功能,我们只需要很少量的代码就可以实现摄像头拍照的功能,具体步骤如下:
1.首先,安装opencv-python模块,这个直接在cmd窗口输入命令“pip install opencv-python”就行,如下,很快就能安装成功:
2.安装完成后,我们就可以编写代码来实现控制摄像头拍照的功能了,测试代码如下,非常简单,打开摄像头,按帧播放,当按下q键时保存图片并退出,当前目录下就会出现拍到的照片,后面就是将这个照片作为邮件附件进行发送:
发送邮件
这里以发送163邮件为例,主要用到Python自带的smtplib模块,专门用于发送邮件,具体步骤如下:
1.首先,需要开启开启邮箱POP3/SMTP服务,这个直接登录邮箱,在上面菜单栏点击“设置”,勾选POP3/SMPT服务就行,如下:
接着点击左边管理列表的“客户端授权密码”,设置授权密码,后面的python代码中需要借助这个密码才能登陆邮箱服务器发送邮件:
2.一切设置完成后,我们就可以直接编写代码来发送带有照片的邮件了,测试代码如下,非常简单,只需要在邮件中attach一下照片就行,函数输入参数分别为发送人邮箱、密码、接收人邮件列表、主题、内容和附件名称:
运行这个程序,邮件就可以正常发送,并且可以看到发送的照片附件,如下:
至此,我们就完成了利用python来控制摄像头拍照并发送邮件。总的来说,整个过程不难,思路也比较清晰,只要你有一定的python基础,熟悉一下上面的代码,多调试几遍程序,很快就能掌握的,网上也有相关教程和资料,非常丰富详细,感兴趣的话,可以搜一下,希望以上分享的内容能对你有所帮助吧,也欢迎大家评论、留言。
㈥ python批量发送邮件--包括批量不同附件
小猪在公司做出纳,干的活却包括了出纳、会计、结算专员等工作,周末都要被无奈在家加班,主要还没有加班费,简直是被公司严重压榨。每个月初都要给每个工长发预付款账单邮件,月中发结算款账单。重复性机械工作。
一个及格线上的程序员,最起码的觉悟就是将重复性的机械工作自动化,于是,在我花了一个多小时,帮她给一部分工长发了一次邮箱后,默默的回来写了这个脚本。
所以,设计要点就是一个字—— 懒 。
恩,就酱。
经过我观察,邮件内容分为两种,这里先说第一种,“结算款”:
(1) 邮件内容(content)不变,为固定的txt文本
(2) 附件(attch)为每个工长的结算账单(excel文件.xlsx),此文件命名为总账单中自动分割出来的名字(暂时不懂怎么分割出来的=.=),格式为:
(3) 邮件主题(Subject)为附件名(不带后缀名)
(4) 邮件接收对象(工长)的名单及其邮箱地址基本不变,偶尔变动
(5)
(1) 将工长及其邮箱地址存为CSV文件的两列,python中将其读取为字典形式,存储以供后续查询邮箱地址。
(2) 遍历文件夹中的附件(.xlsx类型文件),对其进行两种操作,一方面将其名字(不带路径和后缀)提取出来,作为邮件主题(Subject),并对Subject进一步划分,得到其中的人名(工长);另一方面,将其传入MIMEbase模块中转为邮件附件对象。
(3) 由上述得到的人名(name),在字典形式的通讯录中,查找相应的地址(value),即为收件人名称和地址
(4) 利用python中的email模块和smtp模块,登录自己的邮箱账号,再对每个附件,得到的收件人名和地址,添加附件,发送邮件。done
在设计过程中有几点需要注意
(1) 有时一个邮件地址对应两个人名,此时应该在CSV文件中分为两行存储,而不是将两个人名存为同一个键;
(2)有账单.xlsx文件,通讯录里却没存储此人记录,程序应该打印提示没有通讯记录的人名,且不能直接退出,要保证员工看到此提示,此第一版程序还有解决此问题;
(3)此程序发送的邮件内容为纯文本,若要求邮件内容有不同格式(如部分加粗,部分红色),还有小部分需要每次更改的地方(如邮件内容包含当前月份),如何解决?(这就是第二种邮件内容,“预算款”);
(4)重名的,暂时还没碰到,程序中也没给出解决方案。
第一版到此,20180830,待更新
第二版更新,20180904
第三版更新,20180909
转战CSDN博客,更多博客见传送门《 xiaozhou的博客主页 》
㈦ 我用python发邮件。出现以下问题怎么处理
1、准备两个邮箱帐号,一个是常用的(接收端),另一个可以注册网易163邮箱或者foxmail邮箱也可(发送端),本次我使用两个QQ邮箱进行演示。
2、在邮箱的设置
3、账户中开启SMTP功能,如下图:
8、如果能成功收到邮件的话就说明完成了。
㈧ python 使用zmail收发电子邮件
1、发送邮件:
import zmail
server = zmail.server(' [email protected] ’, 'yourpassword')
server.send_mail(' [email protected] ',{'subject':'Hello!','content_text':'By zmail.'})
server.send_mail([' [email protected] ',' [email protected] '],{'subject':'Hello!','content_text':'By zmail.'})
2、接收最后一封邮件:
import zmail
server = zmail.server(' [email protected] ’, 'yourpassword')
latest_mail = server.get_latest()
zmail.show(latest_mail)
3、发送带附件的邮件:
import zmail
mail = {
'subject': 'Success!', # Anything you want.
'content_text': 'This message from zmail!', # Anything you want.
'attachments': ['/Users/zyh/Documents/example.zip','/root/1.jpg'], # Absolute path will be better.
}
server = zmail.server(' [email protected] ’, 'yourpassword')
server.send_mail(' [email protected] ', mail)
server.send_mail([' [email protected] ',' [email protected] '], mail)
4、发送html格式邮件:
with open('/Users/example.html','r') as f:
content_html = f.read()
mail = {
'subject': 'Success!', # Anything you want.
'content_html': content_html,
'attachments': '/Users/zyh/Documents/example.zip', # Absolute path will be better.
}
server.send_mail(' [email protected] ',mail)
5、使用抄送:
server.send_mail([' [email protected] ',' [email protected] '],mail,cc=[' [email protected] '])
6、自定义server
server = zmail.server('username','password',smtp_host='smtp.163.com',smtp_port=994,smtp_ssl=True,pop_host='pop.163.com',pop_port=995,pop_tls=True)
7、根据ID取回邮件:mail = server.get_mail(2)
根据日期、主题、发送人取回邮件:
mail = server.get_mails(subject='GitHub',after='2018-1-1',sender='github')
mail = server.get_mails(subject='GitHub',start_time='2018-1-1',sender='github',start_index=1,end_index=10)
8、查看邮箱统计
mailbox_info = server.stat() #结果为包含两个整型的元组: (邮件的数量, 邮箱的大小).
9、删除邮件:MailServer.delete(which)
10、保存附件:zmail.save_attachment(mail,target_path=None,overwrite=False)
11、保存邮件:zmail.save(mail,name=None,target_path=None,overwrite=False)
12、读取邮件:zmail.read(file_path,SEP=b'\r\n')
支持的列表: