等待下一个秋

  • Spark
  • Flink
  • Hive
  • 数据仓库
  • ClickHouse
  • 收徒弟
  • Java
    • Spring
    • Mybatis
    • SpringBoot
    • 面试题
  • Python
    • Python基础
    • 爬虫
    • Numpy
    • matplotlib
    • Flask
  • 技术杂谈
    • Linux知识
    • Docker
    • Git教程
    • Redis教程
    • mysql
    • 前端
    • R语言
    • 机器学习
  • 关于我
  • 其它
    • 副业挣钱
    • 资料下载
    • 资料文档
专注于Hadoop/Spark/Flink/Hive/数据仓库等
关注公众号:大数据技术派,获取更多学习资料。
  1. 首页
  2. Python
  3. 正文

利用python发送email邮件

2019年4月6日 4282点热度 0人点赞 0条评论

Python发送邮件代码,Python2/3都可以直接使用。

发送普通邮件

发送文本和html普通邮件如下:

from email.header import Header
from email.mime.text import MIMEText
from email.utils import parseaddr, formataddr

import smtplib

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

def get_server(username):
    """
    通过邮箱地址获得邮箱服务器
    :param username:用户名,比如:123456@qq.com
    :return: 邮箱服务器地址,可以根据自己实际业务添加,比如:smtp.qq.com
    """
    servers = {'qq' : 'smtp.qq.com'
               , '126' : 'smtp.126.com'
               , '163' : 'smtp.163.com'
               , '139' : 'smtp.139.com'}

    for key,value in servers.items():
        if key in username:
            return value

def send_mail(username, password, to, sender_name, subject, content, email_type):
    """
    :param username: 
    :param password: 
    :param to: 接收者列表 []
    :param sender_name: 
    :param subject: 
    :param content: 
    :param email_type: 
    :return: 
    """
    from_addr = username
    password = password
    to_addr = to
    smtp_server = get_server(username)

    # 邮件正文是MIMEText类型
    msg = MIMEText('%s'%(content), '%s'%(email_type), 'utf-8')
    msg['From'] = _format_addr('%s<%s>' % (sender_name, from_addr))
    msg['To'] = _format_addr('<%s>' % to_addr)
    msg['Subject'] = Header('%s'%(subject), 'utf-8').encode()

    # 普通登陆端口是25,带ssl验证时候端口是465
    # smtp_server = 'smtp.exmail.qq.com'
    # server = smtplib.SMTP_SSL(smtp_server, 465)
    server = smtplib.SMTP(smtp_server, 25)
    server.set_debuglevel(1)
    server.login(from_addr, password)
    server.sendmail(from_addr, to_addr, msg.as_string())
    server.quit()

if __name__ == '__main__':
    """发送简单文本邮件"""
    username = '******@126.com'
    password = '******'
    sender_name = '******@126.com'
    subject = 'test 邮件'
    content = '<html><h1>ikeguang 的来信</h1></html> <a href="http://www.ikeguang.com">ikeguang.com</a></html>'
    # email_type 取值:plain,文本类型邮件;html,html类型邮件
    email_type = 'html'
    _to = ['******@126.com', '******@qq.com']
    for to in _to:
        send_mail(username, password, to, sender_name, subject, content, email_type)
        print('send mail to %s success' % to)

发送带附件的邮件

def send_mail_multipart(username, password, to, sender_name, subject, content, email_type):
    from_addr = username
    password = password
    to_addr = to
    smtp_server = get_server(username)

    msg = MIMEMultipart()
    # 邮件正文是MIMEText类型
    msg.attach(MIMEText('%s'%(content), '%s'%(email_type), 'utf-8'))
    msg['From'] = _format_addr('%s<%s>' % (sender_name, from_addr))
    msg['To'] = _format_addr('<%s>' % to_addr)
    msg['Subject'] = Header('%s'%(subject), 'utf-8').encode()

    # 读取附件
    filename = 'D:/我的文件/Codes/PyCode/source/image/0.jpg'
    with open(filename, 'rb') as f:
        # 设置附件的MIME和文件名,这里是png类型:
        mime = MIMEBase('image', 'jpg', filename='0.jpg')
        # 加上必要的头信息:
        mime.add_header('Content-Disposition', 'attachment', filename='0.jpg')
        mime.add_header('Content-ID', '<0>')
        mime.add_header('X-Attachment-Id', '0')
        # 把附件的内容读进来:
        mime.set_payload(f.read())
        # 用Base64编码:
        encoders.encode_base64(mime)
        # 添加到MIMEMultipart:
        msg.attach(mime)

    # 普通登陆端口是25,带ssl验证时候端口是465
    # smtplib.SMTP_SSL(smtp_server, 465)
    server = smtplib.SMTP(smtp_server, 25)
    server.set_debuglevel(1)
    server.login(from_addr, password)
    server.sendmail(from_addr, [to_addr], msg.as_string())
    server.quit()
标签: Python
最后更新:2022年7月19日

等待下一个秋

待我代码写成,便娶你为妻!专注于Hadoop/Spark/Flink/Hive/数据仓库等,关注公众号:大数据技术派,获取更多学习资料。

打赏 点赞
< 上一篇
下一篇 >

文章评论

取消回复

等待下一个秋

待我代码写成,便娶你为妻!专注于Hadoop/Spark/Flink/Hive/数据仓库等,关注公众号:大数据技术派,获取更多学习资料。

搜一搜
微信
最新 热点 随机
最新 热点 随机
ChatGPT可以做什么 ClickHouse 自定义分区键 ClickHouse数据副本引擎 ClickHouse ReplacingMergeTree引擎 ClickHouse MergeTree引擎 clickhouse简介
第十二章-Python3中Web开发框架flask日期时间处理 第15讲:如何排查生产环境中的反压问题 利用python发送email邮件 ClickHouse MergeTree引擎 黑客与画家 11.百年后的编程语言 在 HTTPS 承载的页面上不允许出现 http 请求
标签聚合
Python Flink 大数据 数据仓库 Hive Java 书籍 R语言 mysql 算法 挣钱 Redis
文章归档
  • 2023年2月
  • 2022年12月
  • 2022年11月
  • 2022年9月
  • 2022年7月
  • 2022年6月
  • 2022年5月
  • 2022年4月
  • 2022年3月
  • 2022年2月
  • 2022年1月
  • 2021年12月
  • 2021年11月
  • 2021年10月
  • 2021年9月
  • 2021年8月
  • 2021年6月
  • 2021年5月
  • 2021年4月
  • 2021年3月
  • 2021年2月
  • 2021年1月
  • 2020年12月
  • 2020年11月
  • 2020年10月
  • 2020年9月
  • 2020年8月
  • 2020年7月
  • 2020年5月
  • 2020年4月
  • 2020年1月
  • 2019年9月
  • 2019年8月
  • 2019年7月
  • 2019年6月
  • 2019年5月
  • 2019年4月
  • 2019年3月
  • 2019年1月
  • 2018年12月
  • 2017年5月

©2022 ikeguang.com. 保留所有权利。

鄂ICP备2020019097号-1

鄂公网安备 42032202000160号