真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

初探Django線程發(fā)送郵件-創(chuàng)新互聯(lián)

最近一直在糾結(jié)一個郵件發(fā)送的問題。初探Django線程發(fā)送郵件

在本地Linux下搭建程序,不填寫EMAIL設(shè)置就可以成功發(fā)送郵件,在遠端的云服務(wù)器下的Linux環(huán)境就發(fā)送不了。在windows下搭建的程序也不能發(fā)送注冊郵件,很是奇怪。

目前創(chuàng)新互聯(lián)建站已為成百上千的企業(yè)提供了網(wǎng)站建設(shè)、域名、虛擬主機、網(wǎng)站托管運營、企業(yè)網(wǎng)站設(shè)計、崇左網(wǎng)站維護等服務(wù),公司將堅持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長,共同發(fā)展。

初步判斷是代碼沒有問題,本地Linux服務(wù)器由于以前也鼓搗過其它東西,不一定與云端服務(wù)器保持一致。于是只能從官方文檔的發(fā)送郵件說明入手,慢慢找原因。

from django.core.mail import send_mail
 
send_mail(u'郵件標(biāo)題', u'郵件內(nèi)容', 'from@example.com',
    ['to@example.com'], fail_silently=False)

在測試環(huán)境使用如上配置,就可以發(fā)送郵件了,看來得翻翻源碼才能發(fā)現(xiàn)問題。

原作者使用如下的方法發(fā)送郵件:

#!/usr/bin/env python
# -*- coding: UTF-8 -*-from django.core.mail import EmailMessage
import threading
 
class EmailThread(threading.Thread):
"""
    發(fā)送賬號激活郵件線程
"""  def __init__(self,subject='', body='', from_email=None, to=None):
        self.subject= subject
        self.body= body
        self.from_email= from_email
        self.to= to
        self.fail_silently= True
        threading.Thread.__init__(self)
 
def run(self):
        msg_email= EmailMessage(self.subject,self.body,self.from_email,self.to)
        msg_email.content_subtype= 'html'   try:
            msg_email.send(self.fail_silently)
except Exception,e:
# 記錄錯誤日志            log = open('email_error.log','a')
            log.write('%s %s
' %(time.strftime('%Y-%m-%d %H:%M:%S'),e) )
            log.close()
 
def send_email(subject='', body='', from_email=None, to=[]):
"""
    發(fā)送郵件方法
"""
    email= EmailThread(subject, body, from_email, to)
    email.start()
    email.join()

基本了解代碼的意思,但是經(jīng)過幾次摘出來最小化試驗,還是不能發(fā)送成功注冊郵件。本來通過最上面的最簡單的方法可以發(fā)送郵件,但作者使用了線程,也許是出于效率和生產(chǎn)環(huán)境的考量。于是我上網(wǎng)找了找Django線程發(fā)送郵件的例子,還真找到了。就是代碼無縮進…真是….

from django.core.mail import EmailMultiAlternatives
from django.template import loader
from settings import EMAIL_HOST_USER
from django.http import HttpResponse
import threading
 
class my_EmailThread(threading.Thread):
def __init__(self, subject, body, from_email, recipient_list, fail_silently, html):
        self.subject= subject
        self.body= body
        self.recipient_list= recipient_list
        self.from_email= from_email
        self.fail_silently= fail_silently
        self.html= html
        threading.Thread.__init__(self)
 
def run (self):
        msg= EmailMultiAlternatives(self.subject, self.body, self.from_email, self.recipient_list)
if self.html:
            msg.attach_alternative(self.body,self.html)
            msg.send(self.fail_silently)
 
def my_send_mail(subject, body, from_email, to, fail_silently=False, html=None, *args, **kwargs):
    my_EmailThread(subject, body, from_email, to, fail_silently, html).start()
def test_mail(subject='', body='', from_email=None, to=[]):
#subject = u'郵件主題'  #to_mail_list = ['abc@gmail.com','test@qq.com']  #body = loader.render_to_string('mail_template.html',{'email':email,'date':datetime.today(), })  #send_mail(subject,body,from_email,to_mail_list,html="text/html")  #my_send_mail(u'郵件標(biāo)題', u'郵件內(nèi)容', 'xxxx@163.com',['qqqq@163.com'],html="text/html")    my_send_mail(subject,body,from_email,to, html="text/html")

因為,有例子做對照,我直接把上面的代碼加入到工程中。在send_mail與EmailThread前面添加my_為了使得兩段代碼共存,還沒有搞懂整個工程的運行原理之前,還是保證原先的代碼原樣更安全些。

經(jīng)過試驗,直接傳進參數(shù),發(fā)送郵件沒有問題。但是使用變量應(yīng)用用戶信息就會發(fā)送失敗。

那么,找到上層的視圖,控制變量進行測試,看看哪個變量沒有正確替換。還真發(fā)現(xiàn)了問題。

to = [user.username]
    ....
#send_email(subject,body,from_email,to)test_mail(subject,body,from_email,to)

test_mail就是調(diào)用的新的線程發(fā)送郵件,send_mail調(diào)用的原先的線程發(fā)送。如上的兩種情況都不能發(fā)送郵件,就是因為to沒有被賦予正確的郵件地址。

send_email(u'郵件標(biāo)題', u'郵件內(nèi)容', 'xxxx@163.com',['qqqq@163.com'])

這樣的顯示調(diào)用,原先的線程函處理方法也正確的工作了,看來,上面的兩種線程發(fā)送郵件都是可用的。問題出現(xiàn)在變量上。

那么這個user.username又是什么,繼續(xù)尋找…是使用的User引入的用戶對象

from django.contrib.auth.models import User

看來問題不是出現(xiàn)在郵件發(fā)送方法上,而是用戶對象上。至于為何本地的Linux不經(jīng)配置,可以直接使用…(請教了作者,作者認為可能是django自帶的郵件服務(wù),暫時也就先這么放下這個詭異的問題)

明天開始了解下Django的用戶方面,感覺不同平臺出現(xiàn)不穩(wěn)定的情況是因為代碼還不夠健壯…看能不能有新的發(fā)現(xiàn)~


當(dāng)前文章:初探Django線程發(fā)送郵件-創(chuàng)新互聯(lián)
URL網(wǎng)址:http://weahome.cn/article/csssco.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部