保存邮箱并发送验证邮件

后端接口设计:

请求方式:PUT /email/

请求参数: JSON 或 表单

参数 类型 是否必须 说明
email str Email邮箱

返回数据: JSON

返回值 类型 是否必须 说明
id int 用户id
email str Email邮箱

在users/serializers.py中新建序列化器,用户验证用户提交的邮箱信息。

class EmailSerializer(serializers.ModelSerializer):
    """
    邮箱序列化器
    """
    class Meta:
        model = User
        fields = (‘id‘, ‘email‘)
        extra_kwargs = {
            ‘email‘: {
                ‘required‘: True
            }
        }

    def update(self, instance, validated_data):
        instance.email = validated_data[‘email‘]
        instance.save()
        return instance

在users/views.py中创建新视图,用于保存用户的邮箱信息,注意需要用户登录通过认证后。

from rest_framework.permissions import IsAuthenticated

class EmailView(UpdateAPIView):
    """
    保存用户邮箱
    """
    permission_classes = [IsAuthenticated]
    serializer_class = serializers.EmailSerializer

    def get_object(self, *args, **kwargs):
        return self.request.user

设置路由信息

 url(r‘^emails/$‘, views.EmailView.as_view()),  # 设置邮箱

补充发送验证邮件

在保存邮箱的时候,需要向用户发送验证邮件,我们将发送邮件的工作放到celery中异步执行。

在celerytasks目录中新建email目录和`email/_init.py文件和email/tasks.py`文件

email/tasks.py文件中是实现发送邮件的异步任务

from celery_tasks.main import celery_app
from django.core.mail import send_mail
from django.conf import settings

@celery_app.task(name=‘send_verify_email‘)
def send_verify_email(to_email, verify_url):
    """
    发送验证邮箱邮件
    :param to_email: 收件人邮箱
    :param verify_url: 验证链接
    :return: None
    """
    subject = "美多商城邮箱验证"
    html_message = ‘<p>尊敬的用户您好!</p>‘                    ‘<p>感谢您使用美多商城。</p>‘                    ‘<p>您的邮箱为:%s 。请点击此链接激活您的邮箱:</p>‘                    ‘<p><a href="%s">%s<a></p>‘ % (to_email, verify_url, verify_url)
    send_mail(subject, "", settings.EMAIL_FROM, [to_email], html_message=html_message)
注意

在发送邮件的异步任务中,需要用到django的配置文件,所以我们需要修改celery的启动文件main.py,在其中指明celery可以读取的django配置文件,并且注册添加email的任务

from celery import Celery

# 为celery使用django配置文件进行设置
import os
if not os.getenv(‘DJANGO_SETTINGS_MODULE‘):
    os.environ[‘DJANGO_SETTINGS_MODULE‘] = ‘meiduo_mall.settings.dev‘

# 创建celery应用
celery_app = Celery(‘meiduo‘)

# 导入celery配置
celery_app.config_from_object(‘celery_tasks.config‘)

# 自动注册celery任务
celery_app.autodiscover_tasks([‘celery_tasks.sms‘, ‘celery_tasks.email‘])
在User模型类中定义生成验证邮箱链接的方法

邮箱的激活链接是用户点击时会访问的网址,我们让用户点击时进入到success_verify_email.html页面。

    def generate_verify_email_url(self):
        """
        生成验证邮箱的url
        """
        serializer = TJWSSerializer(settings.SECRET_KEY, expires_in=constants.VERIFY_EMAIL_TOKEN_EXPIRES)
        data = {‘user_id‘: self.id, ‘email‘: self.email}
        token = serializer.dumps(data).decode()
        verify_url = ‘http://www.meiduo.site:8080/success_verify_email.html?token=‘ + token
        return verify_url
修改EmailSerializer序列化器的update方法,增加发送邮件
    def update(self, instance, validated_data):
        email = validated_data[‘email‘]
        instance.email = email
        instance.save()

        # 生成验证链接
        verify_url = instance.generate_verify_email_url()
        # 发送验证邮件
        send_verify_email.delay(email, verify_url)
        return instance

原文地址:https://www.cnblogs.com/hzlnice/p/9393014.html

时间: 2024-11-01 16:36:19

保存邮箱并发送验证邮件的相关文章

使用Zabbix服务端本地邮箱账号发送报警邮件的部署记录

邮件报警有两种情况:1)Zabbix服务端只是单纯的发送报警邮件到指定邮箱,发送报警邮件的这个邮箱账号是Zabbix服务端的本地邮箱账号(例如:[email protected]),只能发送,不能接收外部邮件.2)使用一个可以在互联网上正常收发邮件的邮箱账号(例如:[email protected]),通过在Zabbix服务端中设置,使其能够发送报警邮件到指定邮箱.上面第2中使用外部邮箱发送报警邮件之前已经介绍了:分布式监控系统Zabbix-3.0.3-完整安装记录(5)-邮件报警部署.下面说下

伪造邮件攻击,看我如何给网易邮箱APP发送垃圾邮件【二】

Duang~~~好久没更新博客了,源于最近比较忙,感谢博友对我的支持哈~今天继续更新 后面以我在补天漏洞平台提交过的漏洞为入口. 网易邮箱国内用户很多.今天看见他家的app了 ,99.95%垃圾邮件捕获,下面我本地搭建一个 SMTP服务器,去测试一下,哈哈~ 一.SMTP服务器的搭建这里不多说,baidu,google都可以去搜搜. 二.下面截图为cmdshell下发送邮件的方法(命令行). 三.然后我们就在本地的SMTP服务器上看到一份等待发送的邮件,点击按钮发送.看到下面的 截图,就是Ok了

office365为新建账号发送欢迎邮件

在日常中,有新同事入职了,需要为新入职的同事发送欢迎邮件,并附上相应的入职ppt及一些常用小工具,这个可以系统自动发送来实现,下面是为新建的属于杭州的邮箱用户发送欢迎邮件,可以根据下面的来修改,修改发件人,发送服务器和一些附件内容. import-module activedirectory #昨天开通用户 $date=((Get-Date).AddDays(-1)).date $people=Get-ADUser -Filter {(created -ge$date) -and (city -

C#发送Email邮件(实例:QQ邮箱和Gmail邮箱)

下面用到的邮件账号和密码都不是真实的,需要测试就换成自己的邮件账号. 需要引用: using System.Net.Mail; using System.Text; using System.Net; 程序代码: MailMessage myMail = new MailMessage(); //创建邮件实例对象 myMail.From = new MailAddress(""); //发送者,要和邮件服务器的验证信息对应,不能随便更改 myMail.To.Add(new MailAd

Smokeping 使用外部邮箱发送告警邮件

Smokeping 发送告警邮件 转自:http://www.humen1.net/2013/11/669 smokeping 默认用sendmail发邮件,这样不好. 改了一下源码 这样可以使用 我QQ的smtp server来发告警邮件了 首先需要安装 Authen::SASL 模块(auth 需要用的) 我用CPAN装的,不细说了 修改 smokeping/lib/Smokeping.pm 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17

在zabbix上添加自定义监控项目、配置告警且发送告警邮件到指定邮箱

在zabbix上添加自定义监控项目 配置告警且发送告警邮件到指定邮箱 原文地址:http://blog.51cto.com/13515599/2104326

Java发送QQ邮件

面试的时候被问到这个问题,别人问我用Java发过邮件没有,被问得一脸懵逼.然后就研究了一下,不是很难,按照网上的方法折腾了几天就搞出来了. 首先,使用QQ邮箱发送邮件之前需要在邮箱里面配置,开启pop3和smtp服务,其实这就是两个网络协议,一个是接受邮件的协议,一个是发送邮件的协议: POP3 是Post Office Protocol 3的简称,即邮局协议的第3个版本,它规定怎样将个人计算机连接到Internet的邮件服务器和下载电子邮件的电子协议.它是因特网电子邮件的第一个离线协议标准,P

java通过SMTP发送QQ邮件(参考自龙果学院)

java通过SMTP发送QQ邮件编辑 个人邮箱开通SMTP服务(进入个人邮箱,点击设置–>账户):  点击了账户后,往下拉可以看到SMTP服务选项,默认情况下这个选项是不开启的.点击开启腾讯会进行身份验证,身份验证通过以后,会收到一个用于使用SMTP的16位口令,验证身份的过程中把收到的口令保存下来,因为后面要使用SMTP功能必须要用到这个口令.  具体实现代码:     public static void main(String args[]) {        // 邮件内容       

使用python发送QQ邮件

这里用到了Python的两个包来发送邮件: smtplib 和 email . Python 的 email 模块里包含了许多实用的邮件格式设置函数,可以用来创建邮件“包裹”.使用的 MIMEText 对象,为底层的 MIME(Multipurpose Internet MailExtensions,多用途互联网邮件扩展类型)协议传输创建了一封空邮件,最后通过高层的SMTP 协议发送出去. MIMEText 对象 msg 包括收发邮箱地址.邮件正文和主题,Python 通过它就可以创建一封格式正