# 邮件内容
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"]
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"]