为了账号安全,请及时绑定邮箱和手机立即绑定

Python 发邮件

标签:
Python

继续修改上面一节的发邮件代码

发送附件:

(1)先找一个本地的文件

(2)打开文件,读出文件字符串

(3)通过MIMT ext()类来创建一个对象att,传入文件读出内容

(4)增加att的头部信息,并指定文件名字

(5)添加到msg消息中msg.attach(att)

样例:

attfile = 'test.py'

basename = os.path.basename(attfile)

fp = open(attfile, 'rb')

att = email.mime.text.MIMEText(fp.read(), 'html', 'utf-8')

att["Content-Type"] = 'application/octet-stream'

att.add_header('Content-Disposition', 'attachment',filename=('utf-8', '', basename))#three-tuple of (charset, language, value),

# encoders.encode_base64(att)

msg.attach(att)


发送图片:

(1)本地必须存在一张图片;

(2)打开图片,并读取图片内容

(3)创建发邮件相对应的图片对象imgattr = MIMEImage(fimg.read())

(4)增加图片的头信息, imgattr.add_header('Content-ID', '<image1>')

指定了图片的id,图片如果想在正文中显示,必须通过html的格式显示出来:在前端代码中指定图片id

<img src = 'cid:image1'>

添加到message的信息中


所以 message.conf 修改为:

vim message.conf

From = 2899@qq.com

To = 2799@qq.com, 10701@qq.com

Cc = 2399@qq.com

Subject = 测试邮件

File = 1.txt,2.txt

 

Image = 1.jpg,2.jpg

message = '''大家好:

    测试邮件

    测试邮件

以上

谢谢

 

#以下是HTML文件信息:

<h1>hello world</h1>

<h2>hello world</h2>

<h3>hello world</h3>

<h4>hello world</h4>

<h5>hello world</h5>

<h6>hello world</h6>

<table border="1">

    <thread>

        <tr>

            <th>IP</th>

            <th>DNS BOOL</th>

        </tr>

    </thread>

    <tbody>

        <tr>

            <td>1.1.1.1</td>

            <td>True</td>

        </tr>

        <tr>

            <td>2.2.2.2</td>

            <td>False</td>

        </tr>

    </tbody>

</table>

 

 

 

#引入图片:

<h3>漫游:</h3><img class="lazyload" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB/AAffA0nNPuCLAAAAAElFTkSuQmCC" data-original="cid:image1">

<h3>枪手:</h3><img class="lazyload" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB/AAffA0nNPuCLAAAAAElFTkSuQmCC" data-original="cid:image2">

'''



把发邮件的代码封装起来,添加抄送人(Cc),添加附件(File),util.py 不做改动

vim sendmail2.py

import codecs

import email.mime.multipart

import email.mime.text

import email.header

import os

from email.mime.image import MIMEImage

from util import getProperty

import smtplib

 

 

class SendMail(object):

    def __init__(self):

        self.sendFrom = getProperty("From")

        self.sendTo = getProperty("To").split(",")

        self.connect = getProperty("message")

        self.sendCc = getProperty("Cc").split(",")

        self.sendFile = list()

        self.sendImage = list()

 

        for i in getProperty("File").split(","):

            self.sendFile.append(i.replace("\r", ""))

        for j in getProperty("Image").split(","):

            self.sendImage.append(j.replace("\r", ""))

 

        self.msg = None

 

    def setEmailHeader(self):

        self.msg = email.mime.multipart.MIMEMultipart()

        self.msg['from'] = self.sendFrom

        self.msg['to'] = ";".join(self.sendTo)

        self.msg['cc'] = ";".join(self.sendCc)

        self.msg['subject'] = email.header.Header(getProperty("Subject"))

 

    def setMessage(self):

        text = email.mime.text.MIMEText(self.connect, 'html', 'utf-8')

        self.msg.attach(text)

 

    def setFile(self):

        for file in self.sendFile:

            if os.path.exists(file):

                with codecs.open(file, "rb") as f:

                    attr = email.mime.text.MIMEText(str(f.read()), "html", "utf-8")

                attr["Content-Type"] = 'application/octet-stream'

                attr.add_header('Content-Disposition', 'attachment',filename=('utf-8', '', file))

                self.msg.attach(attr)

            else:

                print ("{0} file is not exists!".format(file))

 

    def setImage(self):

        start = 1

        for image in self.sendImage:

            if os.path.exists(image):

                with codecs.open(image, "rb") as I:

                    attrImage = MIMEImage(I.read())

                    attrImage.add_header('Content-ID', '<image{0}>'.format(int(start)))

                    self.msg.attach(attrImage)

                    start += 1

            else:

                print("{0} image is no exists!".format(image))

 

 

    def sendemailLast(self):

        smtp = smtplib.SMTP_SSL("smtp.qq.com", 465)

        #smtp.set_debuglevel(1)

        #print (self.sendFrom)

        smtp.login(self.sendFrom, 'xrutyyjbcaae')

        #print (self.sendTo)

        smtp.sendmail(self.sendFrom, self.sendTo + self.sendCc, self.msg.as_string())

 

def main():

    sendMail = SendMail()

    sendMail.setEmailHeader()

    sendMail.setMessage()

    sendMail.setFile()

    sendMail.setImage()

    sendMail.sendemailLast()

 

if __name__ == '__main__':

    main()



同级的文件目录

image.png


执行结果:

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消