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 = "[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')

猜你喜欢

转载自blog.csdn.net/qq_36355119/article/details/82669974