首页 > 编程语言 >SMTP操作使用详解并通过python进行smtp邮件发送示例

SMTP操作使用详解并通过python进行smtp邮件发送示例

时间:2023-12-02 22:22:05浏览次数:54  
标签:示例 python smtp SMTP MIMEText msg import email 邮件

转载请注明出处:

1.SMTP

      SMTP 的全称是“Simple Mail Transfer Protocol”,即简单邮件传输协议。它是一组用于从源地址到目的地址传输邮件的规范,通过它来控制邮件的中转方式。SMTP 协议属于 TCP/IP 协议簇,它帮助每台计算机在发送或中转信件时找到下一个目的地。SMTP 服务器就是遵循 SMTP 协议的发送邮件服务器。
  SMTP 认证,简单地说就是要求必须在提供了账户名和密码之后才可以登录 SMTP 服务器,这就使得那些垃圾邮件的散播者无可乘之机。
  增加 SMTP 认证的目的是为了使用户避免受到垃圾邮件的侵扰。

2.网易邮箱可以通过以下方式开启:

   请登录网页邮箱,点击邮箱页面上方的“设置”,选择“POP3/SMTP/IMAP”,请根据实际需求开启POP3/IMAP或者SMTP/IMAP服务,并根据页面提示进行短信验证操作。开通后即可使用foxmail、Outlook等第三方客户端进行收发邮件。(注:点击关闭,既可关闭成功

                                 

   在开启服务时,需要保存好授权码:

                                 

 3.使用python实现smtp邮件发送

 3.1. 安装smtplib和email模块

pip install smtplib
pip install email

3.2.发送简单纯文本邮件

# -*- coding: utf-8 -*-
# 从[email protected][email protected]发送一封邮件
# 注意, 此处要填写你自己正确的邮件地址
import smtplib
from email.header import Header
from email.mime.text import MIMEText

fromAddr ='17****[email protected]'   # 发送邮件地址
password = 'GXKLZMSNHOMPDVXH'   # SMTP服务的密码, 就是上述图中的授权码
toAddr = '1****[email protected]'    # 目的邮件地址
subject = 'SMTP send mail'         # 邮件标题
content = 'python send mail,very goode'            # 邮件内容

def makeMail():
    mail = MIMEText(content, 'plain', 'utf-8')      # 使用MIMEText()构造一个文本格式的邮件
    mail['From'] = Header(fromAddr, 'utf-8')        # 构造邮件头From
    mail['To'] = Header(toAddr, 'utf-8')            # 构造邮件头To
    mail['Subject'] = Header(subject, 'utf-8')      # 构造邮件主题
    return mail


def sendMail(mail):
    # smtp= smtplib.SMTP()                        # 创建SMTP实例
    # smtp.connect('smtp.qq.com')                 # 连接SMTP服务器
    smtp = smtplib.SMTP_SSL("smtp.163.com")        # 此处直接一步到位
    smtp.login(fromAddr, password)                # 登录SMTP服务
    smtp.sendmail(fromAddr, toAddr, mail.as_string())    # 通过SMTP服务器发送邮件
    smtp.quit()


sendMail(makeMail())
print('success')

   运行该python脚本并验证配置:

            

   在接收方的邮箱可以看到发送的邮件:

               

 

3.3.发送HTML邮件: 

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

sender = '[email protected]' #发件邮箱
passwd = 'lkugmgywydhfff' #发送人邮箱授权码
receivers = '[email protected]'   #收件邮箱

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')

3.4.发送图片邮件: 

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

sender = '[email protected]'
passwd = 'lkugmgywydhfff'
receivers = '[email protected]'
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')

3.5.发送带附件的邮件:

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

sender = '[email protected]'  #发件邮箱
passwd = 'lkugmgywydhfff'  # 邮箱授权码
receivers = '[email protected]'  #收件邮箱

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')

4.python 邮件发送模块与语法总结

4.1smtplib模块:

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

1.实例化一个SMTP对象:

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

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

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

  s.login(用户名,密码)

3.发送邮件:

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

4.断开连接:

  s.close()

4.2 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

4.3 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)

4.4 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)

 

标签:示例,python,smtp,SMTP,MIMEText,msg,import,email,邮件
From: https://www.cnblogs.com/zjdxr-up/p/17872354.html

相关文章

  • 聪明办法学python(4)
    聪明办法学python(4)TASK06循环LOOP1.1for循环forxinrange(m,n+1)#range(x,y)是左闭右开区间1.2rangerange(n+1)#起始范围默认为0range(m,n,k)#第三个参数为步长stepforxinrange(5,20,7)==(5+12+19)eg:只对从m到n的奇数求和defsum(m,n):......
  • 聪明学python【5】+【6】
    聪明学python【5】+【6】【5】循环for本质(功能):基于提供的范围,重复执行特定次数的操作(注意:区分C语言和python的“重复”和“循环”:C语言更倾向于用循环数字来实现重复,Python可以直接实现重复,在需要时使用数字循环)格式:#格式1————循环xforxinrange(m,n+1):#格......
  • pythonDay19
    文件的两种用途from  import导入模块(都在同一个路径下) from  import案例 循环导入模块产生的问题 导入模块的优先级 如何解决第一次导入模块以后第二次再导入时候的路径来源 解决导入的模块路径来源不在同一个路径 包被导入是要注意的三点 相对......
  • python第四次笔记
    循环和字符串循环for循环forxinrange(x,y)forxinrange(1,10,2):print(int(x))表示遍历1到9之间的数,步长为2即打印13579while循环while(条件):执行行为whileTrue:print("nihao")这个代码会一直打印nihaocontinuebreakpasscontinue用于跳出本......
  • 聪明办法学Python_task4_11.28-12.2
    聪明办法学Python_task4_11.28-12.2聪明办法学Python_task4_11.28-12.21.task06循环1.1while循环1.2for循环1.3循环控制语句1.4range()函数2.task07字符串2.1字符串构成2.2字符串操作2.2.1字符串运算2.2.2索引&切片2.2.3相关函数1.task06......
  • Python 潮流周刊第 29 期(摘要)
    本周刊由Python猫出品,精心筛选国内外的250+信息源,为你挑选最值得分享的文章、教程、开源项目、软件工具、播客和视频、热门话题等内容。愿景:帮助所有读者精进Python技术,并增长职业和副业的收入。周刊全文:https://pythoncat.top/posts/2023-12-02-weekly以下是本期摘要:......
  • python notebook
    python(11.20--12.2)配置python环境:下载:anaconda在清华大学开源软件镜像站中选择合适的镜像进行下载。anaconda的存在和作用:要使用anaconda不妨先了解anaconda是什么,做什么。首先要知道,anaconda的存在必然有其存在的社会条件,现如今的python拥有众多版本,他们可以满足使用者不......
  • ###聪明办法学python,task06,task07
    Task06---循环for循环和循环范围在提供的范围内,重复执行语句例:foriinrange(1,10)(缩进)print(“HelloWorld!!!”)重复打印9次“HelloWorld!!!”range(a,b)是一个左闭右开的区间,即a到b-1range(a,b,c)可存三个参数,a--起点,b--终点,c--步长若步长为正,则从a到b每c个数执行一次,若步长为负,则从b......
  • 聪明办法学python(字符串)
    字符串编写方式单引号,双引号(如果已存在一种,可用另一种引号包裹字符串,或用转义字符),三引号均可原始字符串在字符串前加"r",使字符串内的转义字符不再有效跨行字符串在每一行的末尾加上一个"\"用’‘’‘’‘或”“”“”“包裹字符串字符串字符串的运算1.字符串的......
  • python notebook
    python(11.20--11.28)现学现卖配置python环境:下载:anaconda在清华大学开源软件镜像站中选择合适的镜像进行下载。anaconda的存在和作用:要使用anaconda不妨先了解anaconda是什么,做什么。首先要知道,anaconda的存在必然有其存在的社会条件,现如今的python拥有众多版本,他们可以满......