邮件内容构建

# 邮件内容

import mymail
import os

class mailcontent():
    def __init__(self):
        self.From=""
        self.To=""
        self.Subject=""
        self.Boundary="==========%s=========="%(mymail.base64encode("python mail boundary".encode()).decode())
        self.mime_version="1.0"
        self.text=""
        self.texttype=""
        self.text_transfer=""
        self.files={}

    def __str__(self):
        return self.as_string()

    def __getitem__(self,key):
        if key=="from":
            return self.From
        elif key=="To":
            return self.To
        elif key=="Subject":
            return self.Subject
        elif key=="Boundary":
            return self.Boundary
        elif key=="mime_version":
            return self.mime_version
        else:
            return None

    def __setitem__(self,key,value):
        if key=="From":
            self.From=value
        elif key=="To":
            self.To=value
        elif key=="Subject":
            self.Subject=value
        elif key=="mime_version":
            self.mime_version=value
        else:
            pass

    #追加内容
    def add_text(self,text,encoding="utf-8",transfer_encoding=None,texttype="text/plain"):
        if texttype==None:
            texttype="text/plain"
        if encoding==None:
            encoding="utf-8"
        if transfer_encoding=="base64":
            self.text=mymail.base64encode(text.encode(encoding)).decode()
        elif transfer_encoding=="quote_printable":
            self.text=mymail.quote_printable_encode(text.encode(encoding)).decode()
        elif transfer_encoding==None:
            self.text=text
        else:
            raise BaseException("unknown encoding: %s"%(transfer_encoding))
        self.texttype=texttype+";charset="+encoding
        self.text_transfer=transfer_encoding
        print(self.text)
    #增加文件
    def add_file(self,name,encoding="base64",filecontent=None):
        if encoding==None:
            encoding="base64"
        if encoding=="base64":
            if filecontent:
                name=os.path.basename(name)
                self.files[name]=(encoding,mymail.base64encode(filecontent).decode())
            else:
                with open(name,"rb") as f:
                    name=os.path.basename(name)
                    self.files[name]=(encoding,mymail.base64encode(f.read()).decode())
        elif encoding=="quote_printable":
            if filecontent:
                name=os.path.basename(name)
                self.files[name]=(encoding,mymail.quote_printable_encode(filecontent).decode())
            else:
                with open(name,"rb") as f:
                    name=os.path.basename(name)
                    self.files[name]=(encoding,mymail.quote_printable_encode(f.read()).decode())
        else:
            raise BaseException("unknown encoding: %s"%(encoding))
    #返回字符串
    def as_string(self):
        buf=""
        #header
        buf+="Content-Type: multipart/mixed;boundary=%s\r\n"%(self.Boundary)
        buf+="MIME-Version: %s\r\n"%(self.mime_version)
        buf+="To: %s\r\n"%(self.To)
        buf+="From: %s \r\n"%(self.From)
        buf+="Subject: =?UTF-8?Q?%s?=\r\n"%(mymail.quote_printable_encode(self.Subject.encode()).decode())
        buf+="Date: %s\r\n"%(mymail.localtime())
        buf+="\r\n"
        #text
        if self.text!="":
            buf+="--%s\r\n"%(self.Boundary)
            buf+="Content-Type: %s\r\n"%(self.texttype)
            buf+="MIME-Version: %s\r\n"%(self.mime_version)
            if self.text_transfer:
                buf+="Content-Transfer-Encoding: %s\r\n"%(self.text_transfer)
            buf+="\r\n%s\r\n"%(self.text)
        #file
        for name in self.files:
            buf+="--%s\r\n"%(self.Boundary)
            buf+="Content-Type: %s\r\n"%(mymail.mimetype(name))
            buf+="MIME-Version: %s\r\n"%(self.mime_version)
            buf+="Content-Transfer-Encoding: %s\r\n"%(self.files[name][0])
            buf+="Content-Disposition: attachment;filename=%s\r\n"%(name)
            buf+="\r\n%s\r\n"%(self.files[name][1])
        #end
        buf+="--%s--\r\n"%(self.Boundary)
        buf+="\r\n.\r\n"
        return buf

__all__=["mailcontent"]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值