零基础学编程035:群发邮件并不难

我是GTD的重度用户,GTD中讲究将所有事情先收集起来再说,所以收集操作越快越好,这样才不至于把手边的工作打断。很多老牌的GTD工具软件支持发邮件实现快速收集,比如OmniFocus,所以我的Windows桌面上放着一个script脚本,用于把待办事项一键发送到我的OmniFocus服务器,它会自动同步到我的手机上的OmniFocus,省去了我在手机上繁重的手指录入操作。

永远不要学编程,而是用编程,来和我一起探索如何用Python发邮件吧。

第一步:搜索大法

运用《零基础都需要哪些基础》里提到的第一条技巧:谷歌搜索。我以前学过收发邮件的基本原理,第一组关键词就用python send email,打开VPN和谷歌,看看搜索的结果。

第二步:官方文档

搜索的第一条结果就指向python的官方类库参考手册,以后如果知道某个模块包packages的名字后,这个网站 https://docs.python.org/3 是首选打开的,注意里面的3表示Python 3版本,换成2就是Python 2的帮助手册。

打开搜索的第一个网页,第一段样例代码:

# Import smtplib for the actual sending function
import smtplib
# Import the email modules we'll need
from email.message import EmailMessage

# Open the plain text file whose name is in textfile for reading.
with open(textfile) as fp:
    # Create a text/plain message
    msg = EmailMessage()
    msg.set_content(fp.read())

# me == the sender's email address
# you == the recipient's email address
msg['Subject'] = 'The contents of %s' % textfile
msg['From'] = me
msg['To'] = you

# Send the message via our own SMTP server.
s = smtplib.SMTP('localhost')
s.send_message(msg)
s.quit()

读懂这段例子代码就需要用到以前学过的知识了,这段例子代码中把一个文本文件中的内容作为邮件正文发出去。我们稍微改一下:

import smtplib
from email.message import EmailMessage

msg = EmailMessage()
msg.set_content("这是申龙斌发出的一封测试邮件")

msg['Subject'] = '邮件标题:零基础学编程'
msg['From'] = 'shenlongbin@qq.com'  #请换成你的邮箱
msg['To'] = 'slb-omnifocus@sync.omnigroup.com' #请换成你的邮箱

s = smtplib.SMTP('smtp.qq.com') #请查询你的邮箱服务商的SMTP域名
s.send_message(msg)
s.quit()

在Python中发邮件还是非常简单的,需要用到2个模块包,即email和smtplib。上面代码中的From和To分别对应着发送邮箱和接收邮箱的地址,请换成你自己的邮箱试试,而SMTP就需要补充一点邮件收发的基础知识了。

第三步:设置SMTP

打开维基百科或者百度百科,搜索SMTP。

SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。SMTP协议属于TCP/IP协议簇,它帮助每台计算机在发送或中转信件时找到下一个目的地。通过SMTP协议所指定的服务器,就可以把E-mail寄到收信人的服务器上了,整个过程只要几分钟。SMTP服务器则是遵循SMTP协议的发送邮件服务器,用来发送或中转发出的电子邮件。

详细的原理对于初学者来说比较难懂,但要明白一个SMTP Server概念,你要配置这个发送邮件服务器,通过它你就可以顺利地发出邮件了。你使用谁提供的服务,服务商会给你该服务器的域名,例如:QQ邮箱的发送服务器就是smtp.qq.com。

如果公司有独立的邮件服务器,系统管理员肯定会告诉你这个邮件服务器的地址。

好了,上面代码中的from,to,smtp server这几个关键信息都填好了,运行代码。

第四步:邮箱需要认证

如果你没有收到错误信息,那么就去打开邮箱查收一下,看看邮件是否已经到达。希望你能够一次运行代码成功,但我的环境并不顺利,出现了如下错误:

raise SMTPSenderRefused(code, resp, from_addr) smtplib.SMTPSenderRefused: (530, b'5.7.1 Client was not authenticated', 'shenlongbin@my-mail-server.com')

最早的邮件服务器支持任何人发送邮件,但随着垃圾邮件的泛滥,绝大多数邮件服务器都需要通过用户名和密码的认证后才能发送邮件,上面的出错信息表明我与邮件服务器的连接没有通过认证。

再次利用谷歌搜索,加个关键字authentication:

第二个搜索结果来自于著名的stackoverflow网站,里面的s.login()让人眼前一亮,马上打开该网页,原来需要在send_message()之前增加一行代码:

s.login('shenlongbin', 'Password') 

再测试运行一次,顺利通过,我可以用Python向我的OmniFocus发送邮件了!我用这个功能经常把大段的文字发送到iPhone手机上,省去了我在手机上打字的痛苦。

当然上面只是最简单的示例,其它功能还需要额外的代码,比如:

  • 发送文件附件attachments
  • 接收邮件:这个与发送邮件是两个不同的服务

小结:

  • 学会搜索,多试试不同的关键字
  • python的官方文档是第一手参考资料,记住网址:https://docs.python.org/
  • smtp是简单邮件传输协议的缩写
  • 邮件服务器的主机地址是必填项
  • from是发送邮箱的地址
  • to是接收邮箱的地址
  • email和smtplib是发送邮件的两个模块包
  • stackoverflow是一个查找编程问题的重要网站,里面回答的质量比国内的csdn强百倍
  • 为了减少垃圾邮件,发送邮件都需要通过认证

最终代码:

import smtplib
from email.message import EmailMessage

msg = EmailMessage()
msg.set_content("这是申龙斌发出的一封测试邮件")

msg['Subject'] = '邮件标题:零基础学编程'
msg['From'] = 'shenlongbin@qq.com'  #请换成你的邮箱
msg['To'] = 'slb-omnifocus@sync.omnigroup.com' #请换成你的邮箱

s = smtplib.SMTP('smtp.qq.com') #请查询你的邮箱服务商的SMTP主机域名
s.login('shenlongbin', 'Password') #请换成你的邮箱用户名和密码
s.send_message(msg)
s.quit()

--- END ---

原文发布于微信公众号 - 申龙斌的程序人生(slbGTD)

原文发表时间:2017-03-23

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏CSDN技术头条

Java 程序员必备的 IntelliJ IDEA 插件

IntelliJ 在业界被公认为最好的 java 开发工具之一,尤其在智能代码助手、代码自动提示、重构、CVS 整合、代码审查、 创新的 GUI 设计等方面的功...

844
来自专栏IT笔记

2017年最新javaweb整合银联在线支付DEMO

2017年最新银联在线支付DEMO,成功运行 。 本项目可直接导入eclipse运行,内包含最新文档 ,详情请阅读readme.tx,截止日期2015-09-0...

3394
来自专栏Youngxj

微信树洞源码分享

4647
来自专栏walterlv - 吕毅的博客

PasswordVault —— 在 UWP 应用中安全地保存密码

2018-06-15 13:43

583
来自专栏中国白客联盟

点击我即可获取你QQ系权限

腾讯域下的cookie都是通用的,怎么说,也就是说,比如你成功登录了QQ空间,则无需二次登录即可登录腾讯域的其他应用,比如邮箱、音乐、视频等。所以说,你只要发现...

1253
来自专栏FreeBuf

GPS追踪工具Traccar体验

*本文原创作者:syttc,本文属FreeBuf原创奖励计划,未经许可禁止转载 还是之前freebuf上的工具介绍看到的,不过看到下面有人评论说没用成功,我就...

2845
来自专栏知晓程序

开发 | 一款记账小程序的开发全过程,附避坑指南

趁着最近上班不是特别忙,自己闲来无事也跟着捣鼓了一款个人记账用的小程序:「小记一笔」。

472
来自专栏子勰随笔

iMac(OS X)常用开发工具介绍

1275
来自专栏FreeBuf

Tunnel:论如何在内网中自由渗透

*本文作者:戒贤,本文属FreeBuf原创奖励计划,未经许可禁止转载 背景 能够成功地通过web漏洞获取到webshell,对于一次完整的渗透测试来说,仅仅相当...

22410
来自专栏轻扬小栈

aria2,SO COOL,用于迅雷离线

1613

扫码关注云+社区