基于smtplib包制作而成,但在实践中发现一个不知道算不算是smtplib留的一个坑,在网络断开的情况下发送邮件时会抛出一个socket.gaierror的异常,但是smtplib中并没有捕获这个异常,导致程序会因这个异常终止,因此代码中针对这部分的异常进行处理,确保不会异常终止。 #!/usr/bin/env python
# -*- coding: utf-8 -*-
__author__ = 'Zoa Chou'
# see http://www.mudoom.com/Article/show/id/29.html for detail
import logging
import smtplib
import mimetypes
import socket
from email import encoders
from email.header import Header
from email.mime.text import MIMEText, MIMENonMultipart
from email.mime.base import MIMEBase
from email.utils import parseaddr, formataddr
class Mailer(object):
def __init__(self):
pass
def send_mail(self, smtp_server, from_address, to_address, subject, body, files=None):
"""
发送邮件主程序
:param smtp_server: dict 邮件服务器设置
:keyword host: string smtp服务器地址
:keyword port: int smtp服务器端口号
:keyword user: string 用户名
:keyword passwd: string 密码
:keyword ssl: bool 是否启用ssl,默认False
:keyword timeout: int 超时时间,默认10s
:param from_address: 发件人邮箱
:param to_address: 收件人邮箱
:param subject: 邮件标题
:param body: 邮件内容
:param files: 附件
:raise: NetworkError/MailerException
"""
# 格式化邮件内容
body = self._encode_utf8(body)