Python笔记-----发送邮件email

一、smtplib模块----负责配置信息,登入邮箱,发送邮件


  1. 创建SMTP的操作对象并连接smtp目标服务器
server = smtplib.SMTP(SMTP服务器,端口)
# eg : server = smtplib.SMTP(smtp.163.com,25) #163邮箱
  1. 登入邮箱账户
server.login(邮箱账户,密码)
#(自己的邮箱账户和邮箱授权码/密码(免费的邮箱,这里用授权码,一般自己公司的,直接写邮箱密码就行了)
  1. 发送邮件
server.sendmail(发送者,邮件接收者,msg.as_string())
#msg.as_string()中as_string()是将msg(MIMEText或MIMEMultipart对象)变为str。
  1. 断开SMTP服务
smtp.quit()

二、email模块

负责定义邮件标题、邮件内容(正文,附件,发送者,接收…)
三个重要模块

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

1. MIMEText -----邮件内容是纯文本

用法
① 创建文本邮件对象

text_email = MIMEText(正文内容,正文内容的类型) 
'''
eg:  
test_info = '这是邮件的正文内容'
text_email = MIMEText(text_info,'plain','utf-8') 
'''

②邮件接收者,发送者,邮件标题

text_email['subject'] = Header('这是邮件标题','utf-8') #需要导入email.header.Header ()
text_email['From'] =  sender # 发送者的邮箱地址
text_email['To'] = receiver

2. MIMEImage-----邮件内容是图片附件

用法

#1. 准备一张图片
image_file = open(r'D:\python_files\images\test.png', 'rb').read()
#2. 创建邮件对象
image_email = MIMEImage(image_file)
#3. 添加附件声明, 命名图片名称,传送附件时如果是中文名的文件
image.add_header('content-disposition','attachment',filename="red_people.png")
#
image["Content-Disposition"] = 'attachment; filename="red_people.png"'
#4. 邮件接收者,发送者,邮件标题
...

3. MIMEApplication-----邮件内容是任意附件

(不管什么类型的附件,都用MIMEApplication)

用法:跟 MIMEImage差不多,不详述

4. MIMEMultipart -----将多样的邮件内容添加到MIMEMultipart对象里,一起发送

用法

#1. 创建MIMEMultipart对象
email_content = MIMEMultipart('mixed') #邮件包含附件,图片,文本等都可以添加
email_content = MIMEMultipart('alternative') #邮件正文中包括纯文本正文(text/plain)和超文本正文(text/html)
email_content = MIMEMultipart('related') #邮件正文中包括图片,声音等内嵌资源
#2. 将构造内容添加到MIMEMultipart对象中,就可以把文本,html,附件等一起发送了
email_content.attach(MIMEText或者MIMEImage对象)
#eg: email_content.attach(image_email)
#eg: email_content.attach(text_email)
#3. 定义发送者,接收者,主题
msg['From'] = sender
msg['To'] = receiver
msg['subject'] = Header('The  first email to you','utf-8')

PS:
发送邮件时,请确认:
1.确定邮箱已经开启smtp功能,并且确定是否开启授权码登录,如果开启则需要使用授权码登录。
2.确定邮箱端口port值是否正确,是465、587、25,或者邮箱系统定义的其他端口
3.确定邮箱支持的加密方式,以及不同加密方式对应的端口值正确与否。
可能出现的报错信息:
1.报错535:
未将POP3/SMTP服务开启。通过在163邮箱内 设置 获取授权码 打开,通过授权码可以进行第三方登录。此处的Password填写授权码。
2.报错554:
第一种情况:缺失发件人和主题,将msg[‘Subject’] msg[‘From’] msg[‘To’] 几行添加。
第二种情况:网络的问题。当家里的网络出现问题时,重启路由器或者切换成手机热点试试;当手机热点出现问题时,切换成家里的网络试试。

#完整代码
# -*- coding:utf-8 -*-
import smtplib
from email.header import Header
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.mime.image import MIMEImage
from email.mime.application import MIMEApplication

sender='Lcicada@163.com'
sender_password='******' #自己填写自己的
receiver='***@163.com'
server_port=25
server='smtp.163.com'


def send_email():

    #email content is text
    text=MIMEText('The first email','plain','utf-8')

    #email attachment is image
    image_file=open('C:\Users\chan.long\Desktop\desktop.png','rb').read()
    image=MIMEImage(image_file)
    image.add_header('Content-ID', '<image1>')

    #email attachment is pdf_file
    pdf_file=open('E:\Test\My documents\document\Guide Of Submitting app to productioon portal_2019.12.12.pdf','rb').read()
    pdf=MIMEApplication(pdf_file)
    pdf.add_header('Content-Disposition', 'attachment', filename='Guide.pdf')
  
    msg=MIMEMultipart('mixed')
    msg.attach(text)
    msg.attach(image)
    msg.attach(pdf)
    msg['From']=sender
    msg['To']=receiver
    msg['subject']=Header('The  first email to you','utf-8')    
    try:
        
        smtp=smtplib.SMTP(server,server_port)
        smtp.ehlo()
        smtp.starttls()
        smtp.login(sender,sender_password)
        smtp.sendmail(sender,receiver,msg.as_string())  #MIMEMultipart('mixed').as_string()  会报554错误
        smtp.quit()
        print('send successfully')

    except Exception as e:
        print('send fail')
        print(e)
    
if __name__ == '__main__':
    send_email()               
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值