【Python】使用smtplib+email实现邮件发送 正文+附件+抄送

使用smtplib+email实现邮件发送 正文+附件+抄送

可以先封装一个Email类

class Email(object):

    def __init__(self,host,user,pwd,milelist,text,Subject,cclist):
        self.host = host #发件服务器地址
        self.user = user #发件人邮箱
        self.pwd = pwd #发件人密码
        self.milelist = milelist #收件人邮箱,如果多个字符串邮箱之间用逗号隔开
        self.text = text  #邮件正文
        self.Subject = Subject #邮件主题
        self.cclist = cclist  # 抄送人员邮箱

    def send_text(self):
        if "qq" in self.milelist:
            self.msg = MIMEText(self.text)
        else:
            self.msg = MIMEText(self.text, 'plain', 'utf-8')  # 执行utf-8编码
            self.msg["Accept-Language"] = "zh-CN"  # 添加两个属性
            self.msg["Accept-Charset"] = "ISO-8859-1,utf-8"
        self.msg["Subject"]=self.Subject
        self.msg["From"]=self.user
        self.msg["To"]=self.milelist
        self.msg["Cc"] = self.cclist

    def send_file(self,file):
        '''
        file:字典形式入参,key:文件的绝对路径,values:文件名称
        '''
        self.msg = MIMEMultipart()
        self.msg["Subject"] = self.Subject
        self.msg["From"] = self.user
        self.msg["To"] = self.milelist
        self.msg["Cc"] = self.cclist
        for i in range(len(file)):
            try:
                att = MIMEText(open(file[i], 'rb').read(), 'base64', 'gb2312')
                att["Content-Type"] = 'application/octet-stream'
                att["Content-Disposition"] = 'attachment; filename="' + file[i].split("\\")[-1] + '"'  # 这里的filename可以任意写,写什么名字,邮件中显示什么名字
            except :
                print("附件的文件路径错误:")
            else:
                self.msg.attach(att)
        #有些邮箱正文会乱码,需要指定为utf-8编码然后再添加两个属性,但是有些邮箱不支持该方法,添加后正文会变为空
        #所以要条件判断一下,下例是qq邮箱不支持,所以判断一下,如果是qq邮箱,就不用指定utf8
        if "qq" in milelist:
            self.msg.attach(MIMEText(self.text))
        else:
            self.msg.attach(MIMEText(self.text, 'plain', 'utf-8'))  #执行utf-8编码
            self.msg["Accept-Language"] = "zh-CN"  #添加两个属性
            self.msg["Accept-Charset"] = "ISO-8859-1,utf-8"

    def send(self):
        try:
            self.smtp=smtplib.SMTP(self.host,port=25)  #连接邮件服务器,传入发件服务器地址和端口号
        except :
            print("无法连接邮件服务器")
        else:
            try:
                self.smtp.login(self.user,self.pwd)  #登陆发件人邮箱,传入邮箱地址和密码
            except :
                print("发件人邮箱登陆失败:")
            else:
                self.smtp.sendmail(self.user,self.milelist.split(",")+self.cclist.split(","),self.msg.as_string()) #发送邮件,参数分别是发件人、收件人、发件内容变成字符串
        finally:
            self.smtp.quit() #关闭发件服务器连接

写一个测试类调用

host='smtp.139.com' #发件服务器地址
user='XXX@139.com' #发送邮件用户
pwd='XXX' #密码
milelist='XXX@139.com,XXX@qq.com' #收件人邮箱,如果多个邮箱字符串中间用逗号隔开
cclist='XXX@139.com' #抄送邮箱,如果多个邮箱字符串中间用逗号隔开
text="邮件正文11122\n换行了"   #邮件正文
Subject="邮件主题" #邮件主题
file=(r"E:\123abc.jpg",r"E:\abc.docx") #附件地址

a=Email(host,user,pwd,milelist,text,Subject,cclist) #创建对象
#a.send_text()  #如果只发送正文,调用该方法
a.send_file(file) #如果正文+附件,调用该方法需要传入file附件元祖形式入参,多个文件地址用逗号隔开
a.send() #发送邮件

 在python3.6下可运行,测试范例可下载:https://download.csdn.net/download/han123456o/11851901

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
以下是一些测试Python使用smtplib模块来实现Email客户端的步骤: 1. 首先,确保您已经安装了Pythonsmtplib模块,您可以使用以下命令来检查是否已安装: ``` import smtplib ``` 如果没有报错,则已安装。 2. 然后,您需要创建一个SMTP对象,以便连接到您的邮件服务器。您可以使用以下代码: ``` smtpObj = smtplib.SMTP('邮件服务器地址', 端口号) ``` 请注意,在上面的代码中,您需要将“邮件服务器地址”和“端口号”替换为您的邮件服务器的实际地址和端口号。 3. 接下来,您需要使用您的邮件服务器的凭据进行身份验证。您可以使用以下代码: ``` smtpObj.login('您的用户名', '您的密码') ``` 请注意,在上面的代码中,您需要将“您的用户名”和“您的密码”替换为您的邮件服务器的实际用户名和密码。 4. 然后,您可以使用以下代码发送邮件: ``` smtpObj.sendmail('发件人', '收件人', '邮件内容') ``` 请注意,在上面的代码中,您需要将“发件人”、“收件人”和“邮件内容”替换为您实际的发件人、收件人和邮件内容。 5. 最后,您可以使用以下代码关闭SMTP对象: ``` smtpObj.quit() ``` 这将断开与您的邮件服务器的连接。 6. 在测试期间,您可以使用邮件服务器提供的Webmail界面来检查是否已成功发送电子邮件。如果您收到了电子邮件,则表示测试已成功。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值