PostMail,一个让你能够使用 POST 请求发送邮件的简易 Flask Server

2016-07-12 20:48:56 +08:00
 Yinz

前情概述

自己本身常常写一些小程序,包括但不限于爬虫, QQ 机器人,邮件提醒都经常非常有用,提醒任务完成情况、 QQ 掉线提示等。但是对于分发给其他用户使用的程序,让用户配置 smtp 有技术门槛并且很麻烦,而自己配置好直接分发又有邮箱密码明文的问题。

于是有了这个想法。在服务器(远程 or 本地)上部署一个配置好的 smtp 服务器,然后使用时只需要对服务器 POST 请求,即可发送邮件,而不需要任何额外的设置与配置。

(然而写完之后才发现想法和 mailgun 撞车了)

所以知道 mailgun 的各位,可以简单的认为这是个简易版的 mailgun 轮子。

快速开始

  1. 安装 Flask
sudo pip install Flask
  1. postmail.py 开头配置必要参数
DEFAULT_RECEIVER = ""       # 缺省的邮件接收邮箱
DEFAULT_SENDER_NAME = ""    # 缺省的发送者姓名
MAIL_HOST = ""              # SMTP 服务器地址, 如 smtp.126.com
MAIL_ADDRESS = ""           # 服务器登录的邮箱地址
PASSWORD = ""               # 服务器登录的邮箱密码
  1. 运行服务器,默认运行在 80 端口以及对应 url 是 '/mail'
python run.py
  1. 然后就可以用 POST 发邮件了! 你甚至不需要指定收件人,因为配置里有『默认收件人』这一选项
import requests

response = requests.post('http://www.yourserver.com/mail', data={
    'subject': "PostMail!",
    'content': "This mail is sent by PostMail!"
})

高级

修改postmail.py文件开头的秘钥选项

SECRET_KEY = "your_key"             # 用于验证身份的 key, 留空表示不启用 key 验证机制

然后你的所有请求都必须包含正确的key才会被执行发送

import requests

response = requests.post('http://www.yourserver.com/mail', data={
    'key': "your_key",
    'subject': "PostMail!",
    'content': "This mail is sent by PostMail!"
})

补充:本项目适合个人使用的邮件发送服务,暂时还没有测试过比较大规模的发送,而且程序本身趋向简洁,没有使用多线程和任务队列来进行发送,所以效率可能不高。当然,在 Flask server 中稍微修改一下就可以实现多线程处理了,只是邮件发送结果的反馈有点难办 XD

如果你担心接口被滥用,这里还提供了一个『自动抄送』的选项,你可以开启这一选项,之后邮件的请求如果没有包含你的默认接收邮箱,会自动抄送给你的默认接收邮箱,这样至少可以尽快的察觉到这一问题然后修改秘钥 XD

项目地址 https://github.com/Yinzo/PostMail

如果你觉得这个项目很棒,欢迎给我点个 Star ;D

6156 次点击
所在节点    分享创造
6 条回复
lemonda
2016-07-12 22:09:04 +08:00
很有用,不少主机上封了 smtp ,只能通过 API 发信
Yinz
2016-07-12 22:12:57 +08:00
@lemonda 意外地解决了一个意想不到的需求 :D
lhbc
2016-07-12 22:30:19 +08:00
能发 HTML 邮件吗?
Yinz
2016-07-12 22:41:29 +08:00
@lhbc 帮你加上了;D 刚刚 push 上去,请求里面带一个 subtype 就好了,就像这样, 默认 subtype 是'plain'
```
response = requests.post('http://www.yourserver.com/mail', data={
'subtype: "html",
'subject': "PostMail!",
'content': "This mail is sent by PostMail!"
})
```
zhchbin
2016-07-12 23:07:26 +08:00
https://github.com/Yinzo/PostMail/blob/master/run.py#L14-L15 这两行的顺序应该反了吧。。
Yinz
2016-07-12 23:10:20 +08:00
@zhchbin 感谢指出 XD , 之前 debug 时弄出来忘记放回去了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/292056

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX