python使用smtp的587端口来自动发送带附件的邮件
admin
2023-07-20 13:42:41
0次

之前一直使用linux的sendEmail来自动发送邮件,但是阿里云上,禁止使用25端口发送邮件,必须使用加密协议,如587端口,sendEmail的软件最后一版是2009年,试了下,很难兼容CentOS7,所以就想到用python来实现。自己网上搜罗了下稍加修改,再加上自己加了批量发送多个目标邮件地址的功能,代码如下:

#C:\Python27
# -*- coding: utf-8 -*-

import os,re
from email import encoders
from email.header import Header
from email.mime.text import MIMEText
from email.utils import parseaddr,formataddr
from email.mime.multipart import MIMEMultipart
from email.mime.application import MIMEApplication
import smtplib

from_user = 'opm@xxx.cn'
password = 'dfffE9xVDtPkdz'
smtp_server = 'smtp.exmail.qq.com'
smtp_port = 587
maindir = '/home/appadm/open***-2.4.4/user'
confdir = '/home/appadm/open***-2.4.4/'
file1 = os.path.join(maindir,'open***-install-2.4.4-I601.exe')    #附件1,一个安装程序,路径/home/appadm/open***-2.4.4/user/open***-install-2.4.4-I601.exe

file2 = os.path.join(maindir,'open***-readme.docx')               #附件2,安装操作手册,路径'/home/appadm/open***-2.4.4/open***-readme.docx

mail_list = []                                                 目标邮件组初始为空,该mail_list为变量,与下面的‘mail_list’不同

flist = open('mail_list','r')               本地目录下有一个mail_list的文件,收件人全部写进去,每行一个收件人
for line in flist.readlines():                          
    mail_list.append(line.strip())                 
def sendmail():
###以下到邮件正文前的代码可以忽略,由于我的附件3要取邮箱的前缀作为用户名,举例,xwz@qq.com,我的附件3是xwz.tar.gz,另外要到psw-file这个文件中账号xwz以及对应的密码

    for to_user in mail_list:
        suser = to_user.strip().split("@")[0]      
        fpath = os.path.join(maindir,suser)
        ftar = suser + '.tar.gz'
        file3 = os.path.join(fpath,ftar)
        userm = suser + '.+'
        os.chdir(confdir)
        os.chdir('config')
        sd = os.getcwd()
        f = open('psw-file','r')
        for line in f.readlines():
            m = re.search(userm,line)
            if m is not None:
                userinfo = m.group()
        f.close()
        useracc = userinfo.split()[0]
        userpass = userinfo.split()[1]

#############以下为邮件正文######

        mail_content = '''Hello,your open*** account is: %s,
and your password is: %s''' % (useracc,userpass)

###############
        msg = MIMEMultipart()          带附件的邮件
        msg['From'] = from_user       发件人
        msg['To'] = to_user               收件人
        msg['Subject'] = Header(u"测试环境: %s\'s open*** imformation" % suser).encode()     标题
        mail_text = MIMEText(mail_content,'plain','utf-8')                    内容格式
        msg.attach(mail_text)                                                      正文内容

        exepart = MIMEApplication(open(file1, 'rb').read())                                                     附件1
        exepart.add_header('Content-Disposition', 'attachment', filename='open***-install-2.4.4-I601.exe')
        msg.attach(exepart)

        docpart = MIMEApplication(open(file2, 'rb').read())                                                      附件2
        docpart.add_header('Content-Disposition', 'attachment', filename='open***-readme.docx')
        msg.attach(docpart)

        tarpart = MIMEApplication(open(file3, 'rb').read())                                               附件3
        tarpart.add_header('Content-Disposition', 'attachment', filename=ftar)
        msg.attach(tarpart)


        server = smtplib.SMTP(smtp_server,smtp_port)                                  smtp服务器以及端口
        server.starttls()
        #server.set_debuglevel(1)
        server.login(from_user,password)                                                     发件人账号密码
        server.sendmail(from_user,to_user,msg.as_string())                         发送格式
        server.quit()
    
if __name__ == '__main__':
    print "Mail sending......."
    sendmail()
    print "Mail processed Over"

相关内容

热门资讯

空调连续工作多久需要停机休息 空调连续工作的时间取决于多个因素,包括空调的型号、功率、使用环境和维护情况等。一般来说,空调可以连续...
空调哪个符号是除湿的 空调除湿功能通常用一个水滴形状的符号表示。不同品牌和型号的空调遥控器可能会有所差异,但一般来说,除湿...
格力空调多长时间加一次氟利昂 1、一般情况下,空调对氟利昂的使用量是非常小的,所以在空调使用了四年左右的时候再考虑加也没问题。2、...
空调用多长时间需要加氟一次 一般情况下是五年。当出现以下这几种情况时,空调才需要加氟。1、空调的室内机和室外机各有两个接口,当接...
格调生活·C标思享荟:卡萨帝在... 9月12日的郑州龙湖金融岛,夜风轻拂,灯光璀璨。“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑...
品牌价值破千亿、高端份额持续领... 9月12日,“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑州站”在郑州龙湖金融岛举办。2026...
空调主板坏了修800还是换新的 空调主板坏了是修还是换新,需要考虑多个因素,以下是一些建议:1. 维修成本:如果维修费用较低,比如 ...
空调开多久需要休息多长时间 问题:空调开多久需要休息多长时间回答:1、在使用空调的过程中,一般空调开7~8个小时左右需要休息2~...
中央空调多长时间清洗一次 1、一般空调开机前清洗一次即可,空调开机中间时段再清洗一次,空调关机时清洗一次,这样比较合理。2、空...
中央空调氟利昂多久加一次 看空调制热和制冷程度,很多人的观点认为氟利昂必须一年放一次,其实这个观点是错误的,理解上面有点偏差,...