以前经常有一个这样的需求,有个程序在服务器上跑,但我不想时不时去服务器上检查其运行结果.这时候用python来发email就很有用了.

之前参考CSDN的博客,没有成功…

所以今天就认真总结一下这个小技巧.

文章主要参考一篇国外教程,我翻译为中文并且加上自己的实践和思考.

前言

这篇教程将介绍:

  • 使用SMTP_SSL()和.starttls()设置安全连接
  • 使用Python的内置smtplib库发送基本电子邮件
  • 使用电子邮件包发送包含HTML内容和附件的电子邮件
  • 使用带有联系人数据的CSV文件发送多个个性化电子邮件
  • 使用Yagmail软件包,只需使用几行代码即可通过您的Gmail帐户发送电子邮件

在本教程的最后,您会发现一些事务性电子邮件服务,当您要发送大量电子邮件时,这些服务将非常有用。

开始

Python带有内置的smtplib模块,该模块可使用简单邮件传输协议(SMTP)发送电子邮件。 smtplib对SMTP使用RFC 821协议。本教程中的示例将使用Gmail SMTP服务器发送电子邮件,但是相同的原理也适用于其他电子邮件服务。尽管大多数电子邮件提供商都使用与本教程相同的连接端口,但是您可以运行快速的Google搜索来确认您的连接端口。 要开始使用本教程,请设置一个Gmail帐户进行开发,或者设置一个SMTP调试服务器,该服务器将丢弃您发送的电子邮件,并将其打印到命令提示符下。这两个选项都在下面为您列出。本地SMTP调试服务器对于解决电子邮件功能中的任何问题以及确保在发送任何电子邮件之前确保电子邮件功能无错误非常有用。

设置Gmail开发帐户

略过.这里我使用QQ邮箱,避免由于墙的原因减少错误因素.

需要注意的是,QQ邮箱对于第三方登录,密码并非邮箱的登陆码,而需要去网页端产生一个客户端随机码作为密码,以提高安全性.

设置本地SMTP服务器

您可以使用Python预先安装的smtpd模块,通过运行本地SMTP调试服务器来测试电子邮件功能。与其发送电子邮件至指定地址,不如将其丢弃并将其内容打印到控制台。运行本地调试服务器意味着无需处理邮件加密或使用凭据登录电子邮件服务器。

您可以通过在命令提示符中键入以下内容来启动本地SMTP调试服务器:

python -m smtpd -c DebuggingServer -n localhost:1025

linux平台要加sudo.

这样就启动了一个SMTP调试服务器,可以接受本地的邮件并打印在控制台.

发送纯文本

在我们开始发送带有HTML内容和附件的电子邮件之前,您将学习如何使用Python发送纯文本电子邮件。这些是您可以在简单的文本编辑器中编写的电子邮件。没有花哨的东西,例如文本格式或超链接。稍后您将了解到。

本地STMP调试器
import smtplib, ssl

port = 1025  
smtp_server = "localhost"
sender_email = "my@localhost"
receiver_email = "your@localhost"
message = """
Subject: Hi there

This message is sent from Python."""

# context = ssl.create_default_context()
server=smtplib.SMTP(smtp_server, port)
server.sendmail(sender_email, receiver_email, message)

效果如下:

qq远程SMTP服务器
import smtplib, ssl

port = 465  # For SSL
smtp_server = "smtp.qq.com"
sender_email = "2494782417@qq.com"  # Enter your address
receiver_email = "bilibili@lris.net"  # Enter receiver address
password = '****' # QQ授权码
message = """\
Subject: Hi there

This message is sent from Python on the linux."""

context = ssl.create_default_context()
server=smtplib.SMTP_SSL(smtp_server, port)
server.login(sender_email, password)
server.sendmail(sender_email, receiver_email, message)

没有报错估计就是正确的了,手机的邮箱客户端的确也收到了邮件.

目前这个需求已经达到了,以后有进一步的需求再补充吧.

TODO 更多的email发送技巧

yagmail

# -*- coding: UTF-8 -*-
import yagmail
#yagmail python第三方库,通过pip install yagmail安装
#发送邮件的思路
# 1.发送者邮箱,密码
# 2.邮箱服务器(SMTP.XXX.com)
# 3.接受者邮箱
# 4.邮件正文,附件,抄送者
# 5.发送
smtpserver='smtp.qq.com'#邮箱服务器
sender='2494782417@qq.com'
password='***'#这里值授权码,一串字符
reveicer='bilibili@lris.net'

m=yagmail.SMTP(host=smtpserver,user=sender,password=password,smtp_ssl=True)#连接邮箱服务器
subject='求职简历'#邮件主题
contents='2019年我会特别努力,期待不一样的自己。'#邮件内容
m.send(to=[reveicer],subject=subject,contents=contents)

我很好奇