zoukankan      html  css  js  c++  java
  • sendmail --续(发送文件和图片)

    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 

    登录邮箱查收邮件:

     
  • 相关阅读:
    JQuery实现1024小游戏
    Windows Server2008 R2安装wampserver缺少api-ms-win-crt-runtime-l1-1-0.dll解决方案
    ASP.NET MVC 邮件发送的功能(微软邮箱发送)。
    浅谈撞库防御策略
    极验高并发验证服务背后的技术实现
    2015年国内数据安全事件盘点
    转载——验证码的昨天、今天和明天
    转载——最近百度云盘不提供搜索,闲来无事,玩玩python爬虫,爬一下百度云盘的资源
    SQL 查询语句
    SQL Server 目录
  • 原文地址:https://www.cnblogs.com/pythonlx/p/8278499.html
Copyright © 2011-2022 走看看