python 發(fā)送email 郵箱

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# Created by susecjh on 2017/10/23

from re import match
import smtplib
from email.mime.text import MIMEText
from email.header import Header
from email.utils import parseaddr, formataddr


# 封裝qq郵箱,gmail郵箱,163郵箱的發(fā)送
class EmailPost(object):
    def __init__(self, tp, from_addr, password):
        """
        :param type: 你發(fā)送郵箱的方式,可選內(nèi)容為:qq,QQ,gmail,163
        :param from_addr: 你的郵箱賬號(hào)
        :param password: 你的郵箱密碼,其中qq方式的發(fā)送password為授權(quán)碼
        """
        if not isinstance(tp, str):
            raise ValueError('type is not a str, please input "qq","QQ","gmail","163"!')
        if tp == 'qq' or tp == 'QQ':
            if match(r'^\w+@qq.com$', from_addr) is None:
                raise ValueError('The email, %s , is not a %s email' % (from_addr, tp))
        if tp == 'gmail':
            if match(r'^\w+@gmail.com$', from_addr) is None:
                raise ValueError('The email, %s , is not a %s email' % (from_addr, tp))
        if tp == '163':
            if match(r'^\w+@163.cn$', from_addr) is None:
                raise ValueError('The email, %s , is not a %s email' % (from_addr, tp))
        self.__type = tp
        self.__from_addr = from_addr
        self.__password = password
        self.open()
    
    def open(self):
        """
        :param type: 郵箱類型
        :return: 返回一個(gè)SMTP_SSL對(duì)象
        """
        if self.__type == 'qq' or self.__type == 'QQ':
            self.__server = self.open_qq()
        if self.__type == 'gmail':
            self.__server = self.open_gmail()
        if self.__type == '163':
            self.__server = self.open_163()
        
        self.__server.login(self.__from_addr, self.__password)
    
    def open_qq(self):
        return smtplib.SMTP_SSL('smtp.qq.com', 465)
    
    def open_gmail(self):
        return smtplib.SMTP_SSL('smtp.gmail.com', 587)
    
    def open_163(self):
        return smtplib.SMTP_SSL('smtp.163.com', 465)
    
    def post(self, to_addr, msg, subject, subtype='plain', **kwargs):
        """
            msg:你想要發(fā)送的內(nèi)容,可以是html的方式
            subject----主題
            kwargs:
                subtype:發(fā)送內(nèi)容的格式----   
                                           'plain'---發(fā)送的文本內(nèi)容,是默認(rèn)值
                                           'html'----發(fā)送html方式
                                           'all'----用時(shí)支持以上兩種方式
                html_msg----'all' 存在時(shí)生效,存儲(chǔ)html方式的內(nèi)容
                from_name----發(fā)送人昵稱
                to_name----接受人昵稱
                file_path-----附加文件地址
        """
        if subtype != 'plain' and subtype != 'html' and subtype != 'all':
            raise ValueError('The subtype is %s ,please input "plain" , "html" or "all".' % subtype)
        # 設(shè)置message內(nèi)容
        message = MIMEText(msg, subtype, 'utf-8')
        message['From'] = _format_addr('%s<%s>' % (self.__from_addr, kwargs.get('from_addr', 'susecjh')))
        message['To'] = _format_addr('%s<%s>' % (to_addr, kwargs.get('to_addr', '用戶')))
        message['Subject'] = Header(subject, 'utf-8').encode()
        self.__server.set_debuglevel(1)
        self.__server.sendmail(from_addr=self.__from_addr, to_addrs=to_addr, msg=message.as_string())
    
    def __del__(self):
        self.__server.quit()


def _format_addr(s):
    name, addr = parseaddr(s)
    return formataddr((Header(name, 'utf-8').encode(), addr))
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 引入smtplib和email.mime.text.MIMEText兩個(gè)庫(kù)可以完成發(fā)送郵件的功能代碼邏輯順序:初始...
    瀟灑坤閱讀 252評(píng)論 0 0
  • 前言 在進(jìn)行日常的自動(dòng)化測(cè)試實(shí)踐中,我們總是需要將測(cè)試過(guò)程中的記錄、結(jié)果等等等相關(guān)信息通過(guò)自動(dòng)的手段發(fā)送給相關(guān)人員...
    苦葉子閱讀 756評(píng)論 0 5
  • 下面的文件打開沒有使用with語(yǔ)句,是不規(guī)范的。實(shí)測(cè)可用。給出的鏈接是在學(xué)習(xí)過(guò)程中用到的有用的鏈接,代碼是根據(jù)這些...
    NoneLand閱讀 1,447評(píng)論 0 1
  • 原理 網(wǎng)上已經(jīng)有了很多的教程講解相關(guān)的發(fā)送郵件的原理,在這里還是推薦一下廖雪峰老師的Python教程,講解通俗易懂...
    MrYun閱讀 957評(píng)論 0 0
  • (看了數(shù)個(gè)視頻,中有“經(jīng)典之后再無(wú)經(jīng)典,紅磡搖滾演唱會(huì)之竇唯”) 隨意,毫無(wú)張狂地走動(dòng)。 沼澤草地中水仙一般的存在...
    獸眸深情如獸心閱讀 777評(píng)論 7 7

友情鏈接更多精彩內(nèi)容