内射老阿姨1区2区3区4区_久久精品人人做人人爽电影蜜月_久久国产精品亚洲77777_99精品又大又爽又粗少妇毛片

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

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

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

目前創(chuàng)新互聯(lián)建站已為成百上千的企業(yè)提供了網(wǎng)站建設(shè)、域名、虛擬主機(jī)、網(wǎng)站托管運(yùn)營、企業(yè)網(wǎng)站設(shè)計(jì)、崇左網(wǎng)站維護(hù)等服務(wù),公司將堅(jiān)持客戶導(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:
# 記錄錯(cuò)誤日志            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)過幾次摘出來最小化試驗(yàn),還是不能發(fā)送成功注冊郵件。本來通過最上面的最簡單的方法可以發(fā)送郵件,但作者使用了線程,也許是出于效率和生產(chǎn)環(huán)境的考量。于是我上網(wǎng)找了找Django線程發(fā)送郵件的例子,還真找到了。就是代碼無縮進(jìn)…真是….

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")

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

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

那么,找到上層的視圖,控制變量進(jìn)行測試,看看哪個(gè)變量沒有正確替換。還真發(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ā)送郵件,就是因?yàn)閠o沒有被賦予正確的郵件地址。

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

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

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

from django.contrib.auth.models import User

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

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

網(wǎng)站欄目:初探Django線程發(fā)送郵件-創(chuàng)新互聯(lián)
標(biāo)題來源:http://www.rwnh.cn/article20/csssco.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供App設(shè)計(jì)關(guān)鍵詞優(yōu)化、動態(tài)網(wǎng)站商城網(wǎng)站、App開發(fā)企業(yè)網(wǎng)站制作

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

手機(jī)網(wǎng)站建設(shè)
恭城| 新河县| 汉沽区| 湛江市| 浦城县| 乐业县| 收藏| 扬中市| 荣成市| 普兰县| 英超| 海兴县| 肥乡县| 阿拉善左旗| 招远市| 丁青县| 永定县| 什邡市| 永兴县| 方正县| 汝城县| 蓝山县| 河源市| 河西区| 天峻县| 湛江市| 长治市| 邯郸县| 格尔木市| 甘南县| 南和县| 诸城市| 精河县| 三亚市| 兴宁市| 广饶县| 霍林郭勒市| 西吉县| 孟州市| 清流县| 晋州市|