在django1.2+python2.7環境中使用send_mail發送郵件

來源:互聯網
上載者:User

 

最近在加緊學習python2.7+django1.2,作業系統使用的是ubutntu11.

而且充分利用了SAESina AppEngine)幾乎免費的雲端服務,還可以更好的實踐在生產環境的效果。

新浪SAE的python環境的詳細情況,可以參看:SAE Python 開發人員手冊。

今天學到了發送郵件這一課。剛開始沒有使用sae的郵件服務,直接使用django.core.mail.send_mail函數。

首先在settings.py檔案中設定如下



 
  1. # email function, email notification 
  2. EMAIL_ADMIN="jorden008@gmail.com" 
  3.  
  4. EMAIL_USE_TLS=True #是否需要傳輸層安全
  5. EMAIL_HOST="smtp.gmail.com" #發送郵件的主機地址
  6. EMAIL_PORT=587#25#465 #連接埠
  7. EMAIL_HOST_USER="jorden008@gmail.com" #驗證帳號
  8. EMAIL_HOST_PASSWORD ="login_password"#驗證密碼
  9. DEFAULT_FROM_EMAIL="jorden008@gmail.com"#預設的from地址

準備使用gmail作為郵件發送代理,設定了host等資訊。

在代碼中按照下面的格式寫即可


 
  1. from django.core.mail import send_mail 
  2.  
  3. mail_body=" %s posted a new comment on the entry %s." % (comment.name, comment.content_object) 
  4.      
  5. def send_mail('new comment posted', mail_body, settings.EMAIL_HOST_USER, [settings.EMAIL_ADMIN], 
  6.               fail_silently=False):  

可是就是現實失敗,幾次嘗試都沒有成功,上網搜尋了一些資料也未果。

然後開啟django shell,嘗試在shell中發送。

進入程式根目錄,啟動shell

 
  1. python manage.py shell 

進入shell之後,鍵入下面的代碼


 
  1. from django.core.mail import send_mail 
  2. send_mail('title','content','jorden008@163.com',['jorden008@163.com']) 

還是報錯,提示我應該使用application-specific passwords,還給出一個地址,我開啟看完之後,恍然大悟,也想起來了,之前進行android開發也遇到過類似情況,是google的設定,使用代碼或者是第三方工具利用gmail作為代理髮郵件的話,不能使用gmail的登入密碼,需要申請一個臨時密碼,然後使用臨時密碼發送,這個臨時密碼是在google的使用者後台介面產生了,還可以隨時手動收回這個密碼,這樣加強了對於登入密碼的保護,其實有點像是oauth的token,或者是令牌,會失效的,可以收回。詳細情況參看http://support.google.com/accounts/bin/answer.py?hl=en&answer=185833。

於是我通過上面的網址進入下面的頁面


650) this.width=650;" border="0" alt="" src="http://www.bkjia.com/uploads/allimg/131228/134523G49-0.png" />


點擊紅框中的連結,登入之後,在頁面下部的name輸入框中輸入一個字串,沒有特殊要求,可以理解為這個臨時密碼的範圍,點擊generate password】,將出現的密碼替換settings.py中密碼項。重新進入shell,再次嘗試發送郵件,這回成功了,返回了1,返回1表示發送成功,可以到郵箱裡面查看了。

可是我的網頁還是沒有發送成功,我就開啟SAE Python 開發人員手冊,看看有沒有什麼主意的地方,看到有一頁叫做可用的服務列表】,寫到了郵件服務,我就用sae的send_mail替換了django.core.mail.send_mail。代碼更正為下面的部分。

需要去掉django.core.mail.send_mail的引用,添加sae.mail.send_mail的引用。

 
  1. from sae.mail import send_mail 
  2.  
  3. mail_body=" %s posted a new comment on the entry %s." % (comment.name, comment.content_object) 
  4.          
  5.         send_mail(settings.EMAIL_ADMIN,"new comment posted",mail_body , 
  6.             (settings.EMAIL_HOST,settings.EMAIL_PORT,settings.EMAIL_HOST_USER,settings.EMAIL_HOST_PASSWORD,settings.EMAIL_USE_TLS) 
  7.             ) 

在此開啟網頁,點擊發送郵件,一切ok了。

總結

搞定了,有幾個問題需要大家注意:

 
1.使用gmail發送郵件,其中的驗證用的密碼不能使用google的登陸密碼,使用第三方經過gmail發郵件,需要使用application 
specification password,具體的設定和說明,可以參看http://support.google.com/accounts/bin/answer.py?hl=en&answer=185833

 

2.使用國內的郵件供應商例如:新浪,163,qq等),直接使用郵箱登陸密碼驗證就可以發送。 


3.我是在sae的環境中測試發送郵件,這時候,不能使用django.core.mail.send_mail函數,需要使用sae的 
sae.mail.send_mail。詳情可以參看http://appstack.sinaapp.com/static/doc/release/testing/service.html#mail

 

本文出自 “突破中的IT結構師” 部落格,請務必保留此出處http://virusswb.blog.51cto.com/115214/788482

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.