首页 > 其他 > 详细

sendmail --续(发送文件和图片)

时间:2018-01-13 12:28:55      阅读:271      评论:0      收藏:0      [点我收藏+]

1、通过Python发送文件和图片。实现代码比较多,由于是练习,尽可能复习以前的模块

脚本目录结构:

sendmail/
├── confmail
├── __init__.py
├── pic
│   ├── car1.jpg
│   ├── car2.jpg
│   ├── __init__.py
│   └── meinv1.png
├── sendmail.py
└── txt
    ├── error.log
    ├── index.html
    └── SOS1.xlsx

主要实现代码:

confmail
[mailConf]
sender = 2578201379@qq.com
receives = xxxxxxxx@qq.com;xx@163.com
smtpserver = smtp.qq.com
password = xxxxxxx
subject = "错误日志"
file = txt/index.html,txt/error.log
image = pic/car1.jpg,pic/car2.jpg,pic/meinv1.png
context = txt/index.html
index.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
          <a href="http://www.163.com">官网地址更多>></a>

          <h3>豪车:</h3><img src="cid:car1">
      <!--<h3>豪车:</h3><img src="cid:car2">
      <h3>美女:</h3><img src="cid:meinv1">-->
</body> </html>

 



sendmail.py


 
#coding:utf8
import email
import smtplib
from email.mime.text import MIMEText
from email.header import Header
from email.mime.multipart import MIMEMultipart
from email.mime.image import MIMEImage
from email.mime.application import MIMEApplication

import os
import codecs
import datetime
from ConfigParser import ConfigParser

import sys
reload(sys)
sys.setdefaultencoding(‘utf8‘)
from subprocess import Popen,PIPE
today = datetime.date.today()
yesterday = today - datetime.timedelta(days=1)
yesterday=yesterday.strftime(‘%Y%m%d‘)

class mailConfig(ConfigParser):
def __init__(self,config):
ConfigParser.__init__(self,allow_no_value=True)
# super(mailConfig,self).__init__(allow_no_value=True)
self.config = config
self.read(self.config)

def get_options(self):
res = {}
options = self.options("mailConf")
for option in options:
res[option] = self.get("mailConf",option)
return res
class getCmd():
def get_ip(self):
cmd = "/sbin/ifconfig |grep ‘netmask‘ |awk ‘{print $2}‘|grep -v ‘127.0.0.1‘"
p = Popen(cmd, stdout=PIPE, stderr=PIPE, shell=True)
stdout, stderr = p.communicate()
return stdout.strip()
def get_name(self):
path = "/data1/games/logic"
self.gameName = "-".join(path.split(‘/‘)[3:])
return self.gameName

class SendMail():
def __init__(self,gameName,server_ip,kwargs):
self.sender = kwargs[‘sender‘]
self.receives = kwargs[‘receives‘]
self.subject = "{0}({1}) {2}".format(server_ip,gameName,kwargs[‘subject‘])
self.context = kwargs[‘context‘]
self.smtpserver = kwargs[‘smtpserver‘]
self.password = kwargs[‘password‘]
self.file = list()
self.image = list()
self.txt = ""
for i in kwargs[‘file‘].split(‘,‘):
self.file.append(i.strip())
for j in kwargs[‘image‘].split(‘,‘):
self.image.append(j.strip())

def set_content(self):
self.message = MIMEMultipart(‘related‘)
self.message[‘From‘] = self.sender
self.message[‘To‘] = self.receives
self.message[‘Subject‘] = self.subject
with codecs.open(self.context,‘rb‘) as fd :
self.txt = fd.read()
self.message.attach(MIMEText(‘{0}‘.format(self.txt), ‘html‘, ‘utf-8‘))
# self.message.attach(MIMEText(‘{0}‘.format(self.context), ‘plain‘, ‘utf-8‘))

def set_file(self):
# list = ["error.log","SOS1.xlsx"]
for file in self.file:
with codecs.open(file,‘rb‘) as fd:
att = MIMEText(fd.read(),_subtype="html")
file_name = file.split(‘/‘)[1].strip()
att["Content-Type"] = ‘application/octet-stream‘
att.add_header(‘Content-Disposition‘,‘attachment‘, filename=("utf-8", "", file_name))
self.message.attach(att)

def set_pic(self):
for img in self.image:
filename = img.split(‘/‘)[1].split(‘.‘)[0]
print("filename is {0}".format(filename))
with codecs.open(img,‘rb‘) as fd :
attrImage = MIMEImage(fd.read())
# attrImage.add_header(‘Content-Disposition‘,‘attachment‘, filename=("utf-8", "", file))
attrImage.add_header("Content-ID", "<{0}>".format(filename))
self.message.attach(attrImage)

def sendmails(self):
server = smtplib.SMTP_SSL()
server.connect(self.smtpserver, ‘465‘)
# server.set_debuglevel(1)
server.login(self.sender, self.password)
server.sendmail(self.sender, self.receives, self.message.as_string())
server.quit()
def main():
mc = mailConfig("confmail")
options = mc.get_options()
cmdResu = getCmd()
server_ip = cmdResu.get_ip()
gameName = cmdResu.get_name()
sendMail = SendMail(server_ip,gameName,options)
sendMail.set_content()
sendMail.set_file()
sendMail.set_pic()
sendMail.sendmails()

if __name__ == "__main__":
main()

执行结果:

python sendmail.py 

技术分享图片

 

登录邮箱查收邮件:

技术分享图片

 

 

 

sendmail --续(发送文件和图片)

原文:https://www.cnblogs.com/pythonlx/p/8278499.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!