67 lines
2.9 KiB
Python
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
|