Difference between revisions of "Mail"
Jump to navigation
Jump to search
(16 intermediate revisions by the same user not shown) | |||
Line 1: | Line 1: | ||
+ | [[Category:Linux/Unix]] | ||
+ | [[Category:python]] | ||
==Sending mail with sendmail== | ==Sending mail with sendmail== | ||
;<code>sendmail -t < <messagefile></code> | ;<code>sendmail -t < <messagefile></code> | ||
:Send the email as in <messagefile> | :Send the email as in <messagefile> | ||
− | The email headers are in <messagefile>. That should look like: | + | :The email headers are in <messagefile>. That should look like: |
<syntaxhighlight lang=text> | <syntaxhighlight lang=text> | ||
From: me@mydomain.tld | From: me@mydomain.tld | ||
Line 8: | Line 10: | ||
Subject: Subject of your mail | Subject: Subject of your mail | ||
email text | email text | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | ;<code>mailx -s Subject -a <attachmentfile> email@domain.tld</code> | ||
+ | :Send email with attachment after entering optional text and an EOT (CTRL-D). | ||
+ | |||
+ | Python email sender found in [[https://docs.python.org/2/library/email-examples.html|the python docs]] | ||
+ | |||
+ | <syntaxhighlight lang=python> | ||
+ | #!/usr/bin/env python | ||
+ | |||
+ | def usage(): | ||
+ | print ("Usage: "+__file__) | ||
+ | print("Send email, include what you need in your program") | ||
+ | version = '0.1, 19700101, Initial release' | ||
+ | print("Version: "+version) | ||
+ | sys.exit(1) | ||
+ | |||
+ | # USER CONFIGURABLE ITEMS | ||
+ | |||
+ | maxmailsize = 10000000 | ||
+ | |||
+ | # END USER CONFIGURABLE ITEMS, DO NOT CHANGE ANYTHING BELOW THIS LINE | ||
+ | |||
+ | def main(): | ||
+ | attachement1 = filepath | ||
+ | attachement2 = filepath | ||
+ | |||
+ | mailto = ['you@domain.tld'] | ||
+ | mailcc = ['someoneelse@anotherdomain.tld','andmore@domain.tld'] | ||
+ | mailbcc = ['secret@domain.tld'] # Only include this in the final sendmail call, not in the headers. | ||
+ | mailfrom = 'me@domain.tld' # Some systems do not like this, just remove it from the sendmail call | ||
+ | mailsubject = 'What this is about' | ||
+ | mailtext = "Hi,\n\nI'd like to send you an email.\n\nBest Regards\n\nMe." | ||
+ | sendmail(mailto, mailcc=mailcc, mailbcc=mailbcc, mailfrom=mailfrom, mailsubject=mailsubject, mailtext=mailtext, attachments=[attachment1,attachment2]) | ||
+ | return | ||
+ | |||
+ | |||
+ | def sendmail(mailto,mailcc = '',mailbcc = '',mailfrom = 'Sender',mailsubject = '',mailtext = '',attachments = ''): | ||
+ | import smtplib | ||
+ | from email import encoders | ||
+ | from email.message import Message | ||
+ | from email.mime.base import MIMEBase | ||
+ | from email.mime.multipart import MIMEMultipart | ||
+ | from email.mime.text import MIMEText | ||
+ | |||
+ | outer = MIMEMultipart() | ||
+ | outer['Subject'] = mailsubject | ||
+ | outer['To'] = ",".join(mailto) | ||
+ | outer['CC'] = ",".join(mailcc) | ||
+ | outer['From'] = mailfrom | ||
+ | msg = MIMEText(mailtext,'plain') | ||
+ | outer.attach(msg) | ||
+ | if attachments != '': | ||
+ | attachtotsize = 0 | ||
+ | for attachment in attachments: | ||
+ | attachsize = os.stat(attachment).st_size | ||
+ | if attachtotsize + attachsize > maxmailsize: | ||
+ | mailtext += attachment+" makes the message bigger than "+maxmailsize+", it is not attached.\n" | ||
+ | else: | ||
+ | attachtotsize += attachsize | ||
+ | filename = attachment.split('/')[-1] | ||
+ | ctype = 'application/octet-stream' | ||
+ | maintype, subtype = ctype.split('/', 1) | ||
+ | fp = open(attachment, 'rb') | ||
+ | msg = MIMEBase(maintype, subtype) | ||
+ | msg.set_payload(fp.read()) | ||
+ | fp.close() | ||
+ | # Encode the payload using Base64 | ||
+ | encoders.encode_base64(msg) | ||
+ | # Set the filename parameter | ||
+ | msg.add_header('Content-Disposition', 'attachment', filename=filename) | ||
+ | outer.attach(msg) | ||
+ | composed = outer.as_string() | ||
+ | s = smtplib.SMTP('localhost') | ||
+ | s.sendmail(mailfrom, mailto+list(mailcc)+list(mailbcc) , composed) | ||
+ | s.quit() | ||
+ | return | ||
+ | |||
+ | |||
+ | main() | ||
</syntaxhighlight> | </syntaxhighlight> |
Latest revision as of 14:58, 22 August 2020
Sending mail with sendmail
sendmail -t < <messagefile>
- Send the email as in <messagefile>
- The email headers are in <messagefile>. That should look like:
From: me@mydomain.tld
To: user@domain.tld
Subject: Subject of your mail
email text
mailx -s Subject -a <attachmentfile> email@domain.tld
- Send email with attachment after entering optional text and an EOT (CTRL-D).
Python email sender found in [python docs]
#!/usr/bin/env python
def usage():
print ("Usage: "+__file__)
print("Send email, include what you need in your program")
version = '0.1, 19700101, Initial release'
print("Version: "+version)
sys.exit(1)
# USER CONFIGURABLE ITEMS
maxmailsize = 10000000
# END USER CONFIGURABLE ITEMS, DO NOT CHANGE ANYTHING BELOW THIS LINE
def main():
attachement1 = filepath
attachement2 = filepath
mailto = ['you@domain.tld']
mailcc = ['someoneelse@anotherdomain.tld','andmore@domain.tld']
mailbcc = ['secret@domain.tld'] # Only include this in the final sendmail call, not in the headers.
mailfrom = 'me@domain.tld' # Some systems do not like this, just remove it from the sendmail call
mailsubject = 'What this is about'
mailtext = "Hi,\n\nI'd like to send you an email.\n\nBest Regards\n\nMe."
sendmail(mailto, mailcc=mailcc, mailbcc=mailbcc, mailfrom=mailfrom, mailsubject=mailsubject, mailtext=mailtext, attachments=[attachment1,attachment2])
return
def sendmail(mailto,mailcc = '',mailbcc = '',mailfrom = 'Sender',mailsubject = '',mailtext = '',attachments = ''):
import smtplib
from email import encoders
from email.message import Message
from email.mime.base import MIMEBase
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
outer = MIMEMultipart()
outer['Subject'] = mailsubject
outer['To'] = ",".join(mailto)
outer['CC'] = ",".join(mailcc)
outer['From'] = mailfrom
msg = MIMEText(mailtext,'plain')
outer.attach(msg)
if attachments != '':
attachtotsize = 0
for attachment in attachments:
attachsize = os.stat(attachment).st_size
if attachtotsize + attachsize > maxmailsize:
mailtext += attachment+" makes the message bigger than "+maxmailsize+", it is not attached.\n"
else:
attachtotsize += attachsize
filename = attachment.split('/')[-1]
ctype = 'application/octet-stream'
maintype, subtype = ctype.split('/', 1)
fp = open(attachment, 'rb')
msg = MIMEBase(maintype, subtype)
msg.set_payload(fp.read())
fp.close()
# Encode the payload using Base64
encoders.encode_base64(msg)
# Set the filename parameter
msg.add_header('Content-Disposition', 'attachment', filename=filename)
outer.attach(msg)
composed = outer.as_string()
s = smtplib.SMTP('localhost')
s.sendmail(mailfrom, mailto+list(mailcc)+list(mailbcc) , composed)
s.quit()
return
main()