Python 发邮件

# -*- coding: UTF-8 -*-
import poplib
import smtplib
import sys
import email

class popBasic:
    
    def __init__(self):
        """
        popBasic初始化
        """
        self.isLogin = False
        #self.destDir = destDir
    
    def login(self, popHost, popUser, popPassword, smtpHost, smtpUser, smtpPassword):
        """
        登录pop3和smpt服务器
        @param popHost: pop3服务器地址
        @param popUser: pop3用户名
        @param popPassword: pop3用户密码
        @param smtpHost: smtp服务器地址
        @param smtpUser: smtp用户名
        @param smtpPassword: smtp用户密码
        @return: True - 成功登录pop3与smtp; False - pop3与smtp登录失败
        """
        self.pop = poplib.POP3(popHost)
        try:
            self.pop.user(popUser)
            self.pop.pass_(popPassword)
            self.isLogin = True
            print "POP3 login OK"
            self.smtp = smtplib.SMTP(smtpHost)
            code = self.smtp.login(smtpUser, smtpPassword)
            if not (200 <= code <= 299):
                self.isLogin = True
                print "SMTP Login OK."
            else:
                self.isLogin = False
                print "SMTP Login Error."            
            return True
        except poplib.error_proto, ex:
            self.isLogin = False
            print "POP3 login Error"
            return False
        
    def getPOPInfo(self):
        """
        获取pop3服务器中登录用户的邮箱信息
        @return: 邮件总数与总字节数 例:(105, 37349795)
        number, size = getPOPInfo()
        """
        if self.isLogin:
            return self.pop.stat()
                
    def pop2smtp(self, toAdd, fromAdd):
        """
        收pop3邮件,然后转发
        @param toAdd: 新的到达地址
        @param fromAdd: 新的发送地址
        @return: void
        """
        if self.isLogin:
            for item in self.pop.list()[1]:
                number, octets = item.split(' ')
                print "POP3 downloading... number: %s" % (number)
                lines = self.pop.retr(number)[1]
                msg = email.message_from_string("\n".join(lines))
                print "download OK. begin SMTP send ..."
                msg1 = email.Message.Message()
                msg1['to'] = toAdd     
                msg1['from'] = fromAdd 
                msg1['date'] = msg['date']
                msg1['subject'] = msg['subject']
                body = ""
                if msg.is_multipart():
                    for part in msg.get_payload():
                        body = body + part.as_string()
                else:
                    body = msg.get_payload()
                mail = msg1.as_string()[:-1] + body
                self.smtp.sendmail(msg1['from'],msg1['to'], mail)
                print "send ok."
                # ---------------------------------------
                #print "begin delete pop3 mail Number: %s" % (number)
                #self.pop.dele(number)
                #print "delete ok."
                # ---------------------------------------
                exit(1)       
        
    def loguot(self):
        if self.isLogin:
            self.pop.quit()
            print "POP3 quit."
            self.smtp.close()
            print "SMTP close"

  

处理中文乱码问题

#-*- encoding: utf-8 -*-
#
!/usr/bin/env python
#
 Author: luohuijun
 
import smtplib
from email.mime.text import MIMEText
from email.header import Header

def send_email(title = '软件监控通知邮件',meial_server = '',from_name = '', from_pwd = '' ,to_name_list=[],message=''):
    msg = MIMEText(message,'html',_charset='UTF-8'#设置UTF-8编码
    msg['Subject'] =Header(title,"UTF-8")           #设置UTF-8编码
    msg['From'] = meial_server
    msg['To'] = ";".join(to_name_list)
    try:
        s = smtplib.SMTP()
        s.connect(meial_server)
        s.login(from_name,from_pwd)
        s.sendmail(from_name, to_name_list, msg.as_string()) 
        return True
    except Exception, e:
        print str(e)
        return False
    finally:
        s.close()

    
if __name__=="__main__":
    print send_email(title='软件监控通知邮件',meial_server='smtp.live.com',from_name='lhj588@live.cn',from_pwd='XXXX',to_name_list=['327677031@qq.com','lhj588@live.cn'],message='恭喜您,邮件发送成功!')

    

原文地址:https://www.cnblogs.com/lhj588/p/2499893.html