我将发送邮件用flask封装为post接口,直接进行post提交接口来发送邮件,虽然没啥用(可以弄个轰炸)。。。
配置环境
- 163邮箱
- Centos7.4
- Python===3.6.5
- Flask===1.0.2
- PyEmail===0.0.1
- gunicorn===19.9.0
邮箱开通STMP
常见的服务器端口
**25端口:**25端口为SMTP(Simple Mail Transfer Protocol,简单邮件传输协议)服务所开放的,是用于发送邮件。
**465端口(SMTPS):**465端口是为SMTPS(SMTP-over-SSL)协议服务开放的,这是SMTP协议基于SSL安全协议之上的一种变种协议,它继承了SSL安全协议的非对称加密的高度安全可靠性,可防止邮件泄露。
网易
163邮箱
POP3:pop.126.com
SMTP:smtp.126.com
SMTP端口号:25
126邮箱
POP3:pop.126.com
SMTP:smtp.126.com
SMTP端口号:25
QQ邮箱
POP3:pop.qq.com
SMTP:smtp.qq.com
SMTP端口号:25 (使用SSL时,端口号465或587)
发送邮件代码
安装Python发送邮件的模块
pip3 install pyEmail
import smtplib
from email.mime.text import MIMEText
from email.header import Header
import time
class EMAIL:
# 第三方 SMTP 服务
mail_host = "smtp.139.com" # 设置服务器
mail_user = "@139.com" # 用户名
mail_pass = "" # 口令
def __init__(self, receivers, message_text, message_header, num):
self.receivers = [receivers] # 发送的目标
self.message = MIMEText(message_text, 'plain', 'utf-8') # 发送内容
self.message['Subject'] = Header(message_header, 'utf-8') # 标题
self.num = num # 发送几次
def send(self):
try:
smtpObj = smtplib.SMTP()
smtpObj.connect(EMAIL.mail_host, 25)
smtpObj.login(EMAIL.mail_user, EMAIL.mail_pass)
smtpObj.sendmail(EMAIL.mail_user, self.receivers,
self.message.as_string())
except Exception as e:
smtpObj.quit()
raise e + '发送失败'
def send_email(self):
for _ in range(self.num):
self.send()
if __name__ == '__main__':
email_163 = EMAIL('1290259791@qq.com', '测试', '没有内容', 1)
email_163.send()
Flask服务端代码
接受Post请求来调用发送邮件。
安装Flask模块。
pip3 install Flask
from flask import Flask, request, jsonify
from email_163 import EMAIL
app = Flask(__name__)
@app.route('/email', methods=['POST', 'GET'])
def index():
if request.method == 'POST':
email = request.form['email']
text = request.form['text']
header = request.form['header']
num = request.form['num']
email_163 = EMAIL(email, text, header, int(num))
email_163.send_email()
return 'ok'
if request.method == 'GET':
return jsonify('no')
if __name__ == '__main__':
app.run(debug=True)
腾讯云解封25端口
打开后我在安全组里添加了25的出口规则。
部署Flask到服务器
可以参考Flask从0部署到腾讯云教程
测试请求
我用nginx映射的是8001端口到8000
访问http://域名:8001/email,出现no就是get请求。
可以使用下面的代码来测试post请求。
import requests
url = 'http://域名:8001/email'
data = {
'email':'1290259791@qq.com',
'text':'测试',
'header':'标题',
'num':3,
}
response = requests.post(url=url, data=data).text
print(response)