CM Help / User Guide

E-mail Calendar Reservations Inquiries Integrations

Welcome to CM

CM is a simple self-hosted Channel Manager for small accommodation owners. It helps you manage availability, prices, inquiries, reservations and calendar integrations from one place.

1. Calendar

Your main working screen for availability, prices, blocks and visual overview.

2. Reservations

Review confirmed, cancelled, external and soft-hold reservations.

3. Inquiries

Handle guest requests before they become confirmed reservations.

4. Integrations

Connect external calendars and prepare the system for real-world sync.

5. E-mail / SMTP

Set up msmtp so CM can send guest and admin e-mails through Gmail or another SMTP account.

Calendar

The admin calendar is the central view of your unit availability. Start here when you want to check dates, select a range, set prices, create blocks or add an admin reservation.

Basic workflow

Layers

Calendar layers let you decide what you want to see: occupancy, local blocks, prices, offers and pending inquiries. This makes the calendar useful both for quick overview and for detailed administration.

Prices are important: dates without usable price data may not behave as expected in the public calendar or offer flow.

Reservations

The Reservations page shows existing reservations across units, years, statuses and sources. Use it when you want to inspect confirmed bookings, cancelled reservations, external reservations or soft-holds.

What to check

External reservations

External reservations are useful for direct bookings or reservations that were created outside the public inquiry flow.

Inquiries

Inquiries are guest requests that have not yet become final reservations. This page is where you review requests, accept them, reject them, or mark them for visual tracking.

Inquiry flow

Calendar connection

Pending and marked inquiries can be reflected on the admin calendar. This helps you visually track important requests before they become final bookings.

Integrations

Integrations connect CM with external platforms and calendars. The main idea is simple: CM can export its availability and import external availability.

Units and Base URL

Integrations are configured per unit. The Base URL must point to your public CM installation, because it is used to generate external links such as ICS URLs.

ICS Export

ICS export links allow external systems to read availability from CM. You can copy these links into platforms that support calendar import.

Channels / ICS Import

Channels let CM read external calendars. Imported external bookings are merged into the internal availability layer.

Autopilot

Autopilot is a Plus feature. It can automatically confirm safe inquiries when rules and availability checks pass. In CM Free it can be shown as a locked feature, so users understand the upgrade path.

Soft-holds are internal and should not be exported to external platforms. Confirmed reservations and hard locks are the safe export layer.

E-mail / SMTP / Gmail App Password

CM Free / Plus sends e-mails through the system sendmail interface. On Ubuntu/Debian installations this is usually provided by msmtp.

The basic chain is:

CM Free / Plus → PHP sendmail → msmtp → Gmail/SMTP server → guest/admin
The DEB package installs msmtp and msmtp-mta. You still need to configure the SMTP account.

1. Check that msmtp is installed

which msmtp
which sendmail
php -i | grep -i sendmail_path
ls -l /usr/sbin/sendmail

A typical working result looks like this:

/usr/bin/msmtp
/usr/sbin/sendmail
sendmail_path => /usr/sbin/sendmail -t -i
/usr/sbin/sendmail -> ../bin/msmtp

2. Gmail: create an App Password

For Gmail, do not use your normal Gmail password. Use a Gmail App Password.

Fast link: https://myaccount.google.com/apppasswords

  1. Log in to the Gmail account that will send e-mails.
  2. Create a new App Password.
  3. You can name it something like CM Free msmtp.
  4. Google shows a 16-character password.
  5. Copy it into /etc/msmtprc without spaces.
If App Passwords are not available, enable 2-Step Verification for the Google account first.

3. Create system-wide msmtp configuration

sudo nano /etc/msmtprc

Minimal Gmail example:

# CM Free / Plus system-wide msmtp configuration
# Used by Apache/PHP through /usr/sbin/sendmail -> msmtp

defaults
auth           on
tls            on
tls_starttls   on
tls_trust_file /etc/ssl/certs/ca-certificates.crt

account gmail
host smtp.gmail.com
port 587
from nekdo@gmail.com
user nekdo@gmail.com
password TVOJE_16_MESTNO_APP_PASSWORD_BREZ_PRESLEDKOV

account default : gmail

Replace nekdo@gmail.com with the Gmail account that sends mail. Replace the password placeholder with your Gmail App Password.

The from and user values should normally be the same Gmail account. The password must be the App Password for that same account.

4. Set safe permissions

The file contains a password. It should be readable by Apache/PHP, but not public.

sudo chown root:www-data /etc/msmtprc
sudo chmod 640 /etc/msmtprc

5. Test as Apache/PHP user

This is the most important test, because Apache/PHP usually runs as www-data.

printf "Subject: CM Free mail test\n\nTest from CM Free via msmtp.\n" | sudo -u www-data sendmail nekdo@gmail.com

If there is no error and the e-mail arrives, the system mail setup is working.

6. Configure e-mail in CM

After the system test succeeds, configure e-mail in CM settings.

Email enabled: true
From name: CM Free Demo
From email: nekdo@gmail.com
Admin email: your-admin-address@example.com

The From email should match the sending account from /etc/msmtprc. The Admin email is where you want to receive inquiry notifications.

7. Optional logging

For a first setup, it is usually better to keep msmtp logging disabled. E-mail can work perfectly even if a logfile causes permission problems.

Do not add this line unless you know how to set log permissions:

logfile /var/log/msmtp.log

If you see this together with a successful SMTP status:

smtpstatus=250
exitcode=EX_OK
cannot log ... Permission denied

then the e-mail was sent successfully. The problem is only logging. The simplest solution is to remove or comment out the logfile line.

8. Common errors

Gmail rejects the password

535-5.7.8 Username and Password not accepted

Common causes:

No default account

If sendmail does not know which account to use, make sure this line exists at the end of /etc/msmtprc:

account default : gmail

Short version

1. Create Gmail App Password:
   https://myaccount.google.com/apppasswords

2. Create /etc/msmtprc with account gmail and account default : gmail

3. Set permissions:
   sudo chown root:www-data /etc/msmtprc
   sudo chmod 640 /etc/msmtprc

4. Test:
   printf "Subject: CM Free mail test\n\nTest.\n" | sudo -u www-data sendmail nekdo@gmail.com

Recommended first setup

  1. Open Calendar and learn the unit selector, date selection and layers.
  2. Add or check prices for your first unit.
  3. Open Reservations and understand where confirmed bookings appear.
  4. Open Inquiries and review how guest requests become reservations.
  5. Open Integrations and set your Base URL.
  6. Set up E-mail / SMTP if you want CM to send guest and admin messages.
  7. Copy ICS export links only after the system URL is correct.
  8. Add another unit only after the first unit is clear and working.