PYTHON发送各类邮件的主要方法
详解Python发送email的三种方式

详解Python发送email的三种⽅式Python发送email的三种⽅式,分别为使⽤登录邮件服务器、使⽤smtp服务、调⽤sendmail命令来发送三种⽅法Python发送email⽐较简单,可以通过登录邮件服务来发送,linux下也可以使⽤调⽤sendmail命令来发送,还可以使⽤本地或者是远程的smtp服务来发送邮件,不管是单个,群发,还是抄送都⽐较容易实现。
本⽶扑博客先介绍⼏个最简单的发送邮件⽅式记录下,像html邮件,附件等也是⽀持的,需要时查⽂档即可。
⼀、登录邮件服务器通过smtp登录第三⽅smtp邮箱发送邮件,⽀持 25 和 465端⼝vim python_email_1.py#!/usr/bin/env python# -*- coding:utf-8 -*-## author: # 2015.10.05import smtplibfrom email.mime.text import MIMETextsmtpHost = ''sender='***************'password = "mimvp-password"receiver='******************'content = 'hello 'msg = MIMEText(content)msg['Subject'] = 'email-subject'msg['From'] = sendermsg['To'] = receiver## smtp port 25smtpServer = smtplib.SMTP(smtpHost, 25) # SMTPsmtpServer.login(sender, password)smtpServer.sendmail(sender, receiver, msg.as_string())smtpServer.quit()print 'send success by port 25'## smtp ssl port 465smtpServer = smtplib.SMTP_SSL(smtpHost, 465) # SMTP_SSLsmtpServer.login(sender, password)smtpServer.sendmail(sender, receiver, msg.as_string())smtpServer.quit()print 'send success by port 465'执⾏命令:$ python python_email_1.pysend success by port 25send success by port 465发送结果,会收到两封邮件,截图其中⼀份邮件如下图:⼆、使⽤smtp服务测试失败,略过或留⾔指正#!/usr/bin/env python# -*- coding:utf-8 -*-## author: # 2015.10.05import smtplibfrom email.mime.text import MIMETextimport subprocesssmtpHost = ''sender='***************'password = "mimvp-password"receiver='******************'content = 'hello 'msg = MIMEText(content)if __name__ == "__main__":p = subprocess.Popen(['/usr/sbin/sendmail', '-t'], stdout=subprocess.PIPE)print(str(municate()))p_res = str(municate()[0])msg = MIMEText(p_res)msg["From"] = sendermsg["To"] = receivermsg["Subject"] = "hello "s = smtplib.SMTP(smtpHost)s.login(sender, password)s.sendmail(sender, receiver, msg.as_string())s.quit()print 'send success'三、调⽤sendmail命令调⽤本机linux⾃⾝sendmail服务发送邮件,不需要启动sendmail后台进程,不需要发送者登录,邮件发送者可以是任意名字,没有限制。
python基础之邮件发送

一、QQ邮箱SSL发送获取qq授权码ssl发送方式不是使用邮箱密码,而是需要授权码,具体步骤如下:1. 登录发送人qq邮箱>>设置>>账户>>POP3/STMP服务开启>>生成授权码2. 验证密保3. 复制16位授权码4. qq邮箱发送源码#!/usr/bin/python3# encoding:utf‐8'''Created on 2020‐04‐24 12:15@author: Administrator'''#coding:utf‐8import smtplibfrom email.mime.text import MIMEText # 引入smtplib和MIMETextfrom email.mime.multipart import MIMEMultipart#设置SMTP地址host = ''#设置发件服务器端口号,注意,这里有SSL和非SSL两种形式,qq SSL端口为465,非SSL为端口默认25 port = "465"#设置发件邮箱sender = "357@"#设置发件邮箱的授权码 ,qq邮箱ssl发送需要先开启stmp并获取密码pwd = 'sqmqweertyuiioplk' #16授权码#设置邮件接收人,发送给多人,隔开receiver = 'yiwr@,7894@'#设置邮件抄送人,发送给多人,隔开cc = 'ywr198592@'''' 不带附件发送邮件#设置html格式的邮件#body = '<h1>这是一个python测试邮件</h1><p>test</p>'#msg = MIMEText(body, 'html') # 设置正文为符合邮件格式的HTML内容#发送普通格式邮件msg = MIMEText('Python 普通格式,邮件发送测试...', 'plain', 'utf‐8')'''#需要发送附件的方法实例msg = MIMEMultipart()#设置发送头信息msg.add_header('subject', '测试邮件') #设置邮件标题msg.add_header('from', sender) # 设置发送人msg.add_header('to', receiver) # 设置接收人msg.add_header('Cc',cc) # 抄送人#设置正文内容msg.attach(MIMEText('Python 邮件发送测试...', 'plain', 'utf‐8'))#设置附件1,D://cs.txt 文件att1 = MIMEText(open('D://cs.txt', 'rb').read(), 'base64', 'utf‐8')att1["Content‐Type"] = 'application/octet‐stream'# 这里的filename可以任意写,写什么名字,邮件中显示附件的名字att1["Content‐Disposition"] = 'attachment; filename="cs.txt"'msg.attach(att1)try:#注意!如果是使用非SSL端口,这里就要改为SMTPsmtpObj = smtplib.SMTP_SSL(host, port)#登陆邮箱smtpObj.login(sender, pwd)#发送邮件,注意第二个参数是发送人抄送人地址smtpObj.sendmail(sender, receiver.split(',') + cc.split(','), msg.as_string()) print ("发送成功")except smtplib.SMTPException as e:print ("发送失败")print(e)finally:smtpObj.quit()5. 发送之后结果截图二、163邮箱非SSL发送非ssl无需获取授权码,直接配置邮箱密码即可1. 163邮箱发送源码#!/usr/bin/python3#encoding:utf‐8'''Created on 2020‐04‐24 12:15@author: Administrator'''#coding:utf‐8import smtplibfrom email.mime.text import MIMEText #引入smtplib和MIMETextfrom email.mime.multipart import MIMEMultipart#设置SMTP地址host = ''#设置发件服务器端口号。
如何使用邮件代码发送邮件

如何使用邮件代码发送邮件使用编程语言发送邮件需要使用到相应的库或模块。
以下是不同编程语言中的示例代码。
1. Python:Python中最常用的库是smtplib和email。
下面是一个使用python 发送邮件的示例代码:```pythonimport smtplibfrom email.mime.text import MIMETextfrom email.utils import formataddrdef send_email(sender_email, sender_password,recipient_email, subject, message):try:msg = MIMEText(message, 'plain') # 创建邮件正文msg['Subject'] = subject # 邮件主题server.starttls( # 启用TLS加密server.sendmail(sender_email, [recipient_email],msg.as_string() # 发送邮件server.quit( # 退出服务器print("邮件发送成功")except Exception as e:print("邮件发送失败:", str(e))#使用示例sender_password = "password"subject = "Example Subject"message = "This is the content of the email."send_email(sender_email, sender_password, recipient_email, subject, message)```2. Java:Java中可以使用JavaMail API来发送邮件。
利用Python发送邮件或发带附件的邮件

利⽤Python发送邮件或发带附件的邮件本⽂使⽤的是163邮件进⾏测试。
注:163邮箱现在需要使⽤客户端授权码进⾏测试,不再⽀持邮箱密码进⾏测试。
1、使⽤Python发Text 邮件import smtplib# 发送字符串的邮件from email.mime.text import MIMEText# 设置服务器所需信息fromEmailAddr = '发件⼈邮箱地址' # 邮件发送⽅邮箱地址password = 'email password' # 密码(部分邮箱为授权码)toEmailAddrs = ['接收⽅地址'] # 邮件接受⽅邮箱地址,注意需要[]包裹,这意味着你可以写多个邮件地址群发# 设置email信息# ---------------------------发送字符串的邮件-----------------------------# 邮件内容设置message = MIMEText('hello,test Python send Email.', 'plain', 'utf-8')# 邮件主题message['Subject'] = 'python test email'# 发送⽅信息message['From'] = fromEmailAddr# 接受⽅信息message['To'] = toEmailAddrs[0]# ---------------------------------------------------------------------# 登录并发送邮件try:server = smtplib.SMTP('') # 163邮箱服务器地址,端⼝默认为25server.login(fromEmailAddr, password)server.sendmail(fromEmailAddr, toEmailAddrs, message.as_string())print('success')server.quit()except smtplib.SMTPException as e:print("error:", e)2、使⽤Python发送带附件的邮件import smtplib# 发送字符串的邮件from email.mime.text import MIMEText# 需要 MIMEMultipart 类from email.mime.multipart import MIMEMultipart# 设置服务器所需信息fromEmailAddr = '发件⼈邮箱地址' # 邮件发送⽅邮箱地址password = 'email password' # 密码(部分邮箱为授权码)toEmailAddrs = ['收件⼈地址'] # 邮件接受⽅邮箱地址,注意需要[]包裹,这意味着你可以写多个邮件地址群发# 设置email信息# ---------------------------发送带附件邮件-----------------------------# 邮件内容设置message = MIMEMultipart()# 邮件主题message['Subject'] = 'python test email'# 发送⽅信息message['From'] = fromEmailAddr# 接受⽅信息message['To'] = toEmailAddrs[0]# 邮件正⽂内容message.attach(MIMEText('hello,test Python send Email', 'plain', 'utf-8'))# 构造附件att1 = MIMEText(open('text.txt', 'rb').read(), 'base64', 'utf-8')att1['Content-type'] = 'application/octet-stream'att1['Content-Disposition'] = 'attachment; filename="test.zip"'message.attach(att1)# ---------------------------------------------------------------------# 登录并发送邮件try:server = smtplib.SMTP('') # 163邮箱服务器地址,端⼝默认为25server.login(fromEmailAddr, password)server.sendmail(fromEmailAddr, toEmailAddrs, message.as_string())print('success')server.quit()except smtplib.SMTPException as e:print("error:", e)以上就是利⽤Python发送邮件或发带附件的邮件的详细内容,更多关于python 发送邮件的资料请关注其它相关⽂章!。
Python技术实现邮件发送与接收的方法

Python技术实现邮件发送与接收的方法随着信息技术的发展,电子邮件成为了人们日常生活中不可或缺的一部分。
无论是个人还是企业,都需要通过邮件与他人进行沟通和交流。
而Python作为一种功能强大的编程语言,也提供了丰富的库和模块来实现邮件发送与接收的功能。
本文将介绍几种常用的Python技术实现邮件发送与接收的方法。
一、使用smtplib库发送邮件smtplib是Python中用于发送邮件的标准库之一,它提供了简单而强大的API,可以轻松实现邮件的发送功能。
首先,需要导入smtplib库,并设置邮件服务器的相关信息,如SMTP服务器地址、端口号和登录的邮箱账号密码等。
接下来,创建一个SMTP对象并连接到邮件服务器,调用sendmail方法发送邮件即可。
二、使用imaplib库接收邮件imaplib是Python中用于接收邮件的标准库之一,它可以与邮箱服务器建立连接,并通过一系列的命令来获取邮件信息。
首先,需要导入imaplib库,并设置邮箱服务器的相关信息,如IMAP服务器地址、端口号和登录的邮箱账号密码等。
接下来,通过IMAP4类的实例化对象,使用login方法登录邮箱账号,并通过select方法选择要接收的邮箱文件夹。
然后,使用search方法搜索特定条件下的邮件,并通过fetch方法获取邮件的内容、主题、发件人等信息。
三、使用第三方库发送邮件除了smtplib和imaplib标准库外,还有一些第三方库如yagmail和pyzmail等也提供了便捷的方法来实现邮件发送与接收的功能。
这些库通常封装了一些常用的操作,使得邮件的发送与接收变得更加简单和高效。
例如,使用yagmail库,只需导入该库并调用send方法即可发送邮件,无需手动设置SMTP服务器和登录信息。
而pyzmail库则提供了解析邮件、获取附件等更加详细和灵活的功能。
四、邮件发送与接收的注意事项在使用Python技术实现邮件发送与接收的过程中,还需要注意一些细节问题。
python发送各类邮件的主要方法

python发送各类邮件的主要方法已有1人参与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参数中指定端口号(如::25),这样就没必要给出port参数。
SMTP.docmd(cmd[, argstring]):向smtp服务器发送指令。
可选参数argstring表示指令的参数。
SMTP.helo([hostname]) :使用"helo"指令向服务器确认身份。
相当于告诉smtp服务器“我是谁”。
SMTP.has_extn(name):判断指定名称在服务器邮件列表中是否存在。
出于安全考虑,smtp服务器往往屏蔽了该指令。
SMTP.verify(address) :判断指定邮件地址是否在服务器中存在。
python:使用python发邮件(qq邮箱)

python:使⽤python发邮件(qq邮箱)今天打算⽤QQ邮箱作为⽰例使⽤的邮箱,其他邮箱基本操作⼀样。
第⼀步:⾸先获取QQ邮箱授权码1、进⼊QQ邮箱⾸页,点击设置,如图,2、然后点击账户3、拉到这个地⽅,开启POP3/SMTP服务服务,按照指⽰操作获取你的邮箱授权码4、这个就是你的授权码,保存下来等会⽤第⼆步,python代码调⽤发送QQ邮件# coding:utf-8import smtplibfrom email.mime.text import MIMETextfrom email.header import Headerclass Mail:def __init__(self):# 第三⽅ SMTP 服务self.mail_host = "" # 设置服务器:这个是qq邮箱服务器,直接复制就可以self.mail_pass = "xxxxxxx" # 刚才我们获取的授权码self.sender = 'xxxxxx@' # 你的邮箱地址self.receivers = ['xxxxxxxx@'] # 收件⼈的邮箱地址,可设置为你的QQ邮箱或者其他邮箱,可多个 def send(self):content = '你要发送的邮件内容'message = MIMEText(content, 'plain', 'utf-8')message['From'] = Header("发件⼈名字,可⾃由填写", 'utf-8')message['To'] = Header("收件⼈名字,可⾃由填写", 'utf-8')subject = 'xxxxx' # 发送的主题,可⾃由填写message['Subject'] = Header(subject, 'utf-8')try:smtpObj = smtplib.SMTP_SSL(self.mail_host, 465)smtpObj.login(self.sender, self.mail_pass)smtpObj.sendmail(self.sender, self.receivers, message.as_string())smtpObj.quit()print('邮件发送成功')except smtplib.SMTPException as e:print('邮件发送失败')if __name__ == '__main__':mail = Mail()mail.send()试试运⾏,发送你的邮件吧~。
使用python发送邮件的四种方式

使用python发送邮件的四种方式在Python中,发送邮件可以使用四种不同的方式:smtplib、email、yagmail和Python内置的sendmail。
1. 使用smtplib:smtplib模块是Python的内置模块,可以通过简单的SMTP协议来发送邮件。
以下是使用smtplib发送邮件的基本示例:```pythonimport smtplibdef send_email(:sender_password = 'your_sender_password'message = 'Hello, this is a test email!'server.starttlsserver.login(sender_email, sender_password)server.sendmail(sender_email, receiver_email, message)server.quitsend_email```2. 使用email:email模块是Python的内置模块,用于处理电子邮件。
它提供了创建、发送和解析邮件的功能。
以下是使用email发送邮件的基本示例:```pythonimport smtplibfrom email.mime.multipart import MIMEMultipartfrom email.mime.text import MIMETextdef send_email(:sender_password = 'your_sender_password'message = MIMEMultipart('alternative')message['From'] = sender_emailmessage['To'] = receiver_emailmessage['Subject'] = 'Test Email'text = 'This is a plain text email.'html = '<p>This is an HTML email.</p>'text_part = MIMEText(text, 'plain')html_part = MIMEText(html, 'html')message.attach(text_part)message.attach(html_part)server.starttlsserver.login(sender_email, sender_password)server.sendmail(sender_email, receiver_email,message.as_string()server.quitsend_email```3. 使用yagmail:yagmail是一个Python库,可以方便地发送电子邮件。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
python发送各类邮件的主要方法已有1人参与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参数中指定端口号(如::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模块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['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下实现)me="hello"+"<"+mail_user+"@"+mail_postfix+">"msg=MIMEText(content,_subtype='plain',_charset='gb2312')msg['Subject']=submsg['From']=memsg['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 Trueexcept Exception,e:print str(e)return Falseif__name__=='__main__':if send_mail(mailto_list,"hello","hello world!":print"发送成功"else:print"发送失败"复制代码2、html邮件的发送与text邮件不同之处就是将将MIMEText中_subtype设置为html。
具体代码如下:(python2.6下实现)import smtplibfrom email.mime.text import MIMETextmsg['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 Trueexcept Exception,e:print str(e)return Falseif__name__=='__main__':if send_mail(mailto_list,"hello","<a href='/xiaowuyi'>小五义</a>":print"发送成功"else:print"发送失败"复制代码3、发送带附件的邮件发送带附件的邮件,首先要创建MIMEMultipart()实例,然后构造附件,如果有多个附件,可依次构造,最后利用smtplib.smtp发送。
from email.mime.text import MIMETextfrom email.mime.multipart import MIMEMultipartimport smtplib#创建一个带附件的实例msg=MIMEMultipart()#构造附件1att1=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)#构造附件2att2=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['subject']='hello world'#发送邮件try:server=smtplib.SMTP()server.connect('')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 smtplibimport mimetypesfrom email.mime.text import MIMETextfrom email.mime.multipart import MIMEMultipartfrom email.mime.image import MIMEImagedef AutoSendMail():msg=MIMEMultipart()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('')server.login('XXX','XXXXXX')server.sendmail(msg['From'],msg['To'],msg.as_string()) server.quit()if__name__=="__main__":AutoSendMail()复制代码利用MIMEimage发送图片,原本是想图片能够在正文中显示,可是代码运行后发现,依然是以附件形式发送的,希望有高手能够指点一下,如何可以发送在正文中显示的图片的邮件,就是图片是附件中存在,但同时能显示在正文中,具体形式如下图。