python 邮件发送(文本、附件、html、图片)

本文详细解析了邮件发送的基本原理,包括SMTP、POP3及IMAP协议的作用,并通过Python的smtplib库展示了如何实现邮件的自动化发送,涵盖了邮件正文、附件及图片的处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、邮件发送原理

       发送方发送的信件内容经过SMPT协议上传到smpt服务器,转送给远方的smpt服务器,存储到存储设备,然后通过POP/IMAP协议从pop服务器上获取内容发给接收方。

2、常用服务器的名称、地址与端口:

3、使用qq邮箱发送邮件,需要在QQ邮件客户端进行配置:“设置”----“账户”,开启对应服务

     POP3和IMAP的区别:POP3在客户端邮箱中所做的操作不会反馈到邮箱服务器,IMAP则会反馈到邮箱服务器,会做相应的操作

4、代码样例

      python提供了smtplib、poplib与imaplib库,这些库可帮助我们接收发邮件。本部分利用smtplib库实现邮件发送,主要用smtplib.SMTP()类,用于连接SMTP服务器,发送邮件。

# coding:utf-8
import smtplib
from email.mime.text import MIMEText
import time

from email.mime.multipart import MIMEMultipart
from email.header import Header
from email import encoders
from email.mime.base import MIMEBase
from email.utils import parseaddr, formataddr

from email.mime.image import MIMEImage

def SendMail(sender,receivers,cc_mail,mail_pass,content,file,image):
    # 第三方 SMTP 服务
    mail_host = "smtp.qq.com"  # 设置服务器

    #message = MIMEText(content, 'plain', 'utf-8')#正文内容   plain代表纯文本

    # 构造一个MIMEMultipart对象代表邮件本身
    message= MIMEMultipart()
    message.attach(MIMEText(content, 'html', 'utf-8'))# 正文内容   plain代表纯文本,html代表支持html文本

    message['From'] =sender
    message['To'] = ','.join(receivers) #与真正的收件人的邮箱不是一回事
    message['Cc']=','.join(cc_mail)

    subject = 'Python自动邮件-%s' % time.ctime()
    message['Subject'] = subject  #邮件标题

    #添加文件到附件
    with open(file,'rb') as f:
        # MIMEBase表示附件的对象
        mime = MIMEBase('text', 'txt', filename=file)
        # filename是显示附件名字
        mime.add_header('Content-Disposition', 'attachment', filename=file)
        # 获取附件内容
        mime.set_payload(f.read())
        encoders.encode_base64(mime)
        # 作为附件添加到邮件
        message.attach(mime)

    with open(image, 'rb') as f:
        #图片添加到附件
        mime = MIMEBase('image', 'image', filename=image)
        mime.add_header('Content-Disposition', 'attachment', filename=image)
        mime.set_payload(f.read())
        encoders.encode_base64(mime)
        message.attach(mime)

     #将图片显示在正文
    with open(image, 'rb') as f:
        #图片添加到正文
        msgImage = MIMEImage(f.read())
        # 定义图片ID
    msgImage.add_header('Content-ID', '<image1>')
    message.attach(msgImage)



    try:
        smtpObj = smtplib.SMTP_SSL(mail_host, 465)
        smtpObj.login(sender, mail_pass)
        smtpObj.sendmail(sender, receivers+cc_mail, str(message))  #message.as_string()
        smtpObj.quit()
        print u"邮件发送成功"
    except smtplib.SMTPException, e:
        print e


if __name__ == "__main__":
    sender = 'XXXXXX@qq.com' #用户名与发送方
    receivers = ['YYYYYY@qq.com','ZZZZZZ@139.com']  # 接收邮件,可设置为你的QQ邮箱或者其他邮箱
    cc_mail=['PPPPPP@qq.com'] #抄送人

    # 口令,QQ邮箱是输入授权码,在qq邮箱设置 里用验证过的手机发送短信获得,不含空格
    mail_pass = "iwbhitiyrhbfiecg"

    content='''抢到票,速度登录12306付款
            <h1>测试</h1>
            <h2 style="color:red">仅用于测试</h1>
            <a href="http://www.runoob.com/python/python-email.html">菜鸟教程</a><br>
            <p>图片演示:</p>
            <p><img src="cid:image1"></p>
          '''
    file='Fx1.txt'
    image='language.jpg'
    SendMail(sender,receivers,cc_mail,mail_pass,content,file,image)

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值