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。html

 

各大郵箱smtp服務器及端口

新浪郵箱smtp服務器
外發服務器:smtp.vip.sina.com
收件服務器:pop3.vip.sina.com
新浪免費郵件
外發服務器:smtp.sina.com.cn
收件服務器:pop3.sina.com.cn
163郵箱smtp服務器
pop: pop.163.com
smtp: smtp.163.com
QQ郵箱smtp服務器及端口
接收郵件服務器:imap.exmail.qq.com,使用SSL,端口號993
發送郵件服務器:smtp.exmail.qq.com,使用SSL,端口號465或587
yahoo郵箱smtp服務器
接:pop.mail.yahoo.com.cn
發:smtp.mail.yahoo.com
126郵箱smtp服務器
pop: pop.126.com
smtp: smtp.126.com
新浪免費郵箱
POP3:pop.sina.com
SMTP:smtp.sina.com
SMTP端口號:25
新浪VIP郵箱
POP3:pop3.vip.sina.com
SMTP:smtp.vip.sina.com
SMTP端口號:25
新浪企業郵箱
POP3:pop.sina.com
SMTP:smtp.sina.com
SMTP端口號:25
雅虎郵箱
POP3:pop.mail.yahoo.cn
SMTP:smtp.mail.yahoo.cn
SMTP端口號:25
搜狐郵箱
POP3:pop3.sohu.com
SMTP:smtp.sohu.com
SMTP端口號:25
TOM郵箱
POP3:pop.tom.com
SMTP:smtp.tom.com
SMTP端口號:25
Gmail郵箱
POP3:pop.gmail.com
SMTP:smtp.gmail.com
SMTP端口號:587 或 25
QQ郵箱
POP3:pop.exmail.qq.com
SMTP:smtp.exmail.qq.com
SMTP端口號:25
263郵箱
域名:263.net
POP3:263.net
SMTP:smtp.263.net
SMTP端口號:25
域名:x263.net
POP3:pop.x263.net
SMTP:smtp.x263.net
SMTP端口號:25
域名:263.net.cn
POP3:263.net.cn
SMTP:263.net.cn
SMTP端口號:25
域名:炫我型
POP3:pop.263xmail.com
SMTP:smtp.263xmail.com
SMTP端口號:25
21CN 免費郵箱
POP3:pop.21cn.com
SMTP:smtp.21cn.com
IMAP:imap.21cn.com
SMTP端口號:25
21CN 經濟郵郵箱
POP3:pop.21cn.com
SMTP:smtp.21cn.com
SMTP端口號:25
21CN 商務郵郵箱
POP3:pop.21cn.net
SMTP:smtp.21cn.net
SMTP端口號:25
21CN 快感郵箱
POP3:vip.21cn.com
SMTP:vip.21cn.com
SMTP端口號:25
21CN Y郵箱
POP3:pop.y.vip.21cn.com
SMTP:smtp.y.vip.21cn.com
SMTP端口號:25
中華網任我郵郵箱
POP3:rwpop.china.com
SMTP:rwsmtp.china.com
SMTP端口號:25
中華網時尚、商務郵箱
POP3:pop.china.com
SMTP:smtp.china.com
SMTP端口號:25

 

qq郵箱配置smtp

登陸qq郵箱:django

 

 

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

相關文章
相關標籤/搜索