Advertisement
Guest User

Untitled

a guest
Apr 24th, 2016
90
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.57 KB | None | 0 0
  1. from email.mime.multipart import MIMEMultipart
  2. from email.mime.text import MIMEText
  3. from email.utils import make_msgid
  4. from imaplib import IMAP4, IMAP4_PORT
  5. from smtplib import SMTP, SMTP_PORT
  6. from subprocess import call
  7. from textwrap import dedent
  8. from time import sleep
  9.  
  10.  
  11. class AutoReplyer:
  12. refresh_delay = 5
  13.  
  14. imap_server = None
  15. imap_port = IMAP4_PORT
  16. imap_user = None
  17. imap_password = None
  18.  
  19. smtp_server = None
  20. smtp_port = SMTP_PORT
  21. smtp_user = None
  22. smtp_password = None
  23.  
  24. from_address = None
  25. body = None
  26. body_html = None
  27.  
  28. def __init__(self):
  29. self.imap = IMAP4(self.imap_server, self.imap_port)
  30. self.imap.login(self.imap_user, self.imap_password)
  31. self.smtp = SMTP(self.smtp_server, self.smtp_port)
  32. self.smtp.login(self.smtp_user, self.smtp_password)
  33.  
  34. def close(self):
  35. self.smtp.close()
  36. self.imap.logout()
  37.  
  38. def create_auto_reply(self, original):
  39. mail = MIMEMultipart('alternative')
  40. mail['Message-ID'] = make_msgid()
  41. mail['References'] = mail['In-Reply-To'] = original['Message-ID']
  42. mail['Subject'] = 'Re: ' + original['Subject']
  43. mail['From'] = self.from_address
  44. mail['To'] = original['Reply-To'] or original['From']
  45. mail.attach(MIMEText(dedent(self.body), 'plain'))
  46. mail.attach(MIMEText(self.body_html, 'html'))
  47. return mail
  48.  
  49. def send_auto_reply(self, original):
  50. self.smtp.sendmail(
  51. self.from_address, [original['From']],
  52. self.create_auto_reply(original).as_bytes())
  53. log = 'Replied to ā€œ%sā€ for the mail ā€œ%sā€' % (original['From'],
  54. original['Subject'])
  55. print(log)
  56. try:
  57. call(['notify-send', log])
  58. except FileNotFoundError:
  59. pass
  60.  
  61. def reply(self, mail_number):
  62. self.imap.select(readonly=True)
  63. _, data = self.imap.fetch(mail_number, '(RFC822)')
  64. self.imap.close()
  65. self.send_auto_reply(email.message_from_bytes(data[0][1]))
  66. self.imap.select(readonly=False)
  67. self.imap.store(mail_number, '+FLAGS', '\\Answered')
  68. self.imap.close()
  69.  
  70. def check_mails(self):
  71. self.imap.select(readonly=False)
  72. _, data = self.imap.search(None, '(UNSEEN UNANSWERED)')
  73. self.imap.close()
  74. for mail_number in data[0].split():
  75. self.reply(mail_number)
  76.  
  77. def run(self):
  78. try:
  79. while True:
  80. self.check_mails()
  81. sleep(self.refresh_delay)
  82. finally:
  83. self.close()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement