def send_to_kindle(book_id): settings = ub.get_mail_settings() if settings.get("mail_server", "mail.example.com") == "mail.example.com": flash("Please configure the SMTP mail settings first...", category="error") elif current_user.kindle_mail: result = helper.send_mail(book_id, current_user.kindle_mail) if result is None: flash("Book successfully send to %s" % current_user.kindle_mail, category="success") helper.update_download(book_id, int(current_user.id)) else: flash("There was an error sending this book: %s" % result, category="error") else: flash("Please configure your kindle email address first...", category="error") return redirect(request.environ["HTTP_REFERER"])
def send_mail(book_id, kindle_mail): """Send email with attachments""" is_mobi = False is_azw = False is_azw3 = False is_epub = False is_pdf = False file_path = None settings = ub.get_mail_settings() # create MIME message msg = MIMEMultipart() msg["From"] = settings["mail_from"] msg["To"] = kindle_mail msg["Subject"] = "Send to Kindle" text = "This email has been sent via calibre web." msg.attach(MIMEText(text)) use_ssl = settings.get("mail_use_ssl", 0) # attach files # msg.attach(self.get_attachment(file_path)) book = db.session.query(db.Books).filter(db.Books.id == book_id).first() data = db.session.query(db.Data).filter(db.Data.book == book.id) formats = {} for entry in data: if entry.format == "MOBI": formats["mobi"] = os.path.join(config.DB_ROOT, book.path, entry.name + ".mobi") if entry.format == "EPUB": formats["epub"] = os.path.join(config.DB_ROOT, book.path, entry.name + ".epub") if entry.format == "PDF": formats["pdf"] = os.path.join(config.DB_ROOT, book.path, entry.name + ".pdf") if len(formats) == 0: return "Could not find any formats suitable for sending by email" if "mobi" in formats: msg.attach(get_attachment(formats["mobi"])) elif "epub" in formats: filepath = make_mobi(book.id) if filepath is not None: msg.attach(get_attachment(filepath)) elif "pdf" in formats: msg.attach(get_attachment(formats["pdf"])) elif "pdf" in formats: msg.attach(get_attachment(formats["pdf"])) else: return "Could not find any formats suitable for sending by email" # convert MIME message to string fp = StringIO() gen = Generator(fp, mangle_from_=False) gen.flatten(msg) msg = fp.getvalue() # send email try: mailserver = smtplib.SMTP(settings["mail_server"], settings["mail_port"]) mailserver.set_debuglevel(0) if int(use_ssl) == 1: mailserver.ehlo() mailserver.starttls() mailserver.ehlo() mailserver.login(settings["mail_login"], settings["mail_password"]) mailserver.sendmail(settings["mail_login"], kindle_mail, msg) mailserver.quit() except (socket.error, smtplib.SMTPRecipientsRefused, smtplib.SMTPException), e: app.logger.error(traceback.print_exc()) return "Failed to send mail: %s" % str(e)
def send_mail(book_id, kindle_mail): '''Send email with attachments''' is_mobi = False is_azw = False is_azw3 = False is_epub = False is_pdf = False file_path = None settings = ub.get_mail_settings() # create MIME message msg = MIMEMultipart() msg['From'] = settings["mail_from"] msg['To'] = kindle_mail msg['Subject'] = 'Send to Kindle' text = 'This email has been sent via calibre web.' msg.attach(MIMEText(text)) use_ssl = settings.get('mail_use_ssl', 0) # attach files #msg.attach(self.get_attachment(file_path)) book = db.session.query(db.Books).filter(db.Books.id == book_id).first() data = db.session.query(db.Data).filter(db.Data.book == book.id) formats = {} for entry in data: if entry.format == "MOBI": formats["mobi"] = os.path.join(config.DB_ROOT, book.path, entry.name + ".mobi") if entry.format == "EPUB": formats["epub"] = os.path.join(config.DB_ROOT, book.path, entry.name + ".epub") if entry.format == "PDF": formats["pdf"] = os.path.join(config.DB_ROOT, book.path, entry.name + ".pdf") if len(formats) == 0: return "Could not find any formats suitable for sending by email" if 'mobi' in formats: msg.attach(get_attachment(formats['mobi'])) elif 'epub' in formats: filepath = make_mobi(book.id) if filepath is not None: msg.attach(get_attachment(filepath)) elif 'pdf' in formats: msg.attach(get_attachment(formats['pdf'])) elif 'pdf' in formats: msg.attach(get_attachment(formats['pdf'])) else: return "Could not find any formats suitable for sending by email" # convert MIME message to string fp = StringIO() gen = Generator(fp, mangle_from_=False) gen.flatten(msg) msg = fp.getvalue() # send email try: mailserver = smtplib.SMTP(settings["mail_server"], settings["mail_port"]) mailserver.set_debuglevel(0) if int(use_ssl) == 1: mailserver.ehlo() mailserver.starttls() mailserver.ehlo() mailserver.login(settings["mail_login"], settings["mail_password"]) mailserver.sendmail(settings["mail_login"], kindle_mail, msg) mailserver.quit() except (socket.error, smtplib.SMTPRecipientsRefused, smtplib.SMTPException), e: app.logger.error(traceback.print_exc()) return "Failed to send mail: %s" % str(e)