python脚本实现发送邮件功能

#!/usr/bin/env python

# coding=utf-8


import os
from email import encoders
from email.header import Header
from email.mime.base import MIMEBase
from email.mime.multipart import MIMEMultipart
from email.mime.message import MIMEMessage
from email.mime.text import MIMEText
from email.mime.image import MIMEImage
from email.utils import parseaddr, formataddr, formatdate
import smtplib


def _format_addr(s):
    name, addr = parseaddr(s)
    return formataddr(
        (Header(name, 'utf-8').encode(),
         addr.encode('utf-8') if isinstance(addr, unicode) else addr)
    )


def send_mail(smtp_server, from_addr, passwd, to_addr, subject, text='Hello, send by Python...', files=[]):
    ## --------------------------------------------------------------------------------------
    # assert type(to_addr) == list
    # assert type(files) == list
    assert isinstance(to_addr, list)
    assert isinstance(files, list)


    ## --------------------------------------------------------------------------------------
    '''plain or html'''
    msg = MIMEText(text, 'plain', 'utf-8')
    # msg = MIMEText('<html><body>'+'<h1>'+text+'</h1>'+'</body></html>', 'html', 'utf-8')
    ## --------------------------------------------------------------------------------------
    '''plain and html'''
    # msg = MIMEMultipart('alternative')
    # msg.attach(MIMEText(text, 'plain', 'utf-8'))
    # msg.attach(MIMEText('<html><body>'+'<h1>'+text+'</h1>'+'</body></html>', 'html', 'utf-8')) # 附件不嵌入正文
    # # msg.attach(MIMEText('<html><body>'+'<h1>'+text+'</h1>'+'<p><img src="cid:0"></p>'+'</body></html>', 'html', 'utf-8')) # 附件嵌入正文
    # for file in files:
    #     part = MIMEBase('application', 'octet-stream') # 'octet-stream': binary data
    #     part.set_payload(open(file, 'rb').read())
    #     encoders.encode_base64(part) # 用Base64编码
    #     part.add_header('Content-Disposition', 'attachment; filename="%s"' % os.path.basename(file))
    #     part.add_header('Content-ID', '<0>')
    #     part.add_header('X-Attachment-Id', '0')
    #     msg.attach(part) # 添加到MIMEMultipart


    msg['From'] = _format_addr('Me <%s>' % from_addr)
    msg['To'] = _format_addr('You <%s>' % ','.join(to_addr))
    msg['Subject'] = Header(subject, 'utf-8').encode()
    msg['Date'] = formatdate(localtime=True)


    ## --------------------------------------------------------------------------------------
    ## 基于SSL安全连接,Gmail提供的SMTP服务必须要加密传输
    server = smtplib.SMTP(smtp_server, 25) # SMTP协议默认端口是25
    # server.starttls() # 创建安全连接,对于'smtp.gmail.com',端口587
    server.set_debuglevel(1) # 打印信息
    server.login(from_addr, passwd)
    server.sendmail(from_addr, to_addr, msg.as_string())
    server.quit()


if __name__ == '__main__':
    smtp_server = 'smtp.163.com'
    from_addr = '×××××@163.com'       #从该邮箱发出邮件
    passwd = '××××××'                     #该密码不是你用客户端登陆邮箱时所用的密码,而是设置开启smpt时设置的密码
    to_addr = ['××××××@qq.com']        #该邮箱为接收邮件的邮箱
    subject = 'Hello...'    #邮件主题名字
    #with open('names.txt','r') as fp:
    #    text=fp.read()                        #我这里是把一个名字为names.txt的文件内容读出来作为邮件内容
    text = "Hello, I'm dc,send by Python..."
    files = []

    send_mail(smtp_server, from_addr, passwd, to_addr, subject, text, files)


把以上程序中发送邮箱、密码、接受邮箱改为自己的(记住一定要进入自己邮箱开启smtp服务),改好后把程序复制到一个.py文件中直接执行python 文件名即可。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要现定时运行 Python 脚本发送邮件,可以使用 Python 的第三方库 schedule 和 smtplib。 首先,安装这两个库: ```python pip install schedule ``` ```python pip install secure-smtplib ``` 接下来,编写 Python 脚本实现定时发送邮件功能: ```python import schedule import time import smtplib from email.mime.text import MIMEText from email.header import Header # 定义发送邮件的函数 def send_email(): # 邮件内容 mail_content = '这是一封测试邮件' # 发送方信息 sender = '发送方邮箱' password = '发送方邮箱密码' # 接收方信息 receivers = ['接收方邮箱'] # 邮件标题和内容 message = MIMEText(mail_content, 'plain', 'utf-8') message['From'] = Header(sender) message['To'] = Header(','.join(receivers)) message['Subject'] = Header('测试邮件') # 发送邮件 try: smtp_obj = smtplib.SMTP_SSL('smtp.qq.com', 465) smtp_obj.login(sender, password) smtp_obj.sendmail(sender, receivers, message.as_string()) print('邮件发送成功') except smtplib.SMTPException as e: print('邮件发送失败', e) # 定义定时任务 def job(): print('开始发送邮件...') send_email() # 设置定时任务,每隔一定时间执行一次 schedule.every(10).minutes.do(job) # 每隔10分钟执行一次 # schedule.every().hour.do(job) # 每小时执行一次 # schedule.every().day.at('10:30').do(job) # 每天10:30执行一次 # 循环执行定时任务 while True: schedule.run_pending() time.sleep(1) ``` 在上述代码中,`send_email()` 函数定义了如何发送邮件,而 `job()` 函数则定义了定时任务的具体内容。在这里,我们将每隔10分钟执行一次 `job()` 函数,可以根据自己的需要设置定时任务的时间间隔。 最后,在命令行中运行该 Python 脚本即可。注意,为了保证邮件能够正常发送,需要在发送方邮箱的设置中开启 SMTP 服务,并且在代码中填写正确的发送方邮箱和密码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值