Пример #1
0
 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
Пример #2
0
 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()
Пример #3
0
 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()
Пример #4
0
    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)}
Пример #5
0
 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()
Пример #6
0
    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
Пример #7
0
    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'系统繁忙')}
Пример #8
0
    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()
Пример #9
0
    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
Пример #10
0
 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']
             )
Пример #11
0
 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()
Пример #12
0
 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