Python发送邮件实现

一.原生发邮件方法

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 = "user@163.com"
    mail_pwd = "password"
    sender = "user@163.com"
    receiver = ["receiver@qq.com"]

    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 = 'user@163.com'
# 在邮箱中设置的客户端授权密码
EMAIL_HOST_PASSWORD = 'password'
# 收件人所看到的发件人
EMAIL_FROM = 'user@163.com'

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 = 'user@163.com'
    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='user@163.com', recipients=['receiver@qq.com'])
            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')
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值