当前位置 博文首页 > lalala_py:自己写代码实现邮件发送,再也不用可视化那么麻烦了

    lalala_py:自己写代码实现邮件发送,再也不用可视化那么麻烦了

    作者:lalala_py 时间:2021-02-16 00:29

    原文地址:https://www.keketec.club/posts/a6c96c4e/

    学而知不足,长按关注,精彩不错过

    Python自动批量发送邮件是一种什么体验?

    前言

    很多时候,我们在发送一些邮件信息的时候,在可视化的界面巴拉巴拉操作一顿,其实就是一些很简单的信息,然后可能发送的收信者比较多,带来很多的麻烦,主要是浪费了我们的时间!

    准备工作

    很重要重要重要的准备工作,带你进入代码发送邮件的氛围!

    看着前面小哥哥把每个订单号都粘贴到邮件里,然后再给一个收件人的联系邮箱,如此熟练的操作,整整做了一个上午,因为需要给每个收件人单独发送,我心里有种说不出来的感觉 ...

    这就像刚刚工作那会儿看着旁边跟我一样的实习生在重复插入sql一样,他居然不知道列编辑,然而要一行一行一个字一个字的敲进去一样的感受。

    如果有不知道的同学也可以私信我,几分钟的事情可能对于不知道这个技巧的同学需要几个小时才能完成

    进行正题!!!!!

    自动化发邮件之前,首先需要用到的两个重要的 Python 模块:smtplib 和 email

    smtplib模块主要用来建立服务器链接、服务器断开的工作;

    email模块主要负责邮件的构建,比如收件人、邮件标题、邮件内容等

    我用的是python2.7版本,所以安装这两个库:

    pip2.7 install secure-smtplib
    pip2.7 install email
    

    安装准备好需要的包,下面就开始发送邮件的操作,实例化操作

    # 实例化SMTP
    smtp = smtplib.SMTP()
    # 链接邮件服务器
    smtp.connect(smtp_addr)
    # 配置发送邮箱的用户名和密码
    smtp.login(login_user, login_passwd)
    

    MIMEText 类是 MIMENonMultipart 类的子类,一般用于用于封装文本类型的邮件

    实例化邮件服务器信息,可以进行相应的配置,邮件的标题、邮件的收发邮件信息、当然还可以进行抄送

    # 邮件正文
    words = "First Message"
    # 配置发送内容msg
    msg = MIMEText(words, 'plain', 'utf-8')
    # 邮件标题
    msg['Subject'] = Header("MyTestTitle",'utf-8')
    # 发信人地址
    msg['from'] = sender
    # 收信人地址(支持群发)
    msg['to'] = ';'.join([receiver])
    # 抄送人地址(支持群发)
    msg['Cc'] = ';'.join([receiver])
    

    在完成了以上的操作之后,然后配置自己的信息就可以进行操作发送了。

    当然在我给到的代码中,都是以变量给出的,首先咱们需要初始化

    # 发送者邮箱(改为自己的)
    sender = "xxx@163.com"
    # 接受者邮箱(改为自己的)
    receiver = "xxx@qq.com"
    # 服务器地址
    smtp_addr = "smtp.163.com"
    # 邮件服务器账号和密码,自己的163邮箱的登录账号和密码
    login_user = "xxx@163.com"
    login_passwd = "xxx"
    

    最后,关键一步,可以发送了,但是记得要关闭连接哦!

    参数格式:sendmail(self, from_addr, to_addrs, msg, mail_options=[], rcpt_options=[])

    # 发送邮件
    smtp.sendmail(sender, receiver, msg.as_string())
    smtp.quit()
    print("邮件发送成功 ^_^ ")
    

    哈哈,看看我的界面,已经收到了哈!

    跟着试了的同学以及攻城狮们,成功了没有

    需要我发送代码的,给我留言哈,可以公号后台私信我吆!!

    也可以自取哈!地址: https://pan.baidu.com/s/1At5rsu59QZ0BLQ6ETpPEvw 密码: s8ew

    发送其他格式的邮件

    上述展示了普通格式的邮件发送格式,下面咱们再看看想要发送一些HTML格式的,还有带附件的邮件形式。

    再然后就可以自行发挥发送任何格式和组合的邮件了!

    1. 发送 HTML 格式的邮件

    在创建 MIMEText 时,将 _subtype 设置为 “html”,则可发送 html 格式的邮件

    其他步骤和发送纯文本邮件配置和代码格式都一致

    跟上面文本格式邮件对比下哈,会有很清晰的思路:

    # 普通文本格式
    msg = MIMEText(words, 'plain', 'utf-8')
    # html 格式
    msg = MIMEText(words, 'plain', 'utf-8')
    

    贴出详细代码

    # 邮件正文
    words = """
    <html>
        <head>
            <meta charset="UTF-8">
        </head>
        <body>
    	<table border="1">
    	    <tr>
    	        <th>Python</th>
    	        <th>编程爱好者</th>
    	    </tr>
    	    <tr>
    	        <td>需要代码的同学</td>
    	        <td>加我微信</td>
    	    </tr>
    	    <tr>
    	        <td>Johngo106X</td>
    	        <td>双手奉上!</td>
    	    </tr>
    	</table>
        </body>
    </html>
    """
    # 配置发送内容msg
    msg = MIMEText(words, 'html', 'utf-8')
    # 邮件标题
    msg['Subject'] = Header("测试发送HTML信息",'utf-8')
    # 发信人地址
    msg['from'] = sender
    # 收信人地址(支持群发)
    msg['to'] = ';'.join([receiver])
    # 抄送人地址(支持群发)
    msg['Cc'] = ';'.join([receiver])
    
    # 实例化SMTP
    smtp = smtplib.SMTP()
    # 链接邮件服务器
    smtp.connect(smtp_addr)
    # 配置发送邮箱的用户名和密码
    smtp.login(login_user, login_passwd)
    # 发送邮件
    smtp.sendmail(sender, receiver, msg.as_string())
    smtp.quit()
    print("邮件发送成功!")
    

    一些自定义的变量可以自己设置哈,全量代码可以在网盘中自取!!!

    哈, 再看看 Johngo 的结果:

    下面再看看重要的附件,是怎么操作的

    2. 发送带有附件的邮件

    类似的操作方法,不同的操作是实例化发送信息的这块稍有区别

    # 配置发送内容msg
    msg = MIMEMultipart()
    

    同样的我先把代码附上,需要详细代码的请自取

    # 邮件正文
    words = """
    <html>
        <head>
            <meta charset="UTF-8">
        </head>
        <body>
    	<table border="1">
    	    <tr>
    	        <th>Python</th>
    	        <th>编程爱好者</th>
    	    </tr>
    	    <tr>
    	        <td>需要代码的同学</td>
    	        <td>加我微信</td>
    	    </tr>
    	    <tr>
    	        <td>Johngo106X</td>
    	        <td>双手奉上!</td>
    	    </tr>
    	    <tr>
    	        <td>原文链接</td>
    	        <td>xxx</td>
    	    </tr>
    	</table>
        </body>
    </html>
    """
    # 配置发送内容msg
    msg = MIMEMultipart()
    # 邮件正文
    msg.attach(payload=MIMEText(words, _subtype="html", _charset="utf-8"))
    # 邮件标题
    msg['Subject'] = Header("附件邮件发送测试",'utf-8')
    # 发信人地址
    msg['from'] = sender
    # 收信人地址(支持群发)
    msg['to'] = ';'.join([receiver])
    # 抄送人地址(支持群发)
    msg['Cc'] = ';'.join([receiver])
    
    
    for file_path in {"test1.xlsx", "test2.xlsx"}:
    	attachment = MIMEText(_text=open(file_path, "rb").read(), _subtype="base64", _charset="utf-8")
    	attachment["Content-Type"] = "application/octet-stream"
    	attachment["Content-Disposition"] = "attachment; filename=%s" % file_path
    	msg.attach(payload=attachment)
    
    
    # 实例化SMTP
    smtp = smtplib.SMTP()
    # 链接邮件服务器
    smtp.connect(smtp_addr)
    # 配置发送邮箱的用户名和密码
    smtp.login(login_user, login_passwd)
    # 发送邮件
    smtp.sendmail(sender, receiver, msg.as_string())
    smtp.quit()
    print("邮件发送成功!")
    

    同样的,咱们看看附件过来了没有

    End

    比较简单的几行代码,在某些时候就可以将事情事半功倍,适用于定时发邮件、快速自定义的发送相同文件内容的场景

    代码先放到网盘,就暂且不往github上传了,地址链接: https://pan.baidu.com/s/1At5rsu59QZ0BLQ6ETpPEvw 密码: s8ew,自取哈!!

    另外,我给到的是最基本的 Python 自定义发送邮件的操作,拿到手的同学和攻城狮们可以进行再次封装,更加好用一些。同时也可以分享出来

    好了,今天就是有关自定义发送邮件小工具的全部分享内容了,如果感觉对你有些许帮助,还请轻轻点击转发,让更多的人看到,对 Johngo 来说,有莫大的帮助!

    文中有任何错误的地方,烦请不吝赐教。非常感谢!

    bk