python 發送郵件

一 使用SMTP模塊發送郵件

複製代碼
import smtplib
from email.mime.text import MIMEText
from email.header import Header
msg_from = '***@qq.com'  # 發送方郵箱
passwd = '****'  # 填入發送方郵箱的受權碼(填入本身的受權碼,至關於郵箱密碼)
msg_to = ['****@qq.com','**@163.com','*****@163.com']  # 收件人郵箱
# msg_to = '616564099@qq.com'  # 收件人郵箱

subject = "郵件標題"  # 主題
content = "郵件內容,我是郵件內容,哈哈哈"
# 生成一個MIMEText對象(還有一些其它參數)
msg = MIMEText(content)
# 放入郵件主題
msg['Subject'] = subject
# 也能夠這樣傳參
# msg['Subject'] = Header(subject, 'utf-8')
# 放入發件人
msg['From'] = msg_from
# 放入收件人
# msg['To'] = '616564099@qq.com'
# msg['To'] = '發給你的郵件啊'
try:
    # 經過ssl方式發送,服務器地址,端口
    s = smtplib.SMTP_SSL("smtp.qq.com", 465)
    # 登陸到郵箱
    s.login(msg_from, passwd)
    # 發送郵件:發送方,收件方,要發送的消息
    s.sendmail(msg_from, msg_to, msg.as_string())
    print('成功')
except s.SMTPException as e:
    print(e)
finally:
    s.quit()
複製代碼

二 發送html格式郵件

複製代碼
import smtplib
from email.mime.text import MIMEText
from email.header import Header

msg_from = '306334678@qq.com'  # 發送方郵箱
passwd = 'ldoetnwqdjqqbjjj'  # 填入發送方郵箱的受權碼(填入本身的受權碼,至關於郵箱密碼)
msg_to = ['616564099@qq.com']  # 收件人郵箱
# msg_to = '616564099@qq.com'  # 收件人郵箱

subject = "郵件標題"  # 主題
# *************發送html的郵件**********
content = '''
<p>Python 郵件發送測試...</p>
<p><a href="http://www.baidu.com">這是一個連接</a></p>
'''
# 生成一個MIMEText對象
msg = MIMEText(content)
# 放入郵件主題
msg['Subject'] = subject
# 也能夠這樣傳參
# msg['Subject'] = Header(subject, 'utf-8')
# 放入發件人
msg['From'] = msg_from
# 放入收件人
# msg['To'] = '616564099@qq.com'
# msg['To'] = '發給你的郵件啊'
try:
    # 經過ssl方式發送
    s = smtplib.SMTP_SSL("smtp.qq.com", 465)
    # 登陸到郵箱
    s.login(msg_from, passwd)
    # 發送郵件:發送方,收件方,要發送的消息
    s.sendmail(msg_from, msg_to, msg.as_string())
    print('成功')
except s.SMTPException as e:
    print(e)
finally:
    s.quit()
複製代碼

三 發送帶附件的郵件

複製代碼
import smtplib
from email.mime.text import MIMEText
from email.header import Header
from email.mime.multipart import MIMEMultipart
from email.mime.base import MIMEBase
from email.mime.image import MIMEImage
from email import  encoders
msg_from = '306334678@qq.com'  # 發送方郵箱
passwd = '***'  # 填入發送方郵箱的受權碼(填入本身的受權碼,至關於郵箱密碼)
msg_to = ['616564099@qq.com']  # 收件人郵箱

subject = "郵件標題"  # 主題
# 建立一個帶附件的實例
msg = MIMEMultipart()
# 放入郵件主題
msg['Subject'] = subject
# 也能夠這樣傳參
# msg['Subject'] = Header(subject, 'utf-8')
# 放入發件人
msg['From'] = msg_from

# 郵件正文內容
msg.attach(MIMEText('Python 郵件發送測試……', 'plain', 'utf-8'))

# 構造附件1,傳送當前目錄下的 test.txt 文件
att1 = MIMEText(open('test.txt', 'rb').read(), 'base64', 'utf-8')
att1["Content-Type"] = 'application/octet-stream'
# 這裏的filename能夠任意寫,寫什麼名字,郵件中顯示什麼名字
att1["Content-Disposition"] = 'attachment; filename="test.txt"'
msg.attach(att1)

# 構造附件2,
with open('test.png', 'rb') as f:
    # 設置附件的MIME和文件名,這裏是png類型:
    mime = MIMEBase('image', 'png', filename='test.png')
    # 加上必要的頭信息:
    mime.add_header('Content-Disposition', 'attachment', filename='test.png')
    mime.add_header('Content-ID', '<0>')
    mime.add_header('X-Attachment-Id', '0')
    # 把附件的內容讀進來:
    mime.set_payload(f.read())
    # 用Base64編碼:
    encoders.encode_base64(mime)
    # 添加到MIMEMultipart:
    msg.attach(mime)
# 構造附件3,圖片格式
fp = open('test.png', 'rb')
msgImage = MIMEImage(fp.read())
fp.close()
# 定義圖片 ID,在 HTML 文本中引用
msgImage.add_header('Content-ID', '<image1>')
msg.attach(msgImage)
try:
    # 經過ssl方式發送
    s = smtplib.SMTP_SSL("smtp.qq.com", 465)
    # 登陸到郵箱
    s.login(msg_from, passwd)
    # 發送郵件:發送方,收件方,要發送的消息
    s.sendmail(msg_from, msg_to, msg.as_string())
    print('成功')
except s.SMTPException as e:
    print(e)
finally:
    s.quit()
複製代碼

 四 Django發送郵件

在setting中配置

複製代碼
# EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'smtp.qq.com'  # 若是是 163 改爲 smtp.163.com
EMAIL_PORT = 465
EMAIL_HOST_USER = '306334678@qq.com'  # 賬號
EMAIL_HOST_PASSWORD = '***'  # 密碼
DEFAULT_FROM_EMAIL = EMAIL_HOST_USER
#這樣收到的郵件,收件人處就會這樣顯示
#DEFAULT_FROM_EMAIL = 'lqz<'306334678@qq.com>'
EMAIL_USE_SSL = True   #使用ssl
#EMAIL_USE_TLS = False # 使用tls

#EMAIL_USE_SSL 和 EMAIL_USE_TLS 是互斥的,即只能有一個爲 True
複製代碼

view視圖函數

複製代碼
    from django.core.mail import send_mail
    import threading
    from mybbs import settings

    t = threading.Thread(target=send_mail, args=("您的文章%s新增了一條評論內容" ,
                                                 'ddd',
                                                 settings.EMAIL_HOST_USER,
                                                 ["616564099@qq.com"])
                         )
    t.start()
複製代碼

一次性發多封郵件

複製代碼
from django.core.mail import send_mass_mail

message1 = ('第一封郵件標題', '這是郵件內容', 'from@example.com', ['first@example.com', 'other@example.com'])
message2 = ('第二封郵件標題', '這是郵件內容', 'from@example.com', ['second@test.com'])
'''
fail_silently: (可選)布爾值。爲 False 時, send_mail 會拋出 smtplib.SMTPException 異常。smtplib 文檔列出了全部可能的異常。 這些異常都是 SMTPException 的子類
'''
send_mass_mail((message1, message2), fail_silently=False)
'''
send_mail 每次發郵件都會創建一個鏈接,發多封郵件時創建多個鏈接。而 send_mass_mail 是創建單個鏈接發送多封郵件,因此一次性發送多封郵件時 send_mass_mail 要優於 send_mail。
'''
複製代碼

攜帶附件或發送html(須要接收方支持)

複製代碼
from django.core.mail import EmailMultiAlternatives
# subject 主題 content 內容 to_addr 是一個列表,發送給哪些人
msg = EmailMultiAlternatives('郵件標題', '郵件內容', '發送方', ['接收方'])
msg.content_subtype = "html"
# 添加附件(可選)
msg.attach_file('test.txt')
# 發送
msg.send()
複製代碼

備註:send_mail 每次發郵件都會創建一個鏈接,發多封郵件時創建多個鏈接。而 send_mass_mail 是創建單個鏈接發送多封郵件,因此一次性發送多封郵件時 send_mass_mail 要優於 send_mail。django

各大郵箱smtp服務器及端口

  View Code

 qq郵箱配置smtp

登陸qq郵箱:服務器

 

開啓smtp服務,生成受權碼app

相關文章
相關標籤/搜索