Added sendmail library
This commit is contained in:
parent
59bd97be74
commit
e40b618349
6 changed files with 228 additions and 16 deletions
185
paramecio2/libraries/sendmail.py
Normal file
185
paramecio2/libraries/sendmail.py
Normal file
|
|
@ -0,0 +1,185 @@
|
|||
#!/usr/bin/env python3
|
||||
import os
|
||||
import smtplib
|
||||
import mimetypes
|
||||
from email import encoders
|
||||
from email.message import Message
|
||||
from email.mime.audio import MIMEAudio
|
||||
from email.mime.base import MIMEBase
|
||||
from email.mime.image import MIMEImage
|
||||
from email.mime.multipart import MIMEMultipart
|
||||
from email.mime.text import MIMEText
|
||||
import ssl as ssl_module
|
||||
import sys
|
||||
|
||||
class SendMail:
|
||||
|
||||
port=587
|
||||
|
||||
host='localhost'
|
||||
|
||||
username=''
|
||||
|
||||
password=''
|
||||
|
||||
ssl=True
|
||||
|
||||
if sys.version_info < (3, 6):
|
||||
|
||||
context = ssl_module.SSLContext(ssl_module.PROTOCOL_TLSv1_2)
|
||||
else:
|
||||
context = ssl_module.SSLContext(ssl_module.PROTOCOL_TLS)
|
||||
|
||||
def __init__(self):
|
||||
|
||||
self.smtp=smtplib.SMTP(host=self.host, port=self.port)
|
||||
self.txt_error=''
|
||||
|
||||
def send(self, from_address, to_address: list, subject, message, content_type='plain', attachments=[]):
|
||||
|
||||
if self.ssl==True:
|
||||
|
||||
try:
|
||||
|
||||
self.smtp.starttls(context=self.context)
|
||||
|
||||
except smtplib.SMTPHeloError:
|
||||
|
||||
self.txt_error='Error: cannot make HELO to this server'
|
||||
|
||||
return False
|
||||
|
||||
except RuntimeError:
|
||||
|
||||
self.txt_error='Error: SSL/TLS is not supported in your python interpreter'
|
||||
|
||||
return False
|
||||
|
||||
except smtplib.SMTPException as e:
|
||||
|
||||
self.txt_error=e.__str__()
|
||||
|
||||
return False
|
||||
|
||||
"""
|
||||
except smtplib.SMTPNotSupportedError:
|
||||
|
||||
self.txt_error='Error: SSL/TLS is not supported'
|
||||
|
||||
return False
|
||||
"""
|
||||
|
||||
if self.username!='':
|
||||
|
||||
try:
|
||||
|
||||
self.smtp.login(self.username, self.password)
|
||||
|
||||
except smtplib.SMTPHeloError:
|
||||
|
||||
self.txt_error='Error: cannot make HELO to this server'
|
||||
|
||||
return False
|
||||
|
||||
except smtplib.SMTPAuthenticationError:
|
||||
|
||||
self.txt_error='Error: cannot login. Wrong username or password'
|
||||
|
||||
return False
|
||||
|
||||
except smtplib.SMTPException as e:
|
||||
# self.txt_error=e.__str__()
|
||||
self.txt_error='Error: any method for login is avaliable - '+e.__str__()
|
||||
|
||||
return False
|
||||
|
||||
"""
|
||||
except smtplib.SMTPNotSupportedError:
|
||||
|
||||
self.txt_error='Error: AUTH is not supported'
|
||||
|
||||
return False
|
||||
"""
|
||||
|
||||
COMMASPACE=', '
|
||||
|
||||
if len(attachments)==0:
|
||||
|
||||
msg=MIMEText(message, content_type)
|
||||
|
||||
msg['Subject']=subject
|
||||
msg['From']=from_address
|
||||
|
||||
msg['To']=COMMASPACE.join(to_address)
|
||||
|
||||
self.smtp.send_message(msg)
|
||||
|
||||
#self.quit()
|
||||
|
||||
return True
|
||||
|
||||
else:
|
||||
|
||||
outer=MIMEMultipart()
|
||||
|
||||
outer['Subject']=subject
|
||||
outer['From']=from_address
|
||||
|
||||
outer['To']=COMMASPACE.join(to_address)
|
||||
|
||||
# Attach message text
|
||||
|
||||
msg=MIMEText(message, content_type)
|
||||
|
||||
outer.attach(msg)
|
||||
|
||||
for path in attachments:
|
||||
|
||||
ctype, encoding = mimetypes.guess_type(path)
|
||||
|
||||
if ctype is None or encoding is not None:
|
||||
# No guess could be made, or the file is encoded (compressed), so
|
||||
# use a generic bag-of-bits type.
|
||||
ctype = 'application/octet-stream'
|
||||
|
||||
maintype, subtype = ctype.split('/', 1)
|
||||
|
||||
if maintype == 'text':
|
||||
with open(path) as fp:
|
||||
# Note: we should handle calculating the charset
|
||||
msg = MIMEText(fp.read(), _subtype=subtype)
|
||||
|
||||
elif maintype == 'image':
|
||||
with open(path, 'rb') as fp:
|
||||
msg = MIMEImage(fp.read(), _subtype=subtype)
|
||||
|
||||
elif maintype == 'audio':
|
||||
with open(path, 'rb') as fp:
|
||||
msg = MIMEAudio(fp.read(), _subtype=subtype)
|
||||
|
||||
else:
|
||||
with open(path, 'rb') as fp:
|
||||
msg = MIMEBase(maintype, subtype)
|
||||
msg.set_payload(fp.read())
|
||||
# Encode the payload using Base64
|
||||
encoders.encode_base64(msg)
|
||||
|
||||
# Set the filename parameter
|
||||
msg.add_header('Content-Disposition', 'attachment', filename=os.path.basename(path))
|
||||
|
||||
outer.attach(msg)
|
||||
|
||||
self.smtp.send_message(outer)
|
||||
|
||||
#self.quit()
|
||||
|
||||
return True
|
||||
|
||||
def quit(self):
|
||||
|
||||
self.smtp.quit()
|
||||
|
||||
def __del__(self):
|
||||
|
||||
self.smtp.quit()
|
||||
|
||||
Loading…
Add table
Add a link
Reference in a new issue