对文件进行邮件的定时生成和发送


1、SMTP邮件服务器搭建:

创建一个邮件目录,如/opt/email,并进入/opt/email

mkdir email

cd /opt/email

2、在当前目录下编辑main.cf

myhostname = mail.yourcompany.com
mydomain = yourcompany.com

myorigin = $mydomain
inet_interfaces = all

inet_protocols = ipv4
mynetworks = 127.0.0.0/8, [::1]/128

#此处决定你发送的邮件范围,多个用空格分开,比如要发送给111555555@qq.com则对应的域名为qq.com

relay_domains = tencent.com

smtpd_recipient_restrictions = permit_mynetworks,reject_unauth_destination

 3、编辑docker-compose文件

version: '3'
 
services:
  mailserver:
    image: catatnight/postfix

    ports:
      - "0.0.0.0:9925:25"
    volumes:

     - ./main.cf:/etc/postfix/main.cf:ro
      - /disk1/send_email/mailserver/data:/var/m

 thunderbird:
    image: jlesage/thunderbird
    ports:
      - "0.0.0.0:5800:5800"

    environment:
      - DISPLAY_WIDTH=1280
      - DISPLAY_HEIGHT=720

   volumes:
      - /disk1/send_email/thunderbird/data:/config

 4、部署和拉起容器

docker-compose up -d

5、 telnet localhost 9925 验证是否部署成功

6、发送邮件测试:

import os
import smtplib
from email.mime.multipart import MIMEMultipart

from email.mime.text import MIMEText
from email.mime.base import MIMEBase
from email import encoders

import time
import logging

class SendEmail:
    def __init__(self):
        self.smtp_server = 'HOSTNAME'
        self.port =PORT

def send(self,from_email,to_email_list,Cc,subject_title,content,filenamelist):

        msg = MIMEMultipart()
        msg['From'] = from_email

        msg['To'] = ",".join(to_email_list)
        msg['Subject'] = subject_title

        if Cc:
            msg['Cc'] = ', '.join(Cc)

        msg.attach(MIMEText(content, 'plain'))

        for each_file in filenamelist:
            attachment = open(each_file, 'rb')

            part = MIMEBase('application', 'octet-stream')
            part.set_payload((attachment).read())

            encoders.encode_base64(part)

            part.add_header('Content-Disposition', "attachment; filename= " + os.path.basename(each_file))

            msg.attach(part)

        with smtplib.SMTP(self.smtp_server, self.port) as server:

           server.sendmail(from_email,to_email_list, msg.as_string())

 

  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
您可以考虑使用Python的matplotlib库来动态生成图表,并使用selenium模拟浏览器操作来实现截图功能。然后,您可以使用Python的定时任务模块如APScheduler来定时执行该脚本。 关于发送邮件,您可以使用Python的smtplib和email模块来实现。具体步骤可以参考以下流程: 1. 生成图表并保存为图片格式 2. 使用selenium模拟浏览器打开图片并进行截图 3. 使用smtplib和email模块来构建邮件内容,包括收件人、主题、正文和附件等信息 4. 发送邮件并附上生成的图片作为附件 以下是一个简单的Python代码示例,可以帮助您实现这个功能: ```python import matplotlib.pyplot as plt from selenium import webdriver import smtplib from email.mime.text import MIMEText from email.mime.multipart import MIMEMultipart from email.mime.image import MIMEImage from apscheduler.schedulers.blocking import BlockingScheduler def generate_chart(): # 生成图表 x = [1, 2, 3, 4] y = [5, 6, 7, 8] plt.plot(x, y) plt.savefig('chart.png') def capture_screenshot(): # 使用selenium模拟浏览器截图 driver = webdriver.Chrome() driver.get('file:///path/to/chart.png') driver.save_screenshot('screenshot.png') driver.quit() def send_email(): # 发送邮件 msg = MIMEMultipart() msg['From'] = 'sender@example.com' msg['To'] = 'recipient@example.com' msg['Subject'] = 'Chart and Screenshot' # 邮件正文 text = MIMEText('Please see the attached chart and screenshot.') msg.attach(text) # 图片附件 with open('chart.png', 'rb') as f: chart = MIMEImage(f.read()) chart.add_header('Content-Disposition', 'attachment', filename='chart.png') msg.attach(chart) with open('screenshot.png', 'rb') as f: screenshot = MIMEImage(f.read()) screenshot.add_header('Content-Disposition', 'attachment', filename='screenshot.png') msg.attach(screenshot) # 发送邮件 smtp_server = 'smtp.example.com' smtp_port = 587 username = 'sender@example.com' password = 'password' with smtplib.SMTP(smtp_server, smtp_port) as server: server.starttls() server.login(username, password) server.sendmail(username, msg['To'], msg.as_string()) # 定时任务 scheduler = BlockingScheduler() scheduler.add_job(generate_chart, 'interval', hours=1) # 每小时生成一次图表 scheduler.add_job(capture_screenshot, 'interval', hours=1) # 每小时截图一次 scheduler.add_job(send_email, 'interval', hours=1) # 每小时发送一次邮件 scheduler.start() ``` 请注意,这只是一个简单的示例。您可以根据自己的需求进行修改和调整。同时,为了确保安全性,请不要在代码中明文存储您的邮箱密码,而应该使用环境变量或者配置文件等方式来管理密码。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

会发paper的学渣

您的鼓励和将是我前进的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值