Django发送html邮件

Django发送html邮件

在Django中,发送邮件非常的方便,一直没有时间,今天来做一个小小的总结吧。

我们常用的当然是通过send_mail发送邮件:

send_mail(subject,message,from_email,recipient_list, fail_silently=False,auth_user=None,auth_password=None,connection=None)

subject,message,from_emailrecipient_list 这四个参数是必须的。

  • subject: 字符串,表示邮件标题。
  • message: 字符串,表示邮件内容。
  • from_email: 字符串,表示发件邮箱。
  • recipient_list: 字符串列表,列表中每个成员都是一个邮箱地址,而且每个收件人都会在 “收件人/To:” 栏看到出现在recipient_list 中的其他收件人。
  • fail_silently: (可选)布尔值。为False 时,send_mail 会抛出smtplib.SMTPException 异常。smtplib 文档列出了所有可能的异常。这些异常都是SMTPException 的子类。
  • auth_user: (可选)SMTP服务器的认证用户名。没提供该参数的情况下,Django会使用EMAIL_HOST_USER 配置项的设置。
  • auth_password: (可选)SMTP服务器的认证密码,没提供该参数的情况下,Django会使用EMAIL_HOST_PASSWORD 配置项的设置。
  • connection: (可选)发送邮件的后端。没提供该参数的情况下,Django会使用默认后端的实例。

以下是一个简单的事例:

           from django.core.mail import send_mail
           from django.template import Context, loader
           
           context = {
     'nickname': user.nickname,
     'verify_url': verify_url,
    }
    email_template_name = 'template.html'
    t = loader.get_template(email_template_name)
    mail_list = [user.email, ]
           send_mail(
                subject=title,
                message=t.render(Context(context)),
                from_email=EMAIL_HOST_USER,         # 发件邮箱
                recipient_list=mail_list,
                fail_silently=False,
                auth_user=EMAIL_HOST_USER,          # SMTP服务器的认证用户名
                auth_password=EMAIL_HOST_PASSWORD,  # SMTP服务器的认证用户密码
                connection=None
            )
用过的人可能会发现,你在template.html中的标签,并没有通过浏览器的解析而显示出来了。

怎么办?我们要发送HTML邮件,Django当然是为你提供了好的解决方案的,请看下面一段代码:

            from django.core.mail import EmailMultiAlternatives
            from django.template import Context, loader 
            
            subject, from_email, to = title, EMAIL_HOST_USER, mail_list
            html_content = t.render(Context(context))
            msg = EmailMultiAlternatives(subject, html_content, from_email, to)
            msg.attach_alternative(html_content, "text/html")
            msg.send()
看,很简单吧,那么现在我要稍稍的做一点点改动,我需要发送附件给收件人,只需要做一个简单的修改即可:

            from django.core.mail import EmailMultiAlternatives
            from django.template import Context, loader 
            
            subject, from_email, to = title, EMAIL_HOST_USER, mail_list
            html_content = t.render(Context(context))
            msg = EmailMultiAlternatives(subject, html_content, from_email, to)
            msg.attach_alternative(html_content, "text/html")

            msg.attach_file(u'D:/My Documents/Python/doc/test.doc')        # 添加附件发送

            msg.send()

好了,到此为止,发送邮件已经结束了。不过,此时,需求变了,我在自己的网站上配置了多个发送邮件的用户名和密码,现在需要用我指定的用户名和密码给用户发送邮件,该怎么办呢?请看下面的一段代码:

            from django.core.mail import EmailMultiAlternatives,get_connection
            from django.template import Context, loader 

            conn = get_connection()                # 返回当前使用的邮件后端的实例 
            conn.username = 'my_email@qq.com'      # 更改用户名 
            conn.password = 'my_email'             # 更改密码 
            conn.host = 'smtp.exmail.qq.com'       # 设置邮件服务器 
            conn.open()                            # 打开连接

            EMAIL_HOST_USER = 'my_email@qq.com'
            subject, from_email, to = title, EMAIL_HOST_USER, mail_list
            html_content = t.render(Context(context))
            msg = EmailMultiAlternatives(subject, html_content, from_email, to)
            msg.attach_alternative(html_content, "text/html")

            conn.send_messages([msg,])             # 我们用send_messages发送邮件
            conn.close()                           # 发送完毕记得关闭连接

看来,也不是很难吧!
django.core.mail 的 get_connection()方法返回你当前使用的邮件后端的实例。
get_connection(backend=None,fail_silently=False,*args, **kwargs)
默认情况下,对 get_connection() 的调用会返回一个邮件后端实例,具体是哪个后端由EMAIL_BACKEND 配置项决定。如果指定了``backend`` 参数,就会对该后端进行实例化。

友情提示:在发送的HTML邮件中包含图片时,应该制定可以通过http访问的地址。如:http://www.baidu.com/medias/xxx.png




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 我可以给你一些建议吗?用Python Django发送电子邮件可以利用Django的内置模块,如django.core.mail来发送电子邮件。你可以参考官方文档中的指导:https://docs.djangoproject.com/en/2.2/topics/email/。此外,也可以使用第三方库,如Django-mailer和Django-mail-queue来发送邮件,这可以帮助您更容易地实现更多功能。 ### 回答2: PythonDjango是一个强大的Web框架,可以方便地实现发送邮件的功能。Django提供了一个内置的邮件模块用于管理和发送电子邮件,可以通过简单的配置和调用就可以实现邮件发送。 首先,需要在Django的settings.py文件中进行邮件配置。可以设置SMTP服务器的主机、端口、账号、密码等信息。例如: ```python EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend' EMAIL_HOST = 'smtp.example.com' # SMTP服务器主机 EMAIL_PORT = 587 # SMTP服务器端口 EMAIL_HOST_USER = 'your_email@example.com' # 邮箱账号 EMAIL_HOST_PASSWORD = 'your_password' # 邮箱密码 EMAIL_USE_TLS = True # 启用TLS加密 DEFAULT_FROM_EMAIL = 'your_email@example.com' # 默认发件人 ``` 接下来,可以在Django的视图函数或模型方法中使用EmailMessage类来创建邮件对象,并通过send()方法发送邮件。例如: ```python from django.core.mail import EmailMessage def send_email(request): subject = '邮件主题' message = '邮件内容' from_email = 'your_email@example.com' # 发件人,可选项,如果不填则使用DEFAULT_FROM_EMAIL to_email = ['to_email@example.com'] # 收件人,可以是一个列表 cc_email = ['cc_email@example.com'] # 抄送人,可选项,可以是一个列表 email = EmailMessage(subject, message, from_email, to_email, cc=cc_email) email.send() ``` 通过调用EmailMessage类的构造函数,可以传入邮件的主题、内容、发件人、收件人和抄送人等信息。最后调用send()方法即可发送邮件。 此外,还可以设置附件、HTML内容、邮件头等更多参数,以满足不同的发送需求。 总结来说,Django提供了丰富的邮件管理功能,可以方便地处理邮件发送和配置。使用PythonDjango框架,我们可以轻松实现邮件发送功能,提升Web应用的用户体验。 ### 回答3: 在Python中使用Django发送邮件相对简单。首先,我们需要在settings.py文件中配置邮件设置。 在settings.py文件中,需要进行以下配置: 1. 设置邮件主机和端口:在EMAIL_HOST中设置邮件主机地址,例如"smtp.gmail.com",在EMAIL_PORT中设置邮件主机端口号,例如"587"。 2. 设置邮件认证信息:在EMAIL_HOST_USER中设置发件人的邮箱地址,例如"example@gmail.com",在EMAIL_HOST_PASSWORD中设置发件人的邮箱密码。 3. 设置邮件使用的协议:在EMAIL_USE_TLS中设置是否使用TLS(传输层安全)协议进行加密通信,一般情况下可以设置为True。 4. 设置邮件发送的默认地址:在DEFAULT_FROM_EMAIL中设置发送邮件的默认地址,例如"example@gmail.com"。 一旦配置完成,我们就可以在视图函数或其他需要发送邮件的地方使用Django提供的邮件模块进行邮件发送。下面是一个发送邮件的示例代码: ```python from django.core.mail import EmailMessage def send_email(request): email = EmailMessage( 'Hello', 'Body goes here', 'example@gmail.com', ['recipient1@example.com', 'recipient2@example.com'], ['bcc@example.com'], reply_to=['another@example.com'], headers={'Message-ID': 'foo'}, ) email.send() ``` 在上面的示例中,我们创建了一个EmailMessage对象,设置了邮件的主题、内容以及发送和接收地址等信息,并调用`send()`方法发送邮件。 需要注意的是,为了能够发送邮件,我们需要在服务器上安装邮件客户端,例如在Linux系统上可以使用`sudo apt-get install mailutils`命令安装`mailutils`软件。 综上所述,使用Django发送邮件可以通过配置settings.py文件以及使用邮件模块来实现,非常方便快捷。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值