一.原生发邮件方法
import smtplib
from email.mime.text import MIMEText
def sendEmail(user, pwd, sender, receiver, content, title):
mail_host = "smtp.163.com"
message = MIMEText(content, "plain", "utf-8")
message["From"] = sender
message["To"] = ",".join(receiver)
message["Subject"] = title
try:
smtpObj = smtplib.SMTP_SSL(mail_host, 465)
smtpObj.login(user, pwd)
smtpObj.sendmail(sender, receiver, message.as_string())
print("mail has been send successful!")
except BaseException as e:
print(e)
if __name__ == "__main__":
mail_user = "[email protected]"
mail_pwd = "password"
sender = "[email protected]"
receiver = ["[email protected]"]
content = "人生苦短,我用Python"
title = "Python"
sendEmail(mail_user, mail_pwd, sender, receiver, content, title)
二.Django实现
1.先在settings.py中添加配置
# smtp服务的邮箱服务器 我用的是163
EMAIL_HOST = 'smtp.163.com'
# smtp服务固定的端口是25
EMAIL_PORT = 25
# 发送邮件的邮箱
EMAIL_HOST_USER = '[email protected]'
# 在邮箱中设置的客户端授权密码
EMAIL_HOST_PASSWORD = 'password'
# 收件人所看到的发件人
EMAIL_FROM = '[email protected]'
2.视图函数内容
from django.core.mail import send_mail
from django.shortcuts import render
from django.template import loader
def send_active_email(username, receive_email, token):
subject = "%s账户激活" % username
message = ''
from_email = '[email protected]'
recipient_list = [receive_email, ]
# 发送内容为网页的文件
temp = loader.get_template('user/active.html')
data = {
'username': username,
'active_url': 'http://xxx/activeChange/?user_token=%s' % token
}
html_message = temp.render(data)
send_mail(subject, message, from_email, recipient_list, html_message=html_message)
三.Flask实现
1.下载flask-email扩展库
pip install flask-email
2.在settings.py中添加配置
MAIL_SERVER = 'smtp.163.com'
MAIL_PORT = 25
MAIL_USERNAME = 'user@163.com'
MAIL_PASSWORD = 'password'
MAIL_DEFAULT_SENDER = 'user@163.com'
3.注册mail
from flask_mail import Mail
cache = Cache(config={
'CACHE_TYPE': 'redis',
'CACHE_DEFAULT_TIMEOUT': 60*60*24*7,
})
mail = Mail()
mail.init_app(app)
4.视图函数内容
import uuid
from flask import render_template
from flask_mail import Message
from flask_restful import Resource, reqparse, fields, marshal_with
from App.utils.ModelUtil import FAILURE
from App.utils.Utils import login_verify
from App.extension import mail, cache
from App.models import User
parse = reqparse.RequestParser()
parse.add_argument('name', type=str, help='请输入用户名')
parse.add_argument('email', type=str, help='请输入邮箱')
parse.add_argument('password', type=str, required=True, help='请输入密码')
parse.add_argument('action', type=str, required=True, help='请声明具体操作')
user_feilds = {
'name': fields.String(attribute='u_name'),
'email': fields.String(attribute='u_email'),
}
result_field = {
'token': fields.String(attribute='u_token'),
'returnCode': fields.String,
'returnMessage': fields.String,
'returnValue': fields.Nested(user_feilds),
}
class UserResource(Resource):
@marshal_with(result_field)
def post(self):
args = parse.parse_args()
action = args.get('action')
if action == 'register':
name = args.get('name')
email = args.get('email')
password = args.get('password')
user = User(u_name=name, u_email=email)
user.set_password(password)
result = user.save()
if result == FAILURE:
data = {
'returnCode': '900',
'returnMessage': '用户已存在'
}
return data
u_token = str(uuid.uuid4())
cache.set(u_token, user.id)
subject = 'xxx用户激活'
msg = Message(subject=subject, sender='[email protected]', recipients=['[email protected]'])
html = render_template('user_activate.html', username='Tom',
activate_url='http://localhost:5000/userstatus/?action=activate&u_token=%s' % u_token)
msg.html = html
mail.send(msg)
data = {
'token': u_token,
'returnCode': '0',
'returnValue': user
}
return data
elif action == 'login':
name = args.get('name')
password = args.get('password')
if name:
return login_verify(name, password, arg='name')
else:
email = args.get('email')
return login_verify(email, password)
def get(self):
return render_template('user_activate.html')