Files

67 lines
2.9 KiB
Python

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