python发送邮件的几种常用方法

这篇具有很好参考价值的文章主要介绍了python发送邮件的几种常用方法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

第一种是最常见的,smtp发送

import smtplib
import sys
import traceback
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
import os


def sendEmail(mail_sender, to_list, sub, content, attach_list = [], _subtype="html"):
    """
    使用smtp发送邮件
    :param mail_sender: 发件人
    :param to_list: 收件人列表,用,间隔
    :param sub: 主题
    :param content: 内容
    :param attach_list:附件
    :param _subtype: 读取内容用的方式,不传html的话改成plain
    :return:
    """
    msg = MIMEMultipart()
    msg['subject'] = sub
    msg['From'] = mail_sender
    msg['To'] = to_list
    try:
        msg.attach(MIMEText(content, _subtype,'utf-8')) #用html的方法是更方便于word文档作为内容发送,可以先讲word转换成html,然后写入其中
        s = smtplib.SMTP('123.com', 25)
        # s.login()
        s.starttls()
        if attach_list:
            for att_path in attach_list:
                path_arr = att_path.split(os.path.sep)
                file_name = path_arr[len(path_arr) - 1]
                att1 = MIMEText(open(att_path,'rb').read(), 'base64','utf-8')
                att1.add_header('Content-Disposition', 'attachment', filename=file_name) #用这个方法可以避免附件乱码
                msg.attach(att1)
        s.sendmail(mail_sender, to_list.split(u','), msg.as_string())
        s.close()
        print("999921||业务数据处理||邮件发送成功")
        return True
    except Exception as e:
        sys.stderr.write("999931||{}".format(traceback.format_exc(limit=None, chain=True)))
        sys.stderr.write("0001")
        return False

第二种是用outlook发送的,这个大家借鉴使用

import os
from time import sleep
import autoit as au
import win32com.client

class OutlookUtills:
    def __init__(self):

        outlook = win32com.client.Dispatch("outlook.Application ")# outlook.Visible = True
        self.mail = outlook.CreateItem(0)
        self.mail.Display()

    def sendEmail(self, addressee, subiect, AttachmentsPath=[], body=None):
        """
        若body为默认值None则自动粘贴剪切板中内容进行发送
        :param addressee: 收件人
        :param subiect: 主题
        :param AttachmentsPath: 附件名称
        :param body: 正文
        :return:
        """
        self.mail. To = addressee
        self.mail.subject = subiect
        if AttachmentsPath == []:
            print("该邮件无附件")
        else:
            for Attachments in AttachmentsPath:
                self.mail.Attachments.Add(Attachments)
                print("地址:{},附件添加成功!!")
        sleep(2)
        if body == None:
            self.mail.body = ""
            au.send('^v')
            print("正文已从剪切板拷贝")
        else:
            self.mail.body = body
            print("正文由函数进行输入")
        sleep(1)
        self.mail.Send()

if __name__ == '__main__':
    my_outlook = OutlookUtills()


第三种是正文需要用到表格的,我在这里给大家一个示例,具体表格怎么改自行发挥文章来源地址https://www.toymoban.com/news/detail-601037.html

import smtplib
from email.mime.text import MIMEText
from email.header import Header


class Mail:
    def __init__(self):
        # 第三方 SMTP 服务

        self.mail_host = "smtp.qq.com"  # 填写邮箱服务器:这个是qq邮箱服务器,直接使用smtp.qq.com
        self.mail_pass = "ahlwsnkajalubeif"  # 填写在qq邮箱设置中获取的授权码
        self.sender = '1004983289@qq.com'  # 填写邮箱地址
        self.receivers = ['tianyi.zhang@kingstarfintech.com']  # 填写收件人的邮箱,QQ邮箱或者其他邮箱,可多个,中间用,隔开

    def send(self):

        self.mail_host = "smtp.qq.com"  # 填写邮箱服务器:这个是qq邮箱服务器,直接使用smtp.qq.com
        self.mail_pass = "ahlwsnkajalubeif"  # 填写在qq邮箱设置中获取的授权码
        self.sender = '1004983289@qq.com'  # 填写邮箱地址
        self.receivers = ['tianyi.zhang@kingstarfintech.com']  # 填写收件人的邮箱,QQ邮箱或者其他邮箱,可多个,中间用,隔开
        insert = "<tr><td>152371200010240002</td><td>潘金莲</td><td>tar</td><td>152371200010240002.tar</td><td>20220426-1545</td><td>否</td></tr><tr><td>152371200010240002</td><td>潘金莲</td><td>tar</td><td>152371200010240002.tar</td><td>20220426-1545</td><td>否</td></tr>"

        head = \
            """
            <head>
                <meta charset="utf-8">
                <STYLE TYPE="text/css" MEDIA=screen>
                    table {
                        border-collapse: collapse;
                        border: 2px solid #a19da2;
                        /*居中显示整个表格*/
                        margin: auto;
                    }
                    table thead {
                        border: 2px solid #91c6e1;
                        background: #f1f1f1;
                        padding: 10px 10px 10px 10px;
                        color: #333333;
                    }
                    table tbody {
                        border: 2px solid #91c6e1;
                        padding: 10px 10px 10px 10px;
                    }
                    table tr {
                    }
                    table th {
                        vertical-align: top;
                        font-size: 14px;
                        padding: 10px 10px 10px 10px;
                        color: #105de3;
                        font-family: arial;
                        text-align: center;
                    }
                    table td {
                        text-align: center;
                        padding: 10px 10px 10px 10px;
                    }
                    body {
                        font-family: 宋体;
                    }
                    h1 {
                        color: #5db446
                    }
                    div.header h2 {
                        color: #0002e3;
                        font-family: 黑体;
                    }
                    div.content h2 {
                        text-align: center;
                        font-size: 28px;
                        text-shadow: 2px 2px 1px #de4040;
                        color: #fff;
                        font-weight: bold;
                        background-color: #008eb7;
                        line-height: 1.5;
                        margin: 20px 0;
                        box-shadow: 10px 10px 5px #888888;
                        border-radius: 5px;
                    }
                    h3 {
                        font-size: 22px;
                        background-color: rgba(0, 2, 227, 0.71);
                        text-shadow: 2px 2px 1px #de4040;
                        color: rgba(239, 241, 234, 0.99);
                        line-height: 1.5;
                    }
                    h4 {
                        color: #e10092;
                        font-family: 楷体;
                        font-size: 20px;
                        text-align: center;
                    }
                    td img {
                        /*width: 60px;*/
                        max-width: 300px;
                        max-height: 300px;
                    }
                </STYLE>
            </head>
            """
        body = \
            """
            <body>
            <div align="center" class="header">
                <!--标题部分的信息-->
                <h1 align="center">表格中的数据为当天云开户信息下载及CRM上传情况</h1>
            </div>
            <hr>
            <div class="content">
                <!--正文内容-->
                <h2> </h2>
                <div>
                    <h4></h4>
                    <table border="1" cellpadding="0" cellspacing="0" width="1600" style="border-collapse: collapse;">
                        <tbody>
                            <thead>
                                <tr><th>身份证号</th><th>姓名</th><th>文件类型</th><th>文件名</th><th>上传时间</th><th>是否上传成功</th></tr>
                            </thead>
                            <h2>掌厅不存在身份证不一致情况</h2>
                        </tbody>
                    </table>
                </div>
                <hr>
                <p style="text-align: center">
                </p>
            </div>
            </body>
            """.format(insert)

        html_msg = "<html>" + head + body + "</html>"
        html_msg = html_msg.replace('\n', '').encode("utf-8")
        message = MIMEText(html_msg, 'html', 'utf-8')

        message['From'] = Header("小胖子xpp", 'utf-8')  #邮件发送者姓名
        message['To'] = Header("小胖子xpp", 'utf-8')    #邮件接收者姓名

        subject = '测试'  #发送的主题
        message['Subject'] = Header(subject, 'utf-8')
        try:
            smtpObj = smtplib.SMTP_SSL(self.mail_host, 465) #建立smtp连接,qq邮箱必须用ssl边接,因此边接465端口
            smtpObj.login(self.sender, self.mail_pass)  #登陆
            smtpObj.sendmail(self.sender, self.receivers, message.as_string())  #发送
            smtpObj.quit()
            print('发送成功!!')
        except smtplib.SMTPException as e:
            print('发送失败!!')


if __name__ == '__main__':
    mail = Mail()
    mail.send()

到了这里,关于python发送邮件的几种常用方法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Windows的几种常用反弹shell方法

    简介:shell类似于DOS下的COMMAND.COM和后来的cmd.exe,它接收用户命令,然后调用相应的应用程序,也可以通俗的说是命令执行环境。分为交互式shell,与非交互式shell。 交互shell就是shell等待你的输入,并且立即执行你提交的命令,这种模式被称作交互式是因为shell与用户进行交互

    2024年02月12日
    浏览(27)
  • mysql复制表的几种常用方法

    遇到需要拷贝一个表及其数据的情况,总结了一下几种方法 1.使用 show create table 旧表 将结果拷贝出来,将旧表名换成新表名即可. 注意:该方法仅适用于拷贝表结构,不需要同步数据的情况 2.create table 新表 like 旧表 该语句将完全拷贝旧表结构, 如果需要同步数据,只需执行 insert…

    2024年01月16日
    浏览(36)
  • vue跳转页面的几种常用方法

    目录 vue跳转不同页面的方法 1.router-link跳转 2.this.$router.push() 3.a标签可以跳转外部链接,不能路由跳转 vue三种不同方式实现跳转页面 Vue:router-link this.$router.push(\\\"/\\\") this.$router.go(1) 代码示例: !-- 直接跳转 -- router-link to=\\\'/testC\\\'  button点击跳转2/button /router-link   !-- 带参数跳转

    2024年02月11日
    浏览(34)
  • Jmeter —— 常用的几种断言方法(基本用法)

    在使用JMeter进行性能测试或者接口自动化测试工作中,经常会用到的一个功能,就是断言,断言相当于检查点,它是用来判断系统返回的响应结果是否正确,以此帮我们判断测试是否通过,本文 主要介绍几种常用的断言:响应断言、JSON断言、BeanShell 断言 1. 响应断言是最常用

    2024年02月08日
    浏览(30)
  • java发送http请求的几种方式,调用第三方接口的方法:HttpUtil、HttpURLConnection等

    参考:https://blog.csdn.net/yubin1285570923/article/details/126225347 put请求 post带请求头 get、delete类似… 使用JDK原生提供的net,无需其他jar包,代码如下: 需要用到commons-httpclient-3.1.jar,maven依赖如下: 看一下我实际应用的例子 需要用到httpclient-4.5.6.jar,maven依赖如下: RestTemplate 是由

    2024年01月18日
    浏览(39)
  • Python进程间通信常用的几种方式

    1. 队列(Queue) 多个进程使用队列进行数据交换。进程通过队列发送和接收对象。 队列是一个可以存储任意类型数据的数据结构,而且支持多线程操作,因此在Python的多进程编程中,可以利用队列来实现进程间通信。 下面是一个简单的利用队列实现进程间通信的示例代码: 在

    2024年03月26日
    浏览(43)
  • c语言-阶乘求和的几种方法

    阶乘求和的几种方法 目录 一、阶乘定义 二、阶乘求和 1.两层for循环嵌套使用 2.一层for循环直接实现 3.函数的递归调用来求阶乘 总结 任何大于等于1 的自然数n 阶乘表示方法: n!=n*(n-1)*(n-2)······3*2*1 代码如下(示例): 重点: 每一次都得让ret重置为1的原因: 每一个数字

    2024年02月07日
    浏览(31)
  • C语言的几种缺陷及其规避方法

    一、C语言的几种缺陷 C语言作为一种老牌编程语言,在其诞生时代的背景下是十分先进的,为编程领域的发展做出了重要贡献。但是,随着计算机体系结构、软硬件环境的不断演进,C语言所存在的一些缺点也逐渐凸显出来。以下是C语言的一些缺陷: 容易出现指针错误:C语言

    2024年02月09日
    浏览(29)
  • C语言中判断素数的几种方法

    作为C的初学者们希望大家看看这几种判断素数的方法 既然进来了就看完把 题目要求: 判断n是否为素数。 首先我们讲一下素数的判定:素数就是只能被1或者本身整除的数,这就延伸出了几种不同的判定方法。 方法一:因为判断素数相当于就是判断这个数能不能整除2-这个数

    2024年02月11日
    浏览(33)
  • Jenkins的几种安装方式以及邮件配置

    目录 Jenkins介绍 Jenkins下载、安装 一、通过war包安装 二、通过docker安装 jenkins 容器中添加 git, maven 等组件 jenkins 容器中的公钥私钥 在 jenkins 容器中调用 docker 简单的方式启动 Docker server REST API 一个 jenkins 示例 三、通过Homebrew安装 访问Jenkins、Jenkins配置 Jenkins配置邮件发送 Jen

    2024年02月16日
    浏览(25)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包