利用python發(fā)送email郵件

Python發(fā)送郵件代碼,Python2/3都可以直接使用。

發(fā)送普通郵件

發(fā)送文本和html普通郵件如下:

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

import smtplib

def _format_addr(s):
    name, addr = parseaddr(s)
    return formataddr((Header(name, 'utf-8').encode(), addr))

def get_server(username):
    """
    通過(guò)郵箱地址獲得郵箱服務(wù)器
    :param username:用戶(hù)名,比如:123456@qq.com
    :return: 郵箱服務(wù)器地址,可以根據(jù)自己實(shí)際業(yè)務(wù)添加,比如:smtp.qq.com
    """
    servers = {'qq' : 'smtp.qq.com'
               , '126' : 'smtp.126.com'
               , '163' : 'smtp.163.com'
               , '139' : 'smtp.139.com'}

    for key,value in servers.items():
        if key in username:
            return value

def send_mail(username, password, to, sender_name, subject, content, email_type):
    """
    :param username: 
    :param password: 
    :param to: 接收者列表 []
    :param sender_name: 
    :param subject: 
    :param content: 
    :param email_type: 
    :return: 
    """
    from_addr = username
    password = password
    to_addr = to
    smtp_server = get_server(username)

    # 郵件正文是MIMEText類(lèi)型
    msg = MIMEText('%s'%(content), '%s'%(email_type), 'utf-8')
    msg['From'] = _format_addr('%s<%s>' % (sender_name, from_addr))
    msg['To'] = _format_addr('<%s>' % to_addr)
    msg['Subject'] = Header('%s'%(subject), 'utf-8').encode()

    # 普通登陸端口是25,帶ssl驗(yàn)證時(shí)候端口是465
    # smtp_server = 'smtp.exmail.qq.com'
    # server = smtplib.SMTP_SSL(smtp_server, 465)
    server = smtplib.SMTP(smtp_server, 25)
    server.set_debuglevel(1)
    server.login(from_addr, password)
    server.sendmail(from_addr, to_addr, msg.as_string())
    server.quit()

if __name__ == '__main__':
    """發(fā)送簡(jiǎn)單文本郵件"""
    username = '******@126.com'
    password = '******'
    sender_name = '******@126.com'
    subject = 'test 郵件'
    content = '<html><h1>ikeguang 的來(lái)信</h1></html> <a 
    # email_type 取值:plain,文本類(lèi)型郵件;html,html類(lèi)型郵件
    email_type = 'html'
    _to = ['******@126.com', '******@qq.com']
    for to in _to:
        send_mail(username, password, to, sender_name, subject, content, email_type)
        print('send mail to %s success' % to)

發(fā)送帶附件的郵件

def send_mail_multipart(username, password, to, sender_name, subject, content, email_type):
    from_addr = username
    password = password
    to_addr = to
    smtp_server = get_server(username)

    msg = MIMEMultipart()
    # 郵件正文是MIMEText類(lèi)型
    msg.attach(MIMEText('%s'%(content), '%s'%(email_type), 'utf-8'))
    msg['From'] = _format_addr('%s<%s>' % (sender_name, from_addr))
    msg['To'] = _format_addr('<%s>' % to_addr)
    msg['Subject'] = Header('%s'%(subject), 'utf-8').encode()

    # 讀取附件
    filename = 'D:/我的文件/Codes/PyCode/source/image/0.jpg'
    with open(filename, 'rb') as f:
        # 設(shè)置附件的MIME和文件名,這里是png類(lèi)型:
        mime = MIMEBase('image', 'jpg', filename='0.jpg')
        # 加上必要的頭信息:
        mime.add_header('Content-Disposition', 'attachment', filename='0.jpg')
        mime.add_header('Content-ID', '<0>')
        mime.add_header('X-Attachment-Id', '0')
        # 把附件的內(nèi)容讀進(jìn)來(lái):
        mime.set_payload(f.read())
        # 用Base64編碼:
        encoders.encode_base64(mime)
        # 添加到MIMEMultipart:
        msg.attach(mime)

    # 普通登陸端口是25,帶ssl驗(yàn)證時(shí)候端口是465
    # smtplib.SMTP_SSL(smtp_server, 465)
    server = smtplib.SMTP(smtp_server, 25)
    server.set_debuglevel(1)
    server.login(from_addr, password)
    server.sendmail(from_addr, [to_addr], msg.as_string())
    server.quit()

作者:柯廣的網(wǎng)絡(luò)日志 ? 利用python發(fā)送email郵件


微信公眾號(hào):Java大數(shù)據(jù)與數(shù)據(jù)倉(cāng)庫(kù)