def test_email_settings(self, to): opts = smtp_prefs().parse() from calibre.utils.smtp import sendmail, create_mail buf = cStringIO.StringIO() debug_out = partial(prints, file=buf) oout, oerr = sys.stdout, sys.stderr sys.stdout = sys.stderr = buf tb = None try: msg = create_mail(opts.from_, to, 'Test mail from calibre', 'Test mail from calibre') sendmail(msg, from_=opts.from_, to=[to], verbose=3, timeout=30, relay=opts.relay_host, username=opts.relay_username, debug_output=debug_out, password=unhexlify(opts.relay_password).decode('utf-8'), encryption=opts.encryption, port=opts.relay_port) except: import traceback tb = traceback.format_exc() tb += '\n\nLog:\n' + buf.getvalue() finally: sys.stdout, sys.stderr = oout, oerr return tb
def sendmail(self, attachment, aname, to, subject, text, log): logged = False while time.time() - self.last_send_time <= self.rate_limit: if not logged and self.rate_limit > 0: log('Waiting %s seconds before sending, to avoid being marked as spam.\nYou can control this delay via Preferences->Tweaks' % self.rate_limit) logged = True time.sleep(1) try: opts = email_config().parse() from_ = opts.from_ if not from_: from_ = 'calibre <calibre@'+socket.getfqdn()+'>' with lopen(attachment, 'rb') as f: msg = compose_mail(from_, to, text, subject, f, aname) efrom = extract_email_address(from_) eto = [] for x in to.split(','): eto.append(extract_email_address(x.strip())) sendmail(msg, efrom, eto, localhost=None, verbose=1, relay=opts.relay_host, username=opts.relay_username, password=unhexlify(opts.relay_password).decode('utf-8'), port=opts.relay_port, encryption=opts.encryption, debug_output=log.debug) finally: self.last_send_time = time.time()
def sendmail(self, attachment, aname, to, subject, text, log): while time.time() - self.last_send_time <= self.rate_limit: time.sleep(1) try: opts = email_config().parse() from_ = opts.from_ if not from_: from_ = 'calibre <calibre@' + socket.getfqdn() + '>' with lopen(attachment, 'rb') as f: msg = compose_mail(from_, to, text, subject, f, aname) efrom, eto = map(extract_email_address, (from_, to)) eto = [eto] sendmail(msg, efrom, eto, localhost=None, verbose=1, relay=opts.relay_host, username=opts.relay_username, password=unhexlify(opts.relay_password), port=opts.relay_port, encryption=opts.encryption, debug_output=log.debug) finally: self.last_send_time = time.time()
def post(self): mail_server = self.get_argument('smtp_server') mail_username = self.get_argument('smtp_username') mail_password = self.get_argument('smtp_password') mail_from = mail_username mail_to = mail_username mail_subject = _(u'Calibre功能验证邮件') mail_body = _(u'这是一封测试邮件,验证邮件参数是否配置正确。') mail = self.create_mail(mail_from, mail_to, mail_subject, mail_body, None, None) try: sendmail(mail, from_=mail_from, to=[mail_to], timeout=10, port=465, encryption='SSL', relay=mail_server, username=mail_username, password=mail_password) return {'err': 'ok', 'msg': _(u'发送成功')} except Exception as e: import traceback logging.error(traceback.format_exc()) return {'err': 'email.server_error', 'msg': str(e)}
def sendmail(self, attachment, aname, to, subject, text, log): logged = False while time.time() - self.last_send_time <= self.rate_limit: if not logged and self.rate_limit > 0: log('Waiting %s seconds before sending, to avoid being marked as spam.\nYou can control this delay via Preferences->Tweaks' % self.rate_limit) logged = True time.sleep(1) try: opts = email_config().parse() from_ = opts.from_ if not from_: from_ = 'calibre <calibre@' + socket.getfqdn() + '>' with lopen(attachment, 'rb') as f: msg = compose_mail(from_, to, text, subject, f, aname) efrom = extract_email_address(from_) eto = [] for x in to.split(','): eto.append(extract_email_address(x.strip())) sendmail(msg, efrom, eto, localhost=None, verbose=1, relay=opts.relay_host, username=opts.relay_username, password=unhexlify(opts.relay_password).decode('utf-8'), port=opts.relay_port, encryption=opts.encryption, debug_output=log.debug) finally: self.last_send_time = time.time()
def test_email_settings(self, to): opts = smtp_prefs().parse() from calibre.utils.smtp import sendmail, create_mail buf = cStringIO.StringIO() oout, oerr = sys.stdout, sys.stderr sys.stdout = sys.stderr = buf tb = None try: msg = create_mail(opts.from_, to, "Test mail from calibre", "Test mail from calibre") sendmail( msg, from_=opts.from_, to=[to], verbose=3, timeout=30, relay=opts.relay_host, username=opts.relay_username, password=unhexlify(opts.relay_password).decode("utf-8"), encryption=opts.encryption, port=opts.relay_port, ) except: import traceback tb = traceback.format_exc() tb += "\n\nLog:\n" + buf.getvalue() finally: sys.stdout, sys.stderr = oout, oerr return tb
def post(self): email = self.get_argument("email", "").strip().lower() username = self.get_argument("username", "").strip().lower() if not username or not email: return {'err': 'params.invalid', 'msg': _(u'用户名或邮箱错误')} user = self.session.query(Reader).filter(Reader.username==username, Reader.email == email).first() if not user: return {'err': 'params.no_user', 'msg': _(u'无此用户')} p = user.reset_password() # send notice email args = { 'site_title': CONF['site_title'], 'username': user.username, 'password': p, } mail_subject = CONF['RESET_MAIL_TITLE'] % args mail_to = user.email mail_from = CONF['smtp_username'] mail_body = CONF['RESET_MAIL_CONTENT'] % args mail = self.create_mail(mail_from, mail_to, mail_subject, mail_body, None, None) sendmail(mail, from_=mail_from, to=[mail_to], timeout=20, port=465, encryption='SSL', relay=CONF['smtp_server'], username=CONF['smtp_username'], password=CONF['smtp_password'] ) # do save into db try: user.save() self.add_msg("success", _("你刚刚重置了密码")) return {'err': 'ok'} except: return {'err': 'db.error', 'msg': _(u'系统繁忙')}
def sendmail(self, attachment, aname, to, subject, text, log): logged = False while time.time() - self.last_send_time <= self.rate_limit: if not logged and self.rate_limit > 0: log('Waiting %s seconds before sending, to avoid being marked as spam.\nYou can control this delay via Preferences->Tweaks' % self.rate_limit) logged = True time.sleep(1) try: opts = email_config().parse() from_ = opts.from_ if not from_: from_ = 'calibre <calibre@' + socket.getfqdn() + '>' with lopen(attachment, 'rb') as f: msg = compose_mail(from_, to, text, subject, f, aname) efrom = extract_email_address(from_) eto = [] for x in to.split(','): eto.append(extract_email_address(x.strip())) def safe_debug(*args, **kwargs): try: return log.debug(*args, **kwargs) except Exception: pass relay = opts.relay_host if relay and relay == 'smtp.live.com': # Microsoft changed the SMTP server relay = 'smtp-mail.outlook.com' sendmail(msg, efrom, eto, localhost=None, verbose=1, relay=relay, username=opts.relay_username, password=from_hex_unicode(opts.relay_password), port=opts.relay_port, encryption=opts.encryption, debug_output=safe_debug) finally: self.last_send_time = time.time()
def do_send_mail(self, book, mail_to, fmt, fpath): body = open(fpath).read() # read meta info author = authors_to_string( book['authors'] if book['authors'] else [_('Unknown')]) title = book['title'] if book['title'] else _("No Title") fname = u'%s - %s.%s' % (title, author, fmt) fname = ascii_filename(fname).replace('"', '_') # content type mt = guess_type('dummy.' + fmt)[0] if mt is None: mt = 'application/octet-stream' # send mail mail_from = '*****@*****.**' mail_subject = _('Book from Calibre: %(title)s') % vars() mail_body = _('We Send this book to your kindle.') status = msg = "" try: msg = create_mail(mail_from, mail_to, mail_subject, text=mail_body, attachment_data=body, attachment_type=mt, attachment_name=fname) sendmail(msg, from_=mail_from, to=[mail_to], timeout=30, username=tweaks['smtp_username'], password=tweaks['smtp_password']) status = "success" msg = _('Send to kindle success!! email: %(mail_to)s') % vars() except: import traceback cherrypy.log.error('Failed to generate cover:') cherrypy.log.error(traceback.format_exc()) status = "danger" msg = traceback.format_exc() messages.append({'status': status, 'msg': msg}) return
def send_active_email(self, user): site = self.request.protocol + "://" + self.request.host code = user.get_active_code() link = '%s/api/active/%s/%s' % (site, user.username, code) args = { 'site_title': CONF['site_title'], 'username': user.username, 'active_link': link, } mail_subject = CONF['SIGNUP_MAIL_TITLE'] % args mail_to = user.email mail_from = CONF['smtp_username'] mail_body = CONF['SIGNUP_MAIL_CONTENT'] % args mail = self.create_mail(mail_from, mail_to, mail_subject, mail_body, None, None) sendmail(mail, from_=mail_from, to=[mail_to], timeout=20, port=465, encryption='SSL', relay=CONF['smtp_server'], username=CONF['smtp_username'], password=CONF['smtp_password'] )
def sendmail(self, attachment, aname, to, subject, text, log): while time.time() - self.last_send_time <= self.rate_limit: time.sleep(1) try: opts = email_config().parse() from_ = opts.from_ if not from_: from_ = 'calibre <calibre@'+socket.getfqdn()+'>' with lopen(attachment, 'rb') as f: msg = compose_mail(from_, to, text, subject, f, aname) efrom, eto = map(extract_email_address, (from_, to)) eto = [eto] sendmail(msg, efrom, eto, localhost=None, verbose=1, relay=opts.relay_host, username=opts.relay_username, password=unhexlify(opts.relay_password), port=opts.relay_port, encryption=opts.encryption, debug_output=log.debug) finally: self.last_send_time = time.time()
def test_email_settings(self, to): opts = smtp_prefs().parse() from calibre.utils.smtp import sendmail, create_mail buf = PolyglotBytesIO() debug_out = partial(prints, file=buf) oout, oerr = sys.stdout, sys.stderr sys.stdout = sys.stderr = buf tb = None try: msg = create_mail(opts.from_, to, 'Test mail from calibre', 'Test mail from calibre') sendmail(msg, from_=opts.from_, to=[to], verbose=3, timeout=30, relay=opts.relay_host, username=opts.relay_username, debug_output=debug_out, password=from_hex_unicode(opts.relay_password), encryption=opts.encryption, port=opts.relay_port) except: import traceback tb = traceback.format_exc() tb += '\n\nLog:\n' + buf.getvalue().decode('utf-8', 'replace') finally: sys.stdout, sys.stderr = oout, oerr return tb