zoukankan      html  css  js  c++  java
  • Python 实现邮件发送功能(初级)

      在我们日常项目中,会经常使用到邮件的发送功能,如何利用Python发送邮件也是一项必备的技能。本文主要讲述利用Python来发送邮件的一些基本操作。

      本章主要包含知识点:

    1. 邮件发送原理简述即常用smtp邮箱服务器
    2. 发送文字邮件
    3. 发送html邮件

      我们一般发送邮件时,用到的代理有outlook,qq邮箱等,不管用什么代理,你都需要登录你的邮箱,而这个邮箱就是在各大邮箱服务器上开辟的一部分空间,用来接收、发送和存储你的邮件信息。

      说到邮件发送,不得不了解一下SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,是一种提供可靠且有效电子邮件传输的协议。邮件发送原理简单讲就是代理通过SMTP协议将信息发送到邮箱服务器上,邮箱服务器再通过POP3协议转发到收件人的邮件服务器中,如下图:

      

      因此使用Python发送邮件时,可以将Python的解释器当做一个代理,需要首先连接到邮箱服务器,将邮件发过去,那么由于不同公司的邮箱服务器地址不尽相同,这里列出了一些常用的地址如下:

       

        既然已经知道邮件发送原理,接下来就是用Python连接smtp服务器,不就可发送邮件了。其实强大的python早就封装好了一个package:email, 利用其中的几个类即可实现,具体代码如下:  

     1 from email.mime.text import MIMEText
     2 from email.header import Header
     3 from email.mime.multipart import MIMEMultipart
     4 import smtplib
     5 
     6 
     7 class Email(object):
     8 
     9     def __init__(self):
    10         self.smtp = ''
    11         self.username = ''
    12         self.password = ''
    13         
    14         self.subject = ''
    15         self.sender = ''
    16         self.receiver = []
    17         self.cc = []
    18 
    19         
    20     def message_init(self, html):
    21         message = MIMEMultipart()
    22         message['subject'] = Header(self.subject, 'utf-8')
    23         message['From'] = self.sender
    24         message['To'] = ', '.join(self.receiver)
    25         message['Cc'] = ', '.join(self.cc)
    26 
    27         # 解决乱码, html是html格式的str
    28         message_context = MIMEText(html, _subtype='html', _charset='utf-8')
    29 
    30         # 邮件正文内容
    31         message.attach(message_context)
    32 
    33         return message

      Email自定义类中属性包含了邮箱服务器的地址,邮箱登录的用户名和密码,邮件主题,发件人,收件人和抄送人。这里注意了,收件人和抄送人是个list,添加的时候使用append()

      message_init(self, html)即将发送内容进行初始化,包括邮件发送和收件人的初始化。其中 MIMEText(html, _subtype='html', _charset='utf-8') 中,参数一为发送的邮件内容,为字符串;参数二表示设置文本格式为html(邮件都是使用html格式发送的);参数三表示设置编码格式为utf-8。如上这样一个邮件信息包就构造好了,万事俱备只欠东风,发送邮件的核心代码如下:

    1 def send_email(self, html):
    2     message = self.message_init(html)
    3     smtp_obj = smtplib.SMTP(self.smtp)
    4   smtp_obj.login(self.username, self.password)
    5     smtp_obj.sendmail(self.sender, self.receiver + self.cc, message.as_string())
    6     smtp_obj.quit()

      模拟正常客户端邮件发送,遵循登录->发送->退出原则, 这里注意sendmail的第二个参数为 收件人和抄送人的合集。

      下面来测试一下这个代码是否可行,发送一段简单的文字:  

     1 if __name__ == '__main__':
     2     print('start……')
     3     sende = Email()
     4     strs = "This is a test email / 这是一封测试邮件"
     5 
     6     sende.smtp = 'smtp.163.com'
     7     sende.username = 'wjian.coming@163.com'
     8     sende.password = 'xxxxxx'
     9 
    10     sende.subject = 'Test/测试邮件'
    11     sende.sender = 'wjian.coming@163.com'
    12     sende.receiver.append('948001879@qq.com')
    13     sende.cc.append('948001879@qq.com')
    14 
    15   sende.send_email(strs)
    16 
    17     print('end')

      如上,测试了发送中文和英文两种语言,发送了测试的简单字符串,实测结果可行,截图如下

     

      那么如何发送html格式文件呢?其实想想也很简单,将html文件全部读取出来之后,转为str即可,如何转换,可以参考我之前写的文章,读取文件生成str,参考链接:https://www.cnblogs.com/potato-find/p/13216471.html 使用 readFile 方法即可,然后复用上述的方法。具体的代码就不在这里体现了,有兴趣的同学可以结合实现一下呢。

      

      那么,利用Python如何发送邮件已经都了解了吧,那么这时就会引发更深的问题:如何添加附件?如何发送图片呢? Good question! 关注我,下期为你解答。

      (希望我的文章能够助你一臂之力,成就更辉煌的你,关注我,我们一起进步)

     

     

  • 相关阅读:
    41、XAML text editing
    使用JavaScript和DOM动态创建和修改表格(转)
    ThinkPHP入门
    PHP字符串
    sicily 6773. 用指针交换两个矩阵
    sicily 6572. partial sum
    sicily 1934. 移动小球
    sicily 1323. Switch text
    sicily 6766. tmp
    sicily 1293. 3n+1数链问题
  • 原文地址:https://www.cnblogs.com/potato-find/p/13290419.html
Copyright © 2011-2022 走看看