25'ten fazla konu seçemezsiniz Konular bir harf veya rakamla başlamalı, kısa çizgiler ('-') içerebilir ve en fazla 35 karakter uzunluğunda olabilir.

smtp.py 3.5 KiB

11 yıl önce
11 yıl önce
11 yıl önce
11 yıl önce
11 yıl önce
11 yıl önce
11 yıl önce
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. # Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
  2. # MIT License. See license.txt
  3. from __future__ import unicode_literals
  4. import webnotes
  5. import smtplib
  6. import _socket
  7. from webnotes.utils import cint
  8. def send(email, as_bulk=False):
  9. """send the message or add it to Outbox Email"""
  10. if webnotes.flags.mute_emails or webnotes.conf.get("mute_emails") or False:
  11. webnotes.msgprint("Emails are muted")
  12. return
  13. try:
  14. smtpserver = SMTPServer()
  15. if hasattr(smtpserver, "always_use_login_id_as_sender") and \
  16. cint(smtpserver.always_use_login_id_as_sender) and smtpserver.login:
  17. if not email.reply_to:
  18. email.reply_to = email.sender
  19. email.sender = smtpserver.login
  20. smtpserver.sess.sendmail(email.sender, email.recipients + (email.cc or []),
  21. email.as_string())
  22. except smtplib.SMTPSenderRefused:
  23. webnotes.msgprint("""Invalid Outgoing Mail Server's Login Id or Password. \
  24. Please rectify and try again.""")
  25. raise
  26. except smtplib.SMTPRecipientsRefused:
  27. webnotes.msgprint("""Invalid Recipient (To) Email Address. \
  28. Please rectify and try again.""")
  29. raise
  30. class SMTPServer:
  31. def __init__(self, login=None, password=None, server=None, port=None, use_ssl=None):
  32. # get defaults from control panel
  33. try:
  34. es = webnotes.doc('Email Settings','Email Settings')
  35. except webnotes.DoesNotExistError:
  36. es = None
  37. self._sess = None
  38. if server:
  39. self.server = server
  40. self.port = port
  41. self.use_ssl = cint(use_ssl)
  42. self.login = login
  43. self.password = password
  44. elif es and es.outgoing_mail_server:
  45. self.server = es.outgoing_mail_server
  46. self.port = es.mail_port
  47. self.use_ssl = cint(es.use_ssl)
  48. self.login = es.mail_login
  49. self.password = es.mail_password
  50. self.always_use_login_id_as_sender = es.always_use_login_id_as_sender
  51. else:
  52. self.server = webnotes.conf.get("mail_server") or ""
  53. self.port = webnotes.conf.get("mail_port") or None
  54. self.use_ssl = cint(webnotes.conf.get("use_ssl") or 0)
  55. self.login = webnotes.conf.get("mail_login") or ""
  56. self.password = webnotes.conf.get("mail_password") or ""
  57. @property
  58. def sess(self):
  59. """get session"""
  60. if self._sess:
  61. return self._sess
  62. # check if email server specified
  63. if not self.server:
  64. err_msg = 'Outgoing Mail Server not specified'
  65. webnotes.msgprint(err_msg)
  66. raise webnotes.OutgoingEmailError, err_msg
  67. try:
  68. if self.use_ssl and not self.port:
  69. self.port = 587
  70. self._sess = smtplib.SMTP((self.server or "").encode('utf-8'),
  71. cint(self.port) or None)
  72. if not self._sess:
  73. err_msg = 'Could not connect to outgoing email server'
  74. webnotes.msgprint(err_msg)
  75. raise webnotes.OutgoingEmailError, err_msg
  76. if self.use_ssl:
  77. self._sess.ehlo()
  78. self._sess.starttls()
  79. self._sess.ehlo()
  80. if self.login:
  81. ret = self._sess.login((self.login or "").encode('utf-8'),
  82. (self.password or "").encode('utf-8'))
  83. # check if logged correctly
  84. if ret[0]!=235:
  85. webnotes.msgprint(ret[1])
  86. raise webnotes.OutgoingEmailError, ret[1]
  87. return self._sess
  88. except _socket.error:
  89. # Invalid mail server -- due to refusing connection
  90. webnotes.msgprint('Invalid Outgoing Mail Server or Port. Please rectify and try again.')
  91. raise
  92. except smtplib.SMTPAuthenticationError:
  93. webnotes.msgprint("Invalid Outgoing Mail Server's Login Id or Password. \
  94. Please rectify and try again.")
  95. raise
  96. except smtplib.SMTPException:
  97. webnotes.msgprint('There is something wrong with your Outgoing Mail Settings. \
  98. Please contact us at support@erpnext.com')
  99. raise