python 发送邮件 可带附件

python 发送邮件 可带附件:

#!/usr/bin/python
# -*- coding:utf-8-*-

import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.base import MIMEBase
from email.header import Header
from email.utils import formataddr,parseaddr
from email import encoders
import os
import logging
import argparse

logging.getLogger(__name__)
LOG_FORMAT = "%(asctime)s - %(levelname)s - %(message)s"
DATE_FORMAT = "%Y-%m-%d %H:%M:%S %p"
logging.basicConfig(level=logging.DEBUG, format=LOG_FORMAT, datefmt=DATE_FORMAT)

class SendEmail(object):
    def __init__(self, **params):
        self.servermail = "smtp.163.com"
        self.serverport = 465
        self.sender = "187xxx@163.com"
        self.password = params["password"]
        self.receivers = params["receivers"]
        self.subject = params["subject"]
        self.title_name = params["title_name"]
        self.message = params["message"]
        self.attachmentfile = params["attachment"]

    def __format_addr(self, s):
        name, addr = parseaddr(s)
        return formataddr((Header(name,'utf-8').encode(), addr))

    def send_email(self):
        message = MIMEMultipart()
        message['From'] = self.__format_addr(f"sender <{self.sender}>")
        message['To'] = self.__format_addr(f"receivers <{self.receivers}>")
        message['Subject'] = Header(self.subject, 'utf-8').encode()
        message.attach(MIMEText(self.message,'html', 'utf-8'))  #if self.message is html
        # message.attach(MIMEText(self.message, 'plain', 'utf-8')) #if self.message is txt
        if self.attachmentfile:
            attachment = open(self.attachmentfile, "rb")
            part = MIMEBase('application', 'octet-stream')
            part.set_payload((attachment).read())
            encoders.encode_base64(part)
            part.add_header('Content-Disposition', f"attachment; filename= {os.path.basename(self.attachmentfile)}")
            message.attach(part)

        try:
            smtpObj = smtplib.SMTP()
            smtpObj.connect(self.servermail,self.serverport)
            smtpObj.login(self.sender, self.password)
            smtpObj.sendmail(self.sender, self.receivers.split(","), message.as_string())
            logging.info(f"sendmail success: {self.receivers}")
            smtpObj.quit()
        except smtpObj.SMTPException:
            logging.error("Error, sendmail failed")

if __name__ == '__main__':
    parser = argparse.ArgumentParser(description='Process some args')
    parser.add_argument('-pw', '--password', dest=None, type=str, help='password')
    parser.add_argument('-er', '--email_receivers', dest=None, type=str, help='email_receivers')
    parser.add_argument('-s', '--subject', dest=None, type=str, help='subject')
    parser.add_argument('-t', '--title_name', dest=None, type=str, help='title_name')
    parser.add_argument('-m', '--message', dest=None, type=str, help='message')
    parser.add_argument('-a', '--attachment', dest=None, type=str, help='attachment')
    args = parser.parse_args()

    sendemail = SendEmail(
        password=args.password,
        receivers=args.email_receivers,
        subject=args.subject,
        title_name=args.title_name,
        message=args.message,
        attachment=args.attachment
    )
    sendemail.send_email()

调用以及文内想使用html格式demo:
txt直接写文本就行

#!/usr/bin/python
# -*- coding:utf-8-*-

from send_email_with_attach import *
import os
def get_html_message(title_name, content):
    message = "<html>"
    message = message + f'<head> <meta charset="UTF-8"> <title>{title_name}</title> </head>'
    message = message + '<body leftmargin="8" marginwidth="0" topmargin="8" marginheight="4" offset="0">'
    message = message + '<table width="95%" cellpadding="0" cellspacing="0" style="font-size: 11pt; font-family: Tonoma, Arial, Helvetica, sans-serif">'
    message = message + '<tr>本邮件由xxx发出!<br/></tr>'
    message = message + '<tr> <td><br /> <b><font color="#0B610B">Attention</font></b> <hr size="2" width="100%" align="center" /> </td> </tr>'
    message = message + f'<tr> <td> <ul><li>Info : <br/> {content} </li> </ul> <!-- <hr size="2" width="100%" /> --> </td> </tr>'
    message = message + '</table>'
    message = message + "</body>"+"<br/>"
    message = message + "</html>"+"<br/>"
    return message

def send_email():
    file_path = os.path.join(os.getcwd(), "xxx.txt")
    sendemail = SendEmail(
        password="xxx",
        receivers="xxx.163.com",
        subject="test",
        title_name="test",
        message=get_html_message("xxx", "xxx"),
        attachment=file_path
    )
    sendemail.send_email()

sendemail()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值