python脚本实现定时发送邮件

# -*-encoding: utf-8 -*-
"""
@version: 3.6
@time: 2018/6/9 10:16
@author: SunnyYang
"""
import os,sys
import datetime
import smtplib
import traceback

from email.header import Header
from email.utils import parseaddr,formataddr
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.mime.base import MIMEBase
from email import encoders



# 对名字前面的中文进行处理
def _format_addr(s):
    name,addr = parseaddr(s)
    print(name)  #Python爱好者ii
    print(addr)   #Wangxyid@163.com
    return formataddr((Header(name,'utf-8').encode(),addr))

def send_email(to_str_in,file_path):
    #配置邮件的发送和接受人
    from_str = 'Wan***@163.com'   #发送邮件人的邮箱地址
    password = '******'  #邮箱的客户端授权码,不是邮箱的登录密码
    smtp_server = 'smtp.163.com' #163邮箱的服务器地址
    to_addr = to_str_in    #邮件的接收人
    to_addr = to_addr.split(',')  #多个邮件接收人用逗号分隔

    #邮件发送人和接受人信息
    msg = MIMEMultipart()
    msg['From'] = _format_addr('张雪<%s>' % from_str)
    msg['To'] = ",".join(to_addr)
    msg['Subject'] = Header('hi,zhangxue','utf-8').encode()

    #邮件的内容和附件添加
    filepath = file_path
    r = os.path.exists(filepath)
    if r is False:
        msg.attach(MIMEText('No file','plain','utf-8'))
    else:
        msg.attach(MIMEText('send with file','plain','utf-8'))
        pathdir = os.listdir(filepath)
        for alldir in pathdir:
            child = os.path.join(filepath,alldir)
            print(alldir)
            print(child)  #F:\automailtest\test.txt
            # if os.path.splitext(child)[1] == '.txt':
            # print(child.decode('gbk'))  #解决中文显示乱码的问题
#添加附件,就是加一个MIMEBase
            # mime = MIMEBase('file','txt',filename='shujutuwen')
            mime = MIMEBase('application', 'octet-stream')
#这三行是必须要加上的,否则附件的名字就会以.bin的形式存在,而不是原来文件的名字
            mime.add_header('Content-Disposition', 'attachment', filename=alldir)  #alldir是附件的名字
            mime.add_header('Content-ID', '<0>')
            mime.add_header('X-Attachment-Id', '0')

            mime.set_payload(open(child,'rb').read()) #读取附件内容
            encoders.encode_base64(mime) #编码方式
            msg.attach(mime)
    current_time = datetime.datetime.now().weekday()+1   #周一是0,周五是4
    if current_time == 5:   #设置如果是周五的话就发送邮件
        try:
            server = smtplib.SMTP(smtp_server, 25)
            server.set_debuglevel(1)  # 用于显示邮件发送的执行步骤
            server.login(from_str, password)
            server.sendmail(from_str, to_addr, msg.as_string())
            server.quit()
        except Exception as e:
            print('send failed')
            print(traceback.format_exc())

if __name__ == '__main__':
    send_email('241921448@qq.com,256889633@qq.com', 'F:\\automailtest')
   #参考  https://www.cnblogs.com/changbo/p/5372932.html
好的,下面是一个简单的加密邮件定时发送脚本: ```python import smtplib from email.mime.text import MIMEText from email.mime.multipart import MIMEMultipart from email.mime.application import MIMEApplication from cryptography.fernet import Fernet from datetime import datetime, timedelta import time # 加密密钥,可以使用 Fernet.generate_key() 生成 key = b'your_key_here' # 发件人和收件人信息 sender_email = 'sender@example.com' receiver_email = 'receiver@example.com' # 邮件主题和正文 subject = 'Test Email' body = 'This is a test email.' # 创建加密器对象 cipher = Fernet(key) # 加密邮件主题和正文 encrypted_subject = cipher.encrypt(subject.encode()).decode() encrypted_body = cipher.encrypt(body.encode()).decode() # 创建邮件对象 msg = MIMEMultipart() msg['From'] = sender_email msg['To'] = receiver_email msg['Subject'] = encrypted_subject # 添加加密正文 msg.attach(MIMEText(encrypted_body)) # 添加附件 with open('attachment.txt', 'rb') as f: attachment = MIMEApplication(f.read(), _subtype='txt') attachment.add_header('Content-Disposition', 'attachment', filename='attachment.txt') msg.attach(attachment) # 设置定时发送时间 schedule_time = datetime.now() + timedelta(minutes=10) # 进入循环,等待定时发送 while True: current_time = datetime.now() if current_time >= schedule_time: break time.sleep(60) # 发送邮件 with smtplib.SMTP('smtp.gmail.com', 587) as smtp: smtp.starttls() smtp.login(sender_email, 'your_password_here') smtp.send_message(msg) print('Email sent successfully.') ``` 说明: 1. 首先需要安装 `cryptography` 模块,可以使用 `pip install cryptography` 进行安装。 2. 在脚本中定义了加密密钥 `key`,需要自己生成并填入。 3. 定义了发件人和收件人信息。 4. 定义了邮件主题和正文,然后使用加密器对象 `cipher` 进行加密。 5. 创建邮件对象 `msg`,并添加加密正文和附件。 6. 设置定时发送时间 `schedule_time`,这里设置了当前时间的 10 分钟后。 7. 进入循环,等待定时发送,每隔一分钟检查一次时间。 8. 到了定时发送时间后,使用 SMTP 协议发送邮件。 9. 打印发送成功的提示信息。 注意:这里使用了 Gmail 的 SMTP 服务器,需要先在 Gmail 中开启“允许较不安全的应用程序访问您的帐户”选项,才能使用脚本发送邮件
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值