admin 发表于 2018-1-14 19:28:44

Django 使用Mailgun 发送mail

Mailgun 是一个免费的邮件发送服务器,我这样定义它,自己的服务器上就不用搭建邮件服务器了,有些主机供应商是不同意在他的主机上不允许搭建的。


闲话不多说,按照《python 新手使用Django架站的16堂课》 搭建失败,提示 No module named packages.urllib3.filepost


Google学习,不用书中所谓的django-mailgun这个应用了,使用开源的anymail :https://github.com/anymail/django-anymail
按照提示安装配置
$ pip install django-anymail具体setting配置
INSTALLED_APPS = [
    # ...
    "anymail",
    # ...
]

ANYMAIL = {
    # (exact settings here depend on your ESP...)
    "MAILGUN_API_KEY": "key-XXXXXXXXXXX",
    "MAILGUN_SENDER_DOMAIN": bphero.com.cn',# your Mailgun domain, if needed
}
EMAIL_BACKEND = "anymail.backends.mailgun.EmailBackend"# or sendgrid.EmailBackend, or...
DEFAULT_FROM_EMAIL = "you@example.com"# if you don't already have this in settings-->这个我没有配置

在使用mailgun中,我自己用来我的域名bphero.com.cn,没有用默认给定的域名

关于添加域名方法:https://app.mailgun.com/app/domains/bphero.com.cn/verify
按照网页提供的方法设定TXT 和 CNAME,而MX 是推荐设定,我没有设定。 这些设定需要到域名服务商设定,我用的Godday 上设定的,设定完,点击verify,很快就OK了


然后在Django 代码里添加发送mail函数,参考git
from django.core.mail import send_mail

send_mail("It works!", "This will get sent through Mailgun","Anymail Sender <admin@bphero.com.cn>", ["XXX@example.com"])说明一下各个字段的作用: “It works!” 邮件的标题
                                       “This will get sent through Mailgun" 邮件内容
                                       "Anymail Sender <admin@bphero.com.cn>" 发件人,Anymail 和admin 都可以修改,后面的域名bphero.com.cn 不可以修改
                                       ["XXX@example.com"]收件人邮件地址。
方式调试发现无法发送出去,错误提示:
Free accounts are for test purposes only. Please upgrade or add the address to authorized recipients in Account Settings在mailgun 里也可以看到log信息如下

这个原因是我们申请的是免费账号,收件人需要提前认证,我们不能随意发送给任何人,需要先把收件人的mail地址设定在mailgun中
具体方法是在accout 中增加


如上图所示的方法,我增加了两个邮件地址,最多可以增加5个,每当设定一个邮件地址,mailgun 都会发送一个mail到该地址请求确认,只有确认后,才是设定成功。


上面的方法都处理完后,直接Django里的代码,这次终于发送成了

其它说明:Mailgun 注册对IP 进行屏蔽,我是扶墙后才注册成功的









lyuanc 发表于 2022-4-16 01:16:04


感谢楼主分享感谢楼主分享,学习一下:victory:
页: [1]
查看完整版本: Django 使用Mailgun 发送mail