您现在的位置是: 网站首页 >Django Django
Django发送邮件,服务器限制25端口,使用465端口发送
admin2018年12月2日 12:43 【Django | Python 】 1257人已围观
# Django发送邮件 最好才有异步方式,防止过程阻塞影响使用体验,推荐使用Celery ## 使用25端口发送邮件 ### settings.py配置邮箱信息 ```python # 在标准输出中输出e-mail内容来代替通过SMTP服务发送邮件 # EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend' # 实际发送邮件 EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend' EMAIL_HOST = 'smtp.yeah.net' # smtp地址 EMAIL_HOST_USER = 'xxx@yeah.net' EMAIL_HOST_PASSWORD = 'xxx_password' EMAIL_PORT = 25 # smtp端口 EMAIL_USE_TLS = True # DEFAULT_FROM_EMAIL = 'xxx@yeah.net' # 可以使用这个表达形式 DEFAULT_FROM_EMAIL = 'StarMeow <xxx@yeah.net>' # 管理员站点 SERVER_EMAIL = 'xxx@yeah.net' EMAIL_FROM = 'StarMeow<xxx@yeah.net>' # 一般为登录用户,也就是=EMAIL_HOST_USER ``` ### 发送邮件函数模块 ```python #! /usr/bin/env python # -*- coding: utf-8 -*- # 在账号操作时发送邮件 from random import Random from django.core.mail import send_mail from usercenter.models import VerificationCode from django.conf import settings # 生成随机字符串 def random_str(random_length=8): s = '' # 生成字符串的可选字符串 chars = 'AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz0123456789' length = len(chars) - 1 for i in range(random_length): s += chars[Random().randint(0, length)] return s # 发送注册邮件 def send_email(request_uri, email, send_type='register'): """ Django发送邮件 :param request_uri: 请求的地址 :param email: 邮箱地址 :param send_type: 发送邮件的类型 :return: """ # 发送之前先保存到数据库,到时候查询链接是否存在 # 生成随机的code放入链接 code = random_str(16) # 实例化一个EmailVerifyRecord对象 email_record = VerificationCode() email_record.code = code email_record.email = email email_record.send_type = send_type email_record.save() # 定义邮件内容 email_title = '' email_body = '' if send_type == 'register': email_title = 'StarMeow 注册激活链接' email_body = '请点击链接激活账号:{}active/{}'.format(request_uri, code) # request_uri='http://127.0.0.1:8000/usercenter/register/' elif send_type == 'forget': email_title = 'StarMeow 忘记密码链接' email_body = '请点击链接重置密码:{}reset/{}'.format(request_uri, code) # request_uri='http://127.0.0.1:8000/usercenter/forgetpwd/' # 使用Django内置函数完成邮件发送。四个参数:主题,邮件内容,从哪里发,接受者list send_status = send_mail(email_title, email_body, settings.EMAIL_FROM, [email]) if send_status: return True else: return False ``` 在视图中可以通过调用`send_email(request_uri, email, send_type='register')`实现邮件的发送 ```python # 发送邮件,request.build_absolute_uri()是获取当前请求的完成链接 send_email(request_uri=request.build_absolute_uri(), email=email, send_type='register') ``` ## 不使用25端口发送邮件 ### settings.py配置465端口 ```python # 实际发送邮件 EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend' EMAIL_HOST = 'smtp.yeah.net' # smtp地址 EMAIL_HOST_USER = 'xxx@yeah.net' # smtp 服务器的用户名 EMAIL_HOST_PASSWORD = 'xxx_password' # smtp服务器的密码 # 使用25端口发送邮件 # EMAIL_PORT = 25 # smtp端口 # EMAIL_USE_TLS = True # 是否使用TLS安全传输协议,使用25时这里必须是 True,否则发送不成功 # 使用587端口发送邮件,这儿的yeah邮箱没发送成功!!不使用 # EMAIL_PORT = 587 # EMAIL_USE_TLS = True # 是否使用TLS安全连接 # 使用465端口发送邮件 EMAIL_PORT = 465 EMAIL_USE_SSL = True # 是否使用SSL加密 # 配置中,EMAIL_USE_TLS和EMAIL_USE_SSL都默认设置为False,需要配置其中一个为True,但是不能两个都设置为True。一般端口587对应TLS,端口465对应SSL(加强TSL)。 # DEFAULT_FROM_EMAIL = 'xxx@yeah.net' # 可以使用这个表达形式 DEFAULT_FROM_EMAIL = 'StarMeow <xxx@yeah.net>' # 管理员站点 SERVER_EMAIL = 'xxx@yeah.net' EMAIL_FROM = 'StarMeow<xxx@yeah.net>' # 一般为登录用户,也就是=EMAIL_HOST_USER ``` 其他保持不变
很赞哦! (0)
相关文章
文章交流
- emoji