1. 程式人生 > 其它 >email郵件中 內嵌iframe_python測試開發django28.傳送郵件send_mail

email郵件中 內嵌iframe_python測試開發django28.傳送郵件send_mail

技術標籤:email郵件中 內嵌iframe

前言

django發郵件的功能很簡單,只需簡單的配置即可,發郵件的程式碼裡面已經封裝好了,呼叫send_mail()函式就可以了
實現多個郵件傳送可以用send_mass_mail()函式

send_mail()函式

先匯入send_mail函式from django.core.mail import send_mail,進入原始碼裡面看看具體函式對應的引數
subject,message,from_email 和recipient_list 這四個引數是必須的。

  • subject: 字串,郵件標題。

  • message: 字串,郵件內容。

  • from_email: 字串,發件郵箱。

  • recipient_list: 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會使用預設後端的例項。

  • html_message: (可選) send_mail方法獨有,可以比較簡單地實現一個html文字的傳輸

def send_mail(subject, message, from_email, recipient_list,
fail_silently=False, auth_user=None, auth_password=None,
connection=None, html_message=None):
"""
Easy wrapper for sending a single message to a recipient list. All members
of the recipient list will see the other recipients in the 'To' field.

If auth_user is None, use the EMAIL_HOST_USER setting.
If auth_password is None, use the EMAIL_HOST_PASSWORD setting.

Note: The API for this method is frozen. New code wanting to extend the
functionality should use the EmailMessage class directly.
"""
connection = connection or get_connection(
username=auth_user,
password=auth_password,
fail_silently=fail_silently,
)
mail = EmailMultiAlternatives(subject, message, from_email, recipient_list, connection=connection)
if html_message:
mail.attach_alternative(html_message, 'text/html')

return mail.send()

settings.py配置

傳送郵件之前先在setting.py配置檔案裡面配置相關的郵箱資訊,比如我這裡是用的QQ郵箱,使用SSL加密方式,需要授權碼登入
(至於如何獲取授權碼,可以在QQ郵箱設定裡面開啟,傳送簡訊“配置郵件客戶端”到1069070069)

# settings.py
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'

EMAIL_USE_SSL = True # SSL加密方式
EMAIL_HOST = 'smtp.qq.com' # 傳送郵件的郵箱 的 SMTP伺服器,這裡用了163郵箱
EMAIL_PORT = 465 # SMTP伺服器埠
EMAIL_HOST_USER = '[email protected]' # 發件人
EMAIL_HOST_PASSWORD = '授權碼' # 密碼(這裡使用的是授權碼)
EMAIL_FROM = 'yoyo<[email protected]>' # 郵件顯示的發件人

如果是其它的企業郵箱,直接密碼登入的話,使用TLS方式

EMAIL_USE_SSL = True
EMAIL_HOST = 'smtp.xx.com' # 如果是其它企業郵箱
EMAIL_PORT = 25
EMAIL_HOST_USER = '[email protected]' # 帳號
EMAIL_HOST_PASSWORD = '**********' # 密碼
EMAIL_FROM = 'yoyo' # 郵件顯示的發件人

EMAIL_USE_SSL 和 EMAIL_USE_TLS 是互斥的,只能有一個為 True。

views和urls.py

在views.py裡面寫個檢視函式,呼叫傳送郵件的功能

from django.http import HttpResponse
from django.core.mail import send_mail

def mail(request):
send_mail('Subject here', # 主題
'Here is the message.', # 正文
'[email protected]', # 發件人
['[email protected]'], # 收件人
fail_silently=False)
return HttpResponse('郵件傳送成功,收不到就去垃圾箱找找吧!')

urls.py寫個訪問地址觸發發郵件

from django.conf.urls import url
from hello import views

urlpatterns = [
# 新增使用者
url(r'^register/', views.register),
url(r'^login/', views.login),
url(r'^reset/', views.reset_psw),
url(r'^mail/', views.mail),
]

瀏覽器上訪問http://localhost:8000/mail/後,就能收到郵件了

a1061ee3e946599ee0d8b4042bc4a9d7.png

前面講的send_mail()函式只能傳送一個郵件,如果想實現傳送多個郵件,可以用send_mass_mail()函式

send_mass_mail函式

先倒入from django.core.mail import send_mass_mail檢視對應的原始碼

def send_mass_mail(datatuple, fail_silently=False, auth_user=None,
auth_password=None, connection=None):
"""
給定tuple資料型別(subject,message,from_email,recipient_list),傳送每封郵件到每個收件人列表。 返回傳送的電子郵件數量。

如果from_email為None,請使用DEFAULT_FROM_EMAIL設定。
如果設定了auth_user和auth_password,請使用它們登入。
如果auth_user為None,請使用EMAIL_HOST_USER設定。
如果auth_password為None,請使用EMAIL_HOST_PASSWORD設定。

注意:此方法的API已凍結。 想要擴充套件的新程式碼功能應該直接使用EmailMessage類。
"""
connection = connection or get_connection(
username=auth_user,
password=auth_password,
fail_silently=fail_silently,
)
messages = [
EmailMessage(subject, message, sender, recipient, connection=connection)
for subject, message, sender, recipient in datatuple
]
return connection.send_messages(messages)

從上面介紹可以看出,需傳元祖型別的資料,如果想實現更多的給你可以用EmailMessage類

傳送多個郵件

多個郵件的配置資訊放到一個元祖裡面,傳給datatuple引數,程式碼如下

from django.http import HttpResponse
from django.core.mail import send_mail, send_mass_mail

# Create your views here.

def mass_mail(request):
'''傳送多個郵件'''
message1 = ('Subject 1',
'Here is the message',
'[email protected]', # 發件人
['[email protected]']) # 收件人,多個收件人逗號隔開
message2 = ('Another Subject2',
'Here is another message',
'[email protected]',
['[email protected]'])
send_mass_mail((message1, message2),
fail_silently=False)
return HttpResponse('郵件傳送成功,收不到就去垃圾箱找找吧!')

2019年《python3介面自動化》課程3月17-4月14開課

主講老師:上海-悠悠

上課方式:QQ群視訊線上教學

上課時間:每週六、週日晚上20:30-22:30

報名費:1000

聯絡QQ:283340479

課表詳情:2019《Python3介面自動化》課程3.17開學