Python 实现邮件发送功能(初级)
在我们日常项目中,会经常使用到邮件的发送功能,如何利用Python发送邮件也是一项必备的技能。本文主要讲述利用Python来发送邮件的一些基本操作。
本章主要包含知识点:
- 邮件发送原理简述即常用smtp邮箱服务器
- 发送文字邮件
- 发送html邮件
我们一般发送邮件时,用到的代理有outlook,qq邮箱等,不管用什么代理,你都需要登录你的邮箱,而这个邮箱就是在各大邮箱服务器上开辟的一部分空间,用来接收、发送和存储你的邮件信息。
说到邮件发送,不得不了解一下SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,是一种提供可靠且有效电子邮件传输的协议。邮件发送原理简单讲就是代理通过SMTP协议将信息发送到邮箱服务器上,邮箱服务器再通过POP3协议转发到收件人的邮件服务器中,如下图:
因此使用Python发送邮件时,可以将Python的解释器当做一个代理,需要首先连接到邮箱服务器,将邮件发过去,那么由于不同公司的邮箱服务器地址不尽相同,这里列出了一些常用的地址如下:
既然已经知道邮件发送原理,接下来就是用Python连接smtp服务器,不就可发送邮件了。其实强大的python早就封装好了一个package:email, 利用其中的几个类即可实现,具体代码如下:
from email.mime.text import MIMEText
from email.header import Header
from email.mime.multipart import MIMEMultipart
import smtplib class Email(object): def __init__(self):
self.smtp = ''
self.username = ''
self.password = '' self.subject = ''
self.sender = ''
self.receiver = []
self.cc = [] def message_init(self, html):
message = MIMEMultipart()
message['subject'] = Header(self.subject, 'utf-8')
message['From'] = self.sender
message['To'] = ', '.join(self.receiver)
message['Cc'] = ', '.join(self.cc) # 解决乱码, html是html格式的str
message_context = MIMEText(html, _subtype='html', _charset='utf-8') # 邮件正文内容
message.attach(message_context) return message
Email自定义类中属性包含了邮箱服务器的地址,邮箱登录的用户名和密码,邮件主题,发件人,收件人和抄送人。这里注意了,收件人和抄送人是个list,添加的时候使用append()
message_init(self, html)即将发送内容进行初始化,包括邮件发送和收件人的初始化。其中 MIMEText(html, _subtype='html', _charset='utf-8') 中,参数一为发送的邮件内容,为字符串;参数二表示设置文本格式为html(邮件都是使用html格式发送的);参数三表示设置编码格式为utf-8。如上这样一个邮件信息包就构造好了,万事俱备只欠东风,发送邮件的核心代码如下:
def send_email(self, html):
message = self.message_init(html)
smtp_obj = smtplib.SMTP(self.smtp)
smtp_obj.login(self.username, self.password)
smtp_obj.sendmail(self.sender, self.receiver + self.cc, message.as_string())
smtp_obj.quit()
模拟正常客户端邮件发送,遵循登录->发送->退出原则, 这里注意sendmail的第二个参数为 收件人和抄送人的合集。
下面来测试一下这个代码是否可行,发送一段简单的文字:
if __name__ == '__main__':
print('start……')
sende = Email()
strs = "This is a test email / 这是一封测试邮件" sende.smtp = 'smtp.163.com'
sende.username = 'wjian.coming@163.com'
sende.password = 'xxxxxx' sende.subject = 'Test/测试邮件'
sende.sender = 'wjian.coming@163.com'
sende.receiver.append('948001879@qq.com')
sende.cc.append('948001879@qq.com') sende.send_email(strs) print('end')
如上,测试了发送中文和英文两种语言,发送了测试的简单字符串,实测结果可行,截图如下
那么如何发送html格式文件呢?其实想想也很简单,将html文件全部读取出来之后,转为str即可,如何转换,可以参考我之前写的文章,读取文件生成str,参考链接:https://www.cnblogs.com/potato-find/p/13216471.html 使用 readFile 方法即可,然后复用上述的方法。具体的代码就不在这里体现了,有兴趣的同学可以结合实现一下呢。
那么,利用Python如何发送邮件已经都了解了吧,那么这时就会引发更深的问题:如何添加附件?如何发送图片呢? Good question! 关注我,下期为你解答。
(希望我的文章能够助你一臂之力,成就更辉煌的你,关注我,我们一起进步)
Python 实现邮件发送功能(初级)的更多相关文章
- Python 实现邮件发送功能(进阶)
上篇文章已经介绍了利用Python发送文本消息的用法,也在文末遗留了如何发送图片和附件的问题,本章主要来回答这两个问题. 本章主要包含知识点: 1. 如何将图片放到邮件主体中发送 2. 如何发送附 ...
- Python 基于Python实现邮件发送
基于Python实现邮件发送 by:授客 QQ:1033553122 测试环境: Python版本:Python 2.7 注:需要修改mimetypes.py文件(该文件可通过文章底部的网盘分 ...
- .NET开发邮件发送功能的全面教程(含邮件组件源码)
今天,给大家分享的是如何在.NET平台中开发“邮件发送”功能.在网上搜的到的各种资料一般都介绍的比较简单,那今天我想比较细的整理介绍下: 1) 邮件基础理论知识 2) ...
- 用ASP.NET Core 1.0中实现邮件发送功能-阿里云邮件推送篇
在上篇中用MailKit实现了Asp.net core 邮件发送功能,但一直未解决阿里云邮件推送问题,提交工单一开始的回复不尽如人意,比如您的网络问题,您的用户名密码不正确等,但继续沟通下阿里云客户还 ...
- redmine邮件发送功能配置详解
redmine的邮件发送功能还是很有用的.像项目有更新啦,任务分配啦,都能邮件发送的相关责任人.我自己在linux服务器上安装并启动了redmine后,邮件一直发送了不了.查了网上的资料,都是讲修改下 ...
- .NET开发邮件发送功能
.NET开发邮件发送功能 今天,给大家分享的是如何在.NET平台中开发“邮件发送”功能.在网上搜的到的各种资料一般都介绍的比较简单,那今天我想比较细的整理介绍下: 1) 邮件基础理论知 ...
- shell邮件发送功能实现
本文中以163邮箱为例,测试shell邮件发送功能.常见的工具有:mailx.sendmail.mutt等. 1.设置邮件客户端 (1)启用pop3.smtp服务,以支持第三方客户端支持 (2)设置授 ...
- 用Python实现邮件发送Hive明细数据
代码地址如下:http://www.demodashi.com/demo/12673.html 一.需求描述 客户需要每周周一接收特定的活动数据,生成Excel或是CSV文件,并通过邮件发送给指定接收 ...
- SpringBoot 2.X从0到1实现邮件发送功能
Spring中提供了JavaMailSender接口实现邮件发送功能,在SpringBoot2.X中也封装了发送邮件相关的Starter并且提供了自动化配置. 本文目录 一.添加对应的Starter二 ...
随机推荐
- 伪造随机的User-Agent
写好爬虫的原则只有一条: 就是让你的抓取行为和用户访问网站的真实行为尽量一致 1.伪造UA字符串,每次请求都使用随机生成的UA 为了减少复杂度,随机生成UA的功能通过第三方模块库fake-userag ...
- LR字符串处理函数-lr_save_int
int lr_save_int(int value,const char * param_name); value:要分配给参数的整数值. param_name:参数的名称. lr_save_in ...
- CSS文本相关之水平排列[4]
在正常流中,文本都是从左往右.自上而下排列显示,如果想要改变排列方向的话,可以通过CSS属性来改变. text-align属性 文本排列(text-align)可改变文本在水平上的方向,但不改变内部的 ...
- Tensorflow报错:OMP: Error #15: Initializing libiomp5.dylib, but found libiomp5.dylib already initialized.
参考: https://github.com/dmlc/xgboost/issues/1715 解决方法: I solved it with 'conda install nomkl'.
- Linux下如何查看硬件信息?
我们在 Linux 下进行开发时,有时也需要知道当前的硬件信息,比如:CPU几核?使用情况?内存大小及使用情况?USB设备是否被识别?等等类似此类问题.下面良许介绍一些常用的硬件查看命令. lshw ...
- 3D 立体动态图 代码:
CSS样式: <style>*{ margin:0; padding:0;}body{ max-width: 100%; min-width: 100%; height: 100%; ba ...
- Ubuntu搭建Java开发环境-刘志敏-专题视频课程
Ubuntu搭建Java开发环境-3人已学习 课程介绍 主要介绍在Ubuntu环境如何安装Java开发的基本环境课程收益 学会Ubuntu中安装jdk.mysql.maven和id ...
- 【论文笔记】Pyramidal Convolution: Rethinking Convolutional Neural Networks for Visual Recognition
地址:https://arxiv.org/pdf/2006.11538.pdf github:https://github.com/iduta/pyconv 目前的卷积神经网络普遍使用3×3的卷积神经 ...
- 一位老程序员说,有这份python3的开发指南,月薪能突破20K
推荐视频: AI人工智能识别技术_第一节AI人工智能识别技术_第二节Python基础案例之教你如何查询对方IP_第一节Python基础案例之教你如何查询对方IP_第二节 有程序员说,这份python3 ...
- JavaWeb网上图书商城完整项目--day02-20.修改密码各层实现
1.我们来看看后台操作的业务流程 每一层都按照上面的步骤来进行实现: 这里我们要使用commUtils.toBean把表单提交的参数封装成User对象,必须保证User对象中的字段和表单提交的字段的名 ...