nul1

使用email模块和smtplib模块,内容比较固定,配好了即可实现,代码如下:

一、普通邮件发送
import smtplib
from email.mime.text import MIMEText
email_host = \'smtp.163.com\'     #邮箱地址
email_user = \'XXX@163.com\'  # 发送者账号
email_pwd = \'XXX\'  # 发送者的密码
maillist =\'XXX@XXXX.com\'
#收件人邮箱,多个账号的话,用逗号隔开
me = email_user
msg = MIMEText(\'这是个python测试邮件,不用回复。\')    # 邮件内容
msg[\'Subject\'] = \'python测试\'    # 邮件主题
msg[\'From\'] = me    # 发送者账号
msg[\'To\'] = maillist    # 接收者账号列表
smtp = smtplib.SMTP(email_host,port=25) # 连接邮箱,传入邮箱地址,和端口号,smtp的端口号是25
smtp.login(email_user, email_pwd)   # 发送者的邮箱账号,密码
smtp.sendmail(me, maillist, msg.as_string())
# 参数分别是发送者,接收者,第三个是把上面的发送邮件的内容变成字符串
smtp.quit() # 发送完毕后退出smtp
print (\'email send success.\')
注意
1. 发送者密码这里不是平时登录邮箱的密码,而是开启登录第三方邮件客户端的授权码。
2. 多数邮箱的smtp的端口号都是25,个别的请具体确认。

发邮件的代码封装成函数:
import smtplib
from email.mime.text import MIMEText


def send_mail(username, passwd, recv, title, content, mail_host=\'smtp.163.com\', port=25):
    \'\'\'
    发送邮件函数,默认使用163smtp
    :param username: 邮箱账号 xx@163.com
    :param passwd: 邮箱密码
    :param recv: 邮箱接收人地址,多个账号以逗号隔开
    :param title: 邮件标题
    :param content: 邮件内容
    :param mail_host: 邮箱服务器
    :param port: 端口号
    :return:
    \'\'\'
    msg = MIMEText(content)  # 邮件内容
    msg[\'Subject\'] = title  # 邮件主题
    msg[\'From\'] = username  # 发送者账号
    msg[\'To\'] = recv  # 接收者账号列表
    smtp = smtplib.SMTP(mail_host, port=port)  # 连接邮箱,传入邮箱地址,和端口号,smtp的端口号是25
    smtp.login(username, passwd)  # 发送者的邮箱账号,密码
    smtp.sendmail(username, recv, msg.as_string())
    # 参数分别是发送者,接收者,第三个是把上面的发送邮件的内容变成字符串
    smtp.quit()  # 发送完毕后退出smtp
    print(\'email send success.\')


email_user = \'xxxx@163.com\'  # 发送者账号
email_pwd = \'xxxxx\'  # 发送者密码
maillist = \'XXX@XXX.com\'
title = \'测试邮件标题\'
content = \'这里是邮件内容\'
send_mail(email_user, email_pwd, maillist, title, content)
二、发带附件的邮件
import smtplib
#smtplib这个模块是管发邮件
from email.mime.text import MIMEText
#构造邮件内容
from email.mime.multipart import MIMEMultipart
#发带附件的邮件用的
email_host = \'smtp.163.com\'     #邮箱服务器地址
email_user = \'XXX@163.com\'  # 发送者账号
email_pwd = \'XXX\'
# 发送者密码是邮箱的授权码,不是登录的密码
maillist = \'XXX@XXX.com\'
#收件人邮箱,多个账号的话,用逗号隔开
new_msg = MIMEMultipart()
#构建了一个能发附件的邮件对象
new_msg.attach(MIMEText(\'这是Python测试发邮件的邮件,不要回复\'))
# 邮件内容
new_msg[\'Subject\'] = \'Python测试邮件带附件\'    # 邮件主题
new_msg[\'From\'] = email_user    # 发送者账号
new_msg[\'To\'] = maillist    # 接收者账号列表
att = MIMEText(open(\'like_report.txt\').read())
att["Content-Type"] = \'application/octet-stream\'
att["Content-Disposition"] = \'attachment; filename="haha.txt"\'
new_msg.attach(att)
smtp = smtplib.SMTP(email_host,port=25) # 连接邮箱,传入邮箱地址,和端口号,smtp的端口号是25
smtp.login(email_user, email_pwd)   # 发送者的邮箱账号,密码
smtp.sendmail(email_user, maillist, new_msg.as_string())
# 参数分别是发送者,接收者,第三个是把上面的发送邮件的内容变成字符串
smtp.quit() # 发送完毕后退出smtp
print (\'email send success.\')

三、封装发送邮件的类并验证
class SendMail(object):
    def __init__(self,username,passwd,recv,title,content,
                 file=None,
                 email_host=\'smtp.163.com\',port=25):
        self.username = username
        self.passwd = passwd
        self.recv = recv
        self.title = title
        self.content = content
        self.file = file
        self.email_host = email_host
        self.port = port
    def send_mail(self):
        msg = MIMEMultipart()
        #发送内容的对象
        if self.file:#处理附件的
            att = MIMEText(open(self.file).read())
            att["Content-Type"] = \'application/octet-stream\'
            att["Content-Disposition"] = \'attachment; filename="%s"\'%self.file
            msg.attach(att)
        msg.attach(MIMEText(self.content))#邮件正文的内容
        msg[\'Subject\'] = self.title  # 邮件主题
        msg[\'From\'] = self.username  # 发送者账号
        msg[\'To\'] = self.recv  # 接收者账号列表
        self.smtp = smtplib.SMTP(self.email_host,port=self.port)
        #发送邮件服务器的对象
        self.smtp.login(self.username,self.passwd)
        try:
            self.smtp.sendmail(self.username,self.recv,msg.as_string())
        except Exception as e:
            print(\'出错了。。\',e)
        else:
            print(\'发送成功!\')
    def __del__(self):
        self.smtp.quit()

if __name__ == \'__main__\':
    m = SendMail(
        username=\'XXX@163.com\',passwd=\'XXX\',recv=\'XXX@XXX.com\',
        title=\'新鞋的发送邮件\',content=\'哈哈哈啊哈哈哈哈\',file=\'like_report.txt\'
    )
    m.send_mail()

说句实在的,挺喜欢拿别人封装好的类直接拿来用。爽歪歪。



分类:

技术点:

相关文章: