python利用smtp发送邮件

原创
2018/06/06 12:00
阅读数 315

Python对SMTP支持有smtplib和email两个模块,email负责构造邮件,smtplib负责发送邮件。

 

python创建SMTP对象的语法:

  • smtpObj = smtplib.SMTP([host [ , port [ , local_hostname ]]])
  • host: smtp服务器主机,可以指定主机的ip地址或域名,是可选参数
  • port:如果提供了host参数,就需要制定smtp服务的端口号,一般是25,如果是ssl,那一般为465
  • local_host: 如果smtp在本地主机,就要指定这个参数
  • 在创建smtp这个对象时,如果提供了host和port,那它会自动调用connect方法连接服务器

 

SMTP对象使用sendmail方法发送邮件

  • SMTP.sendmail(from_addr,to_addrs,msg[,mail_options,rcpt_options])
  • from_addr: 邮件发送者地址
  • to_addrs: 字符串列表,邮件发送地址
  • msg:发送消息,是字符串,表示邮件的内容,包含标题,发信人,收件人,邮件内容,附件等构成,要特别注意他的格式

 

 

普通文本邮件的发送:

#!/usr/bin/env python

# -*- coding:utf-8 -*-

# @date: 2018/6/5 下午9:09

# @author: Bill

# @file: sendMail.py



import smtplib

from email.mime.text import MIMEText

from email.header import Header



from_addr = 'xxxx@163.com' # 设置i你的邮箱账号

password = 'xxxxx' # 设置你的邮箱密码,有的邮箱需要开通授权码

smtp_server = 'smtp.163.com'

to_addrs = ['178919347@qq.com'] # 邮件接收者的地址,是一个列表



# 第一个参数为文本内容,第二个plain设置文本格式,第三个设置编码utf-8

msg = MIMEText('''你好,今天约吗''', 'plain', 'utf-8')

msg['From'] = Header('''约吗''', 'utf-8')

msg['To'] = Header('''约吗''', 'utf-8')

msg['Subject'] = Header('''约吗''','utf-8')

# 注意 文本内容最好用三引号扩起来,如果报554错误,可能是有敏感信息被看成了垃圾邮件

try:

    smtpObj = smtplib.SMTP_SSL(smtp_server, 465) # 建立ssl连接,创建smtp对象时已经自动创建了连接,所以不需要connect方法了

    smtpObj.login(from_addr,password)

    smtpObj.sendmail(from_addr, to_addrs, msg.as_string())

    print("邮件发送成功!")

except smtplib.SMTPException as e:

    print("Error: 无法发送邮件!\n错误信息: {}".format(e))

 

 

发送html格式的邮件

只需要把plain格式改变为html就可以了

#!/usr/bin/env python

# -*- coding:utf-8 -*-

# @date: 2018/6/6 上午11:27

# @author: Bill

# @file: send_html_mail.py



from email.mime.text import MIMEText

import smtplib

from email.header import Header



from_addr = 'xxx@139.com'

password = 'xxx' # 设置你的邮箱密码,有的邮箱需要开通授权码

smtp_server = 'smtp.139.com'

to_addrs = ['350013086@qq.com']



mail_msg = '''

<p>Python check!</p>

<p><a href="http://www.baidu.com">This is an url!</a></p>

''' # 带有html标签格式的文本



msg = MIMEText(mail_msg, 'html', 'utf-8') # 构造信息是把原来的plain修改成html就可以了

msg['From'] = Header(from_addr, 'utf-8')

msg['To'] = Header(to_addrs[0], 'utf-8')

msg['Subject'] = Header('''Use Python, enjoy Python''', 'utf-8')



try:

    smtpObj = smtplib.SMTP_SSL(smtp_server, 465)

    smtpObj.login(from_addr, password)

    smtpObj.sendmail(from_addr, to_addrs, msg.as_string())

    print("发送成功!")

except smtplib.SMTPException as e:

    print("发送失败!")

    print("错误信息:{}".format(e))

 

发送带附件的邮件

发送文本,需要构造MIMEText对象

发送附件,需要构造MIMEMultipart对象,然后往里面填见MIMEText作为邮件正文,MIMEBase对象作为附件

#!/usr/bin/env python

# -*- coding:utf-8 -*-

# @date: 2018/6/6 上午11:44

# @author: Bill

# @file: send_attachment.py



from email.mime.text import MIMEText

import smtplib

from email.header import Header

from email.mime.multipart import MIMEMultipart



from_addr = 'xxxxxx@139.com'

password = 'xxxxx' # 设置你的邮箱密码,有的邮箱需要开通授权码

smtp_server = 'smtp.139.com'

to_addrs = ['350013086@qq.com']





mail_msg = '''

<p>Python check!</p>

<p><a href="http://www.baidu.com">This is an url!</a></p>

'''



msg = MIMEMultipart() # 创建一个带附件的实例

msg['From'] = Header(from_addr, 'utf-8')

msg['To'] = Header(to_addrs[0], 'utf-8')

msg['Subject'] = Header('''Use Python, enjoy Python''', 'utf-8')

msg.attach(MIMEText(mail_msg, 'html', 'utf-8')) # 邮件正文的内容



# 构造附件1,传送当前目录下的demon1.py

att1 = MIMEText(open('demon1.py', 'r').read(), 'base64', 'utf-8')

att1['Content-Type'] = 'application/octet-stream'

att1['Content-Dispostion'] = 'attachment;filename="demon1.py"' # filename写什么,邮件附件就以什么命名

msg.attach(att1)





try:

    smtpObj = smtplib.SMTP_SSL(smtp_server, 465)

    smtpObj.login(from_addr, password)

    smtpObj.sendmail(from_addr, to_addrs, msg.as_string())

    print("发送成功!")

except smtplib.SMTPException as e:

    print("发送失败!")

    print("错误信息:{}".format(e))

 

展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部