Python發(fā)送郵件的實例代碼講解
一、郵件發(fā)送示例
郵件發(fā)送示例
flask_email及smtplib原生郵件發(fā)送示例,適用于基于Flask框架開發(fā),但是內(nèi)部設(shè)置的定時任務(wù)發(fā)送郵件/或提供離線接口發(fā)送郵件操作
1.flask config配置
# QQ郵箱配置 MAIL_DEBUG = True # 開啟debug,便于調(diào)試看信息 MAIL_SUPPRESS_SEND = False # 發(fā)送郵件,為True則不發(fā)送 MAIL_SERVER = 'smtp.qq.com' # 郵箱服務(wù)器 MAIL_PORT = 465 # 端口 MAIL_USE_SSL = True # 重要,qq郵箱需要使用SSL MAIL_USE_TLS = False # 不需要使用TLS MAIL_USERNAME = '@qq.com' # 填郵箱 MAIL_PASSWORD = '' # 填授權(quán)碼 FLASK_MAIL_SENDER = '@qq.com' # 郵件發(fā)送方 FLASK_MAIL_SUBJECT_PREFIX = '' # 郵件標(biāo)題 MAIL_DEFAULT_SENDER = '@qq.com' # 填郵箱,默認(rèn)發(fā)送者
2.示例代碼
import smtplib import constant # 定義常量文件 from email.header import Header from email.mime.text import MIMEText constant.SMTP_SERVER = 'smtp.qq.com' constant.PORT = 465 class EmailSender(object): def __init__(self, subject, receivers, sender='ss@qq.com', password='123456', offline=False, html_body=None, text_body=None, **kwargs): self.subject = subject self.receivers = receivers self.sender = sender self.password = password if offline: if html_body: self.send_body = html_body self._subtype = 'html' elif text_body: self.send_body = text_body self._subtype = 'plain' self.send_email_offline() else: from flask_mail import Mail self.mail = Mail() dic = dict(kwargs) self.send_email(html_body, text_body, attachments=dic.get("attachments"), sync=dic.get("sync")) def send_email_offline(self): try: message = MIMEText(self.send_body, self._subtype, 'utf-8') message['From'] = self.sender message['To'] = ','.join(self.receivers) message['Subject'] = Header(self.subject, 'utf-8') smtpObj = smtplib.SMTP_SSL(constant.SMTP_SERVER, constant.PORT) smtpObj.login(self.sender, self.password) smtpObj.sendmail( self.sender, self.receivers, message.as_string()) smtpObj.quit() except smtplib.SMTPException: return "smtp服務(wù)器發(fā)送異常 >> 無法發(fā)送郵件" except Exception as e: return f"郵件發(fā)送失敗 >> {e}" def send_email(self, text_body, html_body, attachments=None, sync=False): from threading import Thread from flask import current_app from flask_mail import Message try: msg = Message(self.subject, recipients=self.receivers) msg.body = text_body msg.html = html_body if attachments: for attachment in attachments: msg.attach(*attachment) if not sync: self.mail.send(msg) else: Thread(target=self.send_async_email, args=(current_app._get_current_object(), msg)).start() except Exception as e: return f"郵件發(fā)送失敗 >> {e}" def send_async_email(self, app, msg): with app.app_context(): try: self.mail.send(msg) except Exception as e: print(f"郵件發(fā)送錯誤信息:{e}")
3.使用
err = EmailSender(subject='吃貨詢問', receivers=["123@qq.com", "1234@qq.cn"], text_body='吃了沒呀?', offline=True) if err: print(err)
以上3點(diǎn)就是關(guān)于Python發(fā)送郵件的全部知識點(diǎn),感謝大家的學(xué)習(xí)和對腳本之家的支持。
相關(guān)文章
解決jupyter notebook圖片顯示模糊和保存清晰圖片的操作
這篇文章主要介紹了解決jupyter notebook圖片顯示模糊和保存清晰圖片的操作方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-04-04pycharm 將django中多個app放到同個文件夾apps的處理方法
今天小編就為大家分享一篇pycharm 將django中多個app放到同個文件夾apps的處理方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-05-05Python+Matplotlib實現(xiàn)繪制三維折線圖
立體圖視覺上層次分明色彩鮮艷,具有很強(qiáng)的視覺沖擊力,讓觀看的人駐景時間長,留下深刻的印象。今天我們就通過這篇文章來了解如何用python中的matplotlib庫繪制漂亮的三維折線圖吧2023-03-03python初學(xué)之用戶登錄的實現(xiàn)過程(實例講解)
下面小編就為大家分享一篇python初學(xué)之用戶登錄的實現(xiàn)過程(實例講解),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2017-12-12python爬蟲數(shù)據(jù)保存到mongoDB的實例方法
在本篇文章里小編給大家整理的是一篇關(guān)于python爬蟲數(shù)據(jù)保存到mongoDB的實例方法,有需要的朋友們可以參考下。2020-07-07Python腳本按照當(dāng)前日期創(chuàng)建多級目錄
今天小編就為大家分享一篇關(guān)于Python腳本按照當(dāng)前日期創(chuàng)建多級目錄,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2019-03-03