import os import email import smtplib class EmailSender: def __init__(self, smtpServer, smtpPort, senderEmail, senderPassword, senderName=None): self.SmtpServer = smtpServer self.SmtpPort = smtpPort self.SenderEmail = senderEmail self.SenderPassword = senderPassword self.SenderName = senderName if senderName else senderEmail self.FromHeader = f"{email.header.Header(self.SenderName, 'utf-8')}" def SendTextEmail(self, receiverEmails, subject, content): msg = email.mime.text.MIMEText(content, 'plain', 'utf-8') msg['From'] = self.FromHeader msg['To'] = ','.join(receiverEmails) msg['Subject'] = email.header.Header(subject, 'utf-8') try: with smtplib.SMTP_SSL(self.SmtpServer, self.SmtpPort) as server: server.login(self.SenderEmail, self.SenderPassword) server.sendmail(self.SenderEmail, receiverEmails, msg.as_string()) return True except Exception as e: print(f"发送文本邮件失败: {str(e)}") return False def SendHtmlEmail(self, receiverEmails, subject, htmlContent): msg = email.mime.text.MIMEText(htmlContent, 'html', 'utf-8') msg['From'] = self.FromHeader msg['To'] = ','.join(receiverEmails) msg['Subject'] = email.header.Header(subject, 'utf-8') try: with smtplib.SMTP_SSL(self.SmtpServer, self.SmtpPort) as server: server.login(self.SenderEmail, self.SenderPassword) server.sendmail(self.SenderEmail, receiverEmails, msg.as_string()) return True except Exception as e: print(f"发送HTML邮件失败: {str(e)}") return False def SendEmailWithAttachment(self, receiverEmails, subject, content, attachmentPaths): msg = email.mime.multipart.MIMEMultipart() msg['From'] = self.FromHeader msg['To'] = ','.join(receiverEmails) msg['Subject'] = email.header.Header(subject, 'utf-8') msg.attach(email.mime.text.MIMEText(content, 'plain', 'utf-8')) for path in attachmentPaths: if not os.path.exists(path): continue fileName = os.path.basename(path) with open(path, 'rb') as f: part = email.mime.base.MIMEBase('application', 'octet-stream') part.set_payload(f.read()) email.encoders.encode_base64(part) part.add_header('Content-Disposition', f'attachment; filename="{email.header.Header(fileName, "utf-8").encode()}"') msg.attach(part) try: with smtplib.SMTP_SSL(self.SmtpServer, self.SmtpPort) as server: server.login(self.SenderEmail, self.SenderPassword) server.sendmail(self.SenderEmail, receiverEmails, msg.as_string()) return True except Exception as e: print(f"发送带附件邮件失败: {str(e)}") return False