在django中实现邮件发送

今天看了下如何在django中发送邮件,看的时候有些地方不懂,但是在实践了一下后就明白了,废话不多说,直接上笔记

	from django.core.mail import send_mail, send_mass_mail, mail_admins
	# 单发的邮件
	"""
	    send_main(subject,message,from_email,recipient_list,fail_silently = False,auth_user = None,auth_password = None,connection = None,html_message = None)
	    参数1:一个字符串,表示文件的主题
	    参数2:一个字符串,邮件的内容
	    参数3:一个字符串,发送者
	    参数4:字符串列表,表示收件人
	    参数5:为False时,send_mail()在发生错误时会抛出 smtplib.SMTPException异常
	    参数6:可选的用户名用来验证SMTP服务器,如果你要特别指定使用哪个邮箱帐号,就指定这个参数。如果没有提供这个值,Django将会使用settings中EMAIL_HOST_USER的值
	    参数7:可选的密码用来验证SMTP服务器。如果没有提供这个值,Django 将会使用settings中EMAIL_HOST_PASSWORD的值。
	    参数8:可选的用来发送邮件的电子邮件后端
	    参数9:如果提供了html_message,可以发送带HTML代码的邮件
	"""
	# 群发的邮件
	"""
	    send_mass_mail(datatuple,fail_silently = False,auth_user = None,auth_password = None,connection = None)
	    参数1:是一个元组,每个元组的类型为(subject,message,from_email,recipient_list)
	    参数2:参数3:参数4:参数5:与send_mail()中的相同
	"""
	# 向管理员发送邮件
	"""
	    mail_admins(subject,message,fail_silently = False,connection = None,html_message = None)
	    使用EMAIL_SUBJECT_PREFIX设置的值为邮件标题前缀,默认为'Django'
	    使用SERVER_EMAIL的值为发件人
	    会向ADMINS = (('1531391246', '1531391246@qq.com'),)中设置的邮箱发送邮件
	"""
	"""
	    mail_managers(subject,message,fail_silently = False,connection = None,html_message = None)
	    与上一个类似
	"""

下面再来看一下settings.py中的配置

	EMAIL_HOST = 'smtp.qq.com'  # 设置SMTP服务器,网易的为 smtp.163.com,其他的以此类推
	EMAIL_PORT = 25   # 设置端口,一般都是25
	EMAIL_HOST_USER = "153*******@qq.com"  # 你的邮箱地址
	EMAIL_HOST_PASSWORD = ""  # 这个时邮箱的授权码,不是登陆密码
	EMAIL_SUBJECT_PREFIX = "[你的博客]"  # 邮件标题的前缀
	SERVER_EMAIL = "153*******@qq.com"  # 管理员的邮箱的地址
	# 这是在生产环境中,如果发生错误,发送邮件到这个邮箱
	ADMINS = (('153*******', '153*******@qq.com'),)

暂时只看到了这里,其他的过几天补充

### 配置邮件服务器 在 Django实现邮件发送功能,首先需要配置邮件服务器。Django 提供了 `django.core.mail` 模块来简化邮件发送过程。以下是详细的配置步骤: 1. **设置邮件后端** 在项目的 `settings.py` 文件中,配置邮件后端为 SMTP 服务: ```python EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend' ``` 这行代码指定了使用 SMTP 协议来发送邮件 [^2]。 2. **配置邮件服务器参数** 接下来,需要设置与邮件服务器相关的参数。这些参数包括邮件主机、端口、用户名和密码等: ```python EMAIL_USE_TLS = False EMAIL_USE_SSL = True EMAIL_HOST = 'smtp.163.com' # 以网易邮箱为例 EMAIL_PORT = 25 EMAIL_HOST_USER = 'your_email@163.com' EMAIL_HOST_PASSWORD = 'your_authorization_code' ``` - `EMAIL_USE_TLS`: 是否使用 TLS 安全传输协议。 - `EMAIL_USE_SSL`: 是否使用 SSL 加密。 - `EMAIL_HOST`: 发送邮件的邮箱的 SMTP 服务器地址。 - `EMAIL_PORT`: 发件箱的 SMTP 服务器端口。 - `EMAIL_HOST_USER`: 发送邮件的邮箱地址。 - `EMAIL_HOST_PASSWORD`: 发送邮件的邮箱密码(这里使用的是授权码) [^2]。 ### 实现邮件发送功能 完成邮件服务器的配置后,接下来可以实现在视图中发送邮件的功能。 1. **导入必要的模块** 在视图文件中,导入 `send_mail` 函数: ```python from django.core.mail import send_mail ``` 2. **编写发送邮件的逻辑** 在视图函数中,调用 `send_mail` 函数来发送邮件。以下是一个简单的示例,展示如何将一封邮件发送给多个收件人: ```python def email_one(request): if request.method == 'POST': to_email = request.POST.get('email', None) if to_email: res = send_mail( '这是一封测试邮件', 'Hello world', settings.EMAIL_HOST_USER, [to_email, '837497936@qq.com'] ) if res == 1: return HttpResponse('邮件发送成功') return redirect('/') else: return redirect('/') ``` - `send_mail` 的参数分别是:邮件标题、邮件内容、发件箱(在 `settings.py` 中设置过的那个)、收件箱列表(可以发送给多个人),以及失败静默(若发送失败,报错提示我们)。 [^3] 3. **发送多封邮件** 如果需要同时发送多封邮件,可以使用 `send_mass_mail` 函数。以下是一个示例,展示如何发送多封邮件给不同的收件人: ```python def email_more(request): if request.method == 'POST': email1 = request.POST.get('email1', None) email2 = request.POST.get('email2', None) email3 = request.POST.get('email3', None) if email1 and email2 and email3: message1 = ('申通快递', '你的快放在菜鸟驿站,验证码:2581314', settings.EMAIL_HOST_USER, [email1, email3]) message2 = ('美团外卖', '你的猪肉炖粉条已经送达,请取餐', settings.EMAIL_HOST_USER, [email2]) message3 = ('中国移动', '亲,您的手机已欠费,请及时充值!', settings.EMAIL_HOST_USER, [email3]) try: res = send_mass_mail((message1, message2, message3)) except Exception as e: print(e) return HttpResponse('发送失败!') return redirect('/') ``` - `send_mass_mail` 允许一次发送多封邮件,适用于批量发送邮件的场景 [^3]。 ### 注意事项 - **垃圾邮件问题** 有时候虽然系统提示邮件发送成功,但收件人可能在收件箱中找不到邮件。这种情况下,建议检查垃圾邮件箱,因为邮件可能会被误判为垃圾邮件 [^3]。 - **邮件客户端协议** 当用户通过邮件客户端发送邮件时,邮件客户端会使用 SMTP 协议与邮箱服务器进行通信。如果收件人使用的是不同服务商的邮箱,发件方的邮箱服务器会将邮件转发到收件方的邮箱服务器。收件人在登录邮件客户端时,通常会触发 IMAP 或 POP3 协议来拉取邮件 [^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值