49. Python 发邮件(2)

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

发送附件:

(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 = [email protected]
To = [email protected], [email protected]
Cc = [email protected]
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 src="cid:image1">
<h3>枪手:</h3><img src="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()

同级的文件目录

执行结果:

原文地址:http://blog.51cto.com/286577399/2059638

时间: 2024-10-06 19:30:28

49. Python 发邮件(2)的相关文章

python 发邮件乱码

来自:http://outofmemory.cn/code-snippet/1464/python-send-youjian-resolve-suoyou-luanma-question 使用python发邮件很简单,但是遇到乱码问题很烦恼. 乱码问题有几种:有发件人名称乱码,有标题乱码,也有正文乱码的问题. 要解决发件人名称乱码问题,必须使用Header,如下代码: from email.header import Header from = ("%s<[email protected]

48. Python 发邮件(1)

python发送邮件 1.通过python发邮件步骤: 前提:开通了第三方授权,可以使用smtp服务 1.创建smtp对象 2.连接smtp服务器,默认端口号都是25 3.登陆自己的邮箱账号 4.调用发送消息函数,参数:发件人.收件人.消息内容 5.关闭连接 2.邮件消息注册: 首先创建一个消息对象: msg = email.mime.multipart.MIMEMultipart()                     #通过这个类创建消息 msg['from'] = '[email pr

Python 发邮件例子

Python 发邮件例子 例子 #!/usr/bin/env python # -*- coding: utf-8 -*- # @Date : 2019-04-23 16:12:33 # @Author : BenLam # @Link : https://www.cnblogs.com/BenLam/ import smtplib from email.mime.text import MIMEText from email.header import Header from email.mi

python发邮件出现乱码

decode的作用是将其他编码的字符串转换成unicode编码,如str1.decode('gb2312'),表示将gb2312编码的字符串str1转换成unicode编码. encode的作用是将unicode编码转换成其他编码的字符串,如str2.encode('gb2312'),表示将unicode编码的字符串str2转换成gb2312编码. 另外对于一些包含特殊字符的编码,直接解码可能会报错,可以使用对于的参数来设置.如:s.decode("utf-8", "igno

python发邮件

import smtplib from email.mime.text import MIMEText from email.header import Header # 第三方 SMTP 服务 mail_host="smtp.qq.com" #设置服务器 mail_user="xxxxxx" #用户名 mail_pass="plcfthkdtpoxcabh" #口令QQ需要授权码 sender = '[email protected]' rec

python 发邮件脚本

相关模块介绍 发送邮件主要用到了smtplib和email两个模块,这里首先就两个模块进行一下简单的介绍:    1.smtplib模块 smtplib.SMTP([host[, port[, local_hostname[, timeout]]]])   SMTP类构造函数,表示与SMTP服务器之间的连接,通过这个连接可以向smtp服务器发送指令,执行相关操作(如:登陆.发送邮件).所有参数都是可选的. host:smtp服务器主机名 port:smtp服务的端口,默认是25:如果在创建SMT

人生苦短之Python发邮件

#coding=utf-8 import smtplib from email.mime.base import MIMEBase from email.mime.image import MIMEImage from email.mime.multipart import MIMEMultipart from email.mime.text import MIMEText ''' 一些常用邮箱发件服务器及端口号 邮箱 发件服务器 非SSL协议端口 SSL协议端口 163 smtp.163.co

python 发邮件小程序一枚

#!/usr/bin/env python # Import smtplib for the actual sending function import sys import getopt import smtplib sender = '[email protected]'     #这里输入发件人邮箱地址 # If there are more than one receiver, you need to ganerate a list.  receiver = ['[email prot

Python发邮件实例,并用Tkinter实现UI

一个偶然的机会我接触到Python语言,个人感觉Python是强大的工具语言.就下决心好好研究一下.废话少说,讲述下这个Demo的实现过程及源码.多谢指正! 第一步:最主要的工具包就是:smtplib.下面是基本的操作的核心代码: <span style="font-size:14px;"># -*- coding: utf-8 -*- # Import the email modules we'll need import smtplib from email.mime.