Python使用SMTP模块、email模块发送邮件

 

一、smtplib模块:

主要通过SMTP类与邮件系统进行交互。使用方法如下:

1.实例化一个SMTP对象:

  s = smtplib.SMTP(邮件服务地址,端口号)

  s = smtplib.SMTP_SSL(邮件服务地址,端口号)

2.登陆邮件,权限验证:

  s.login(用户名,密码)

3.发送邮件:

  s.sendmail(发件人邮箱,收件人邮箱,发送内容)

4.断开连接:

  s.close()

 

二、email模块:

  email模块:支持发送的邮件内容为纯文本、HTML内容、图片、附件。email模块中有几大类来针对不同的邮件内容形式,常用如下:

  MIMEText:(MIME媒体类型)内容形式为纯文本、HTML页面。

  MIMEImage:内容形式为图片。

  MIMEMultupart:多形式组合,可包含文本和附件。

 

每一类对应的导入方式:

  from email.mime.text import MIMEText

  from email.mime.image import MIMEImage

  from email.mime.multipart import MIMEMultipart

 

三、MIMEText:

  MIMEText(msg,type,chartset)

  msg:文本内容

  type:文本类型默认为plain(纯文本)

   发送HTML格式的时候,修改为html,但同时要求msg的内容也是html的格式。

  chartset:文本编码,中文为“utf-8”

  # 构造TEXT格式的消息

  msg = MIMEText("hello.text","plain","utf-8")

  msg["Subject"] = "xxxxx"

  msg["From"] = "xxxx"

  msg["To"] = "xxxx"

  #发送以上构造的邮件内容要使用as_string将构造的邮件内容转换为string形式。

  s.sendmail("xxx","xxx",msg.as_string)

 

四、MIMEImage、MIMEMultipart:

  msg = MIMEMultipart()

  #实例化一个文本对象 

  msg_sub = MIMEText("hello.text","plain","utf-8")

  #将text消息添加到MIMEMultipart中,作为邮件正文。

  msg.attach(msg_sub)

 

  #图片作为附件

  import os

  img_datas = open(os.getcwd()+ "/reports/xxxx.png","rb").read()

  msg_img = MIMEImage(img_data)

  msg_img.add_header(‘Content-Disposition‘,‘attachment‘, filename = "xxxx.png" )

  msg_img.add_header(‘Content-ID‘,‘<0>‘)

  #将图片添加到MIMEMultiplart中,作为附件发送。

  msg.attach(mag_img)

源代码如下:

发送文本邮件: 

import smtplib
from email.mime.text import MIMEText

sender = ‘‘   #发送人邮箱
passwd = ‘lkugmgywydhfff‘ #发送人邮箱授权码
receivers = ‘‘ #收件人邮箱

subject = ‘python发邮件测试‘ #主题
content = ‘这是我使用python smtplib模块和email模块自动发送的邮件‘    #正文

msg = MIMEText(content,‘plain‘,‘utf-8‘)
msg[‘Subject‘] = subject
msg[‘From‘] = sender
msg[‘TO‘] = receivers

try:
    s = smtplib.SMTP_SSL(‘smtp.qq.com‘,465)
    s.login(sender,passwd)
    s.sendmail(sender,receivers,msg.as_string())
    print(‘发送成功‘)

except Exception:
    print(‘发送失败‘)

 

 发送HTML邮件: 

import smtplib
from email.mime.text import MIMEText
from email.header import Header

sender = ‘xxxx@qq.com‘ #发件邮箱
passwd = ‘lkugmgywydhfff‘ #发送人邮箱授权码
receivers = ‘‘   #收件邮箱

subject = ‘python发邮Html邮件测试‘ #主题

content = """         #内容,HTML格式
<p>Python 邮件发送测试...</p>
<p><a href="http://www.baidu.com">这是一个链接</a></p>
"""

msg = MIMEText(content,‘html‘,‘utf-8‘)
# msg[‘Subject‘] = subject
msg[‘Subject‘] = Header(subject,‘utf-8‘)
# msg[‘From‘] = sender
msg[‘From‘] = Header(‘大傻子‘,‘utf-8‘)
# msg[‘To‘] = receivers
msg[‘To‘] = Header(‘二愣子‘,‘utf-8‘)
try:
    s = smtplib.SMTP_SSL(‘smtp.qq.com‘,465)
    s.login(sender,passwd)
    s.sendmail(sender,receivers,msg.as_string())
    print(‘Send Success‘)

except:
    print(‘Send Failure‘)

  

发送图片邮件: 

import smtplib
from email.mime.image import MIMEImage
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart

sender = ‘‘
passwd = ‘lkugmgywydhfff‘
receivers = ‘‘
subject = ‘python发邮带img的邮件测试‘ #主题

# 创建一个带附件的实例
msg = MIMEMultipart()
msg[‘Subject‘] = subject
msg[‘From‘] = sender
msg[‘To‘] = receivers

# 创建正文
msg.attach(MIMEText(‘使用python smtplib模块和email模块自动发送邮件测试‘,‘plain‘,‘utf-8‘))

# 创建图片附件
import os
img_file = open(os.getcwd()+"/a4.jpg",‘rb‘).read()
msg_img = MIMEImage(img_file)
msg_img.add_header(‘Content-Disposition‘,‘attachment‘, filename = "a4.jpg")
msg_img.add_header(‘Content-ID‘, ‘<0>‘)
msg.attach(msg_img)

try:
    s = smtplib.SMTP_SSL(‘smtp.qq.com‘,465)
    s.set_debuglevel(1) #输出发送邮件详细过程
    s.login(sender,passwd)
    s.sendmail(sender,receivers,msg.as_string())
    print(‘Send Succese‘)

except:
    print(‘Send Failure‘)

  

发送带附件的邮件:

import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.header import Header

sender = ‘‘  #发件邮箱
passwd = ‘lkugmgywydhfff‘  # 邮箱授权码
receivers = ‘‘  #收件邮箱

subject = ‘python发带附件的邮件测试‘ #主题
# 创建一个带附件的实例
msg = MIMEMultipart()
msg[‘Subject‘] = subject
msg[‘From‘] = sender
msg[‘To‘] = receivers

#创建正文,将文本文件添加到MIMEMultipart中
msg.attach(MIMEText(‘使用python smtplib模块和email模块自动发送邮件测试‘,‘plain‘,‘utf-8‘))

#构造附件1,传送当前目录下  文件
att1 = MIMEText(open(‘testdata.xlsx‘,‘rb‘).read(),‘base64‘,‘utf-8‘) # rb以二进制方式读取
# att1["Content-Type"] = ‘application/octet-stream‘
# filename为附件名称,可以任意写,写什么名字,邮件中显示什么名字
att1["Content-Disposition"] = ‘attachment; filename = "testdata.xlsx" ‘
#将附件添加到MIMEMultipart中
msg.attach(att1)

#构造附件2
att2 = MIMEText(open(‘db.cfg‘,‘rb‘).read(),‘base64‘,‘utf-8‘)
# att2["Content-Type"] = ‘application/octet-stream‘
att2["Content-Disposition"] = ‘attachment; filename = "db.cfg" ‘
#将附件添加到MIMEMultipart中
msg.attach(att2)

try:
    s = smtplib.SMTP_SSL(‘smtp.qq.com‘,465)
    s.set_debuglevel(1) #输出发送邮件详细过程
    s.login(sender,passwd)
    s.sendmail(sender,receivers,msg.as_string())
    print(‘Send Succese‘)

except:
    print(‘Send Failure‘)
 

相关推荐