Mod voicemail

From FreeSWITCH Wiki

Jump to: navigation, search

Contents

Voicemail

mod_voicemail is a voicemail application. It allows you to send calls to voicemail for messages to be left for your users and lets them check for messages later.


Synopsis

voicemail,Voicemail,[check] [auth] <profile_name> <domain_name> [<id>]

Dialplan variables

skip_greeting

Skips playback of greeting message when leaving messages. Variable is unset after voicemail application finishes.

 <action application="set" data="skip_greeting=true"/>
 <action application="voicemail" data="default $${domain} $1"/>

skip_instructions

Skips playback of instructions when leaving messages. Variable is unset after voicemail application finishes.

 <action application="set" data="skip_instructions=true"/>
 <action application="voicemail" data="default $${domain} $1"/>

Controlling User Parameters & Variables

When the following parameters are set (in directory.conf.xml), they set options for your voicemail users

vm-alternate-greet-id (voicemail_alternate_greet_id)

This allows you to override the default greeting extension/phone number. Can also be set in the dialplan before calling the voicemail app. Note that this refers to system greetings, not user recorded greetings. To change to a different recorded greeting, use voicemail_greeting_number below.

<param name="vm-alternate-greet-id" value="8661234567"/>

voicemail_greeting_number

Selects the user-recorded greeting to play.

http-allowed-api

This allows the user to use the web vm

<param name="http-allowed-api" value="voicemail"/>

vm-disk-quota

This will put a limit to the length of voicemail messages a user can store. If 0 or missing doesn't make any limitation. Default is no limitation.

The following example will limit the user's voicemail box to 30 seconds. When the limit exceed, The caller will hear "mailbox is full, please try your call again later, goodbye".

<param name="vm-disk-quota" value="30"/>

vm-mailto

This is the user's email address default: undefined (originally called email-addr. Use vm-mailto instead)

This is defined in the directory for the particular user as a param. Multiple email addresses can be defined using a comma-separated list.

<domain name="mydomain.com"
  <user id="101">
    <params>
      <param name="vm-mailto" value="user101@mydomain.com"/>
    </params>
  </user>
</domain>

vm-notify-mailto

The address you want notification messages sent to default: same as vm-mailto

This is defined in the directory for the particular user as a param.

vm-password

This is the user's voicemail PIN

This is defined in the directory for the particular user as a param.

Example:

<domain name="mydomain.com"
  <user id="101">
    <params>
      <param name="vm-password" value="12345"/>
    </params>
  </user>
</domain>

vm-a1-hash

This parameter allows you to avoid sending the voicemail password in plain text. This is the same as the user a1-hash (see XML_User_Directory_Guide). Set this parameter to the MD5 hash of "userid:domain_name:vm-password". Example:

<domain name="mydomain.com"
  <user id="101">
    <params>
      <!-- The password has been left as a comment for example -->
      <!-- <param name="vm-password" value="12345"/> -->
      <!-- The MD5 hash of "101:mydomain.com:12345" -->
      <param name="vm-a1-hash" value="fd5184d9d36a2009c72e1571abf0493e"/>
    </params>
  </user>
</domain>

vm-email-all-messages

Setting to true will send all messages to vm-mailto address (attachment based on vm-attach-file param) default: false

This is defined in the directory for the particular user as a param.

vm-notify-email-all-messages

Setting to true will send a notify email to vm-notify-mailto when a vm is left (never has attachment) default: false

This is defined in the directory for the particular user as a param.

vm_cc

Setting this variable will inject the message into the specified voicemail mailbox.

This is defined in the directory for the particular user as a variable.

Example:

    <variable name="vm_cc" value="1001@mydomain.com" />

vm-keep-local-after-email

Setting to false will delete the local copy of the voicemail file after transmission of the mail message. When set to true the voicemail file will be kept locally and set as New for the phone to retrieve. default: true


Example:

<domain name="mydomain.com"
  <user id="101">
    <params>
      <param name="vm-keep-local-after-email" value="false"/>
    </params>
  </user>
</domain>

vm-attach-file

Setting to true will attach the audio file to the main email default: false

This is defined in the directory for the particular user as a param.

Example:

    <param name="vm-attach-file" value="true" />

vm-message-ext

This Parameter determines the storage type (and email type) for voicemails received and can be set per user. In order to use MP3 you must have mod_shout installed and loaded. The default is 'wav'.

Example:

    <param name="vm-message-ext" value="mp3"/>


vm_message_ext

Determines the storage type (and email type) for voicemails received and can be set per originating user or the Dial Plan. In order to use MP3 you must have mod_shout installed and loaded. The default is 'wav'. This may be set from the Dial Plan to overide the file type. If this variable is set it overides the vm-message-ext parameter. When this variable is set on the originating user the specified file type will apply to the receiver of the message.

Example:

    <variable name="vm_message_ext" value="mp3"/>

notify-template-file

the notify email will use the same template as the main email unless you define the new profile default: undefined

Using Outside Programs to Send Voicemail to Email

There are times when you don't want or need an email server on your PBX. For these times it would be nice to be able to use an outside program to send the email.

Below is a python script that does just that.

#!/usr/bin/python
#

"""
Copyright (c) 2009, DigiLord
All rights reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
    * Redistributions of source code must retain the above copyright
      notice, this list of conditions and the following disclaimer.
    * Redistributions in binary form must reproduce the above copyright
      notice, this list of conditions and the following disclaimer in the
      documentation and/or other materials provided with the distribution.
    * Neither the name of the <organization> nor the
      names of its contributors may be used to endorse or promote products
      derived from this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY <copyright holder> ''AS IS'' AND ANY
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL <copyright holder> BE LIABLE FOR ANY
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

"""

import smtplib
import sys
import MimeWriter
import mimetools
import mimetypes
import os
import StringIO
import re
import shutil
import time
import os.path
from optparse import OptionParser

SERVER = 'smtp.gmail.com'
PORT = 587
USER = 'YOUR_MAIL_USER'
PASSWORD = 'PASSWORD'
attach = ""

# Write data to a file given the filename.  Make a backup of the file FIRST!
def write_file(filename,data):
	fh = ""
	cur_time = time.time()
	if not fh:
		if not os.path.exists(filename):
			fh = open(filename,'w')
		else:
			#print "WARNING: %s exists!  Moving it to %s.bak.%s" % (filename,filename,cur_time)
			shutil.move(filename,"%s.bak.%s" % (filename,cur_time))
			fh = open(filename,'w')
	
	fh.write(data)
	fh.close()

# send the mail
def send(sender,to,message,verbose=False):
    smtp = smtplib.SMTP(SERVER, PORT)
    if verbose:
	    smtp.set_debuglevel(1)
    smtp.ehlo()
    smtp.starttls()
    smtp.ehlo()
    smtp.login(USER,PASSWORD)
    smtp.sendmail(sender, to, message)
    smtp.quit()
	
	
def mail(sender='', to='', subject='', text='', attachments=None, verbose=False):
    """
    Usage:
        mail()
    Params:
        sender: sender's email address
        to: receipient email address
        subject: subject line
        text: Email message body main part.
        attachments: list of files to attach
    """
    message = StringIO.StringIO()
    writer = MimeWriter.MimeWriter(message)
    writer.addheader('To', to)
    writer.addheader('From', sender)
    writer.addheader('Subject', subject)
    writer.addheader('MIME-Version', '1.0')
    
    writer.startmultipartbody('mixed')
    
    # start with a text/plain part
    part = writer.nextpart()
    body = part.startbody('text/plain')
    part.flushheaders()
    body.write(text)

    # now add the attachments
    if attachments is not None:
        for a in attachments:
            filename = os.path.basename(a)
            ctype, encoding = mimetypes.guess_type(a)
            if ctype is None:
                ctype = 'application/octet-stream'
                encoding = 'base64'
            elif ctype == 'text/plain':
                encoding = 'quoted-printable'
            else:
                encoding = 'base64'
                
            part = writer.nextpart()
            part.addheader('Content-Transfer-Encoding', encoding)
            body = part.startbody("%s; name=%s" % (ctype, filename))
            print filename
            mimetools.encode(open(a, 'rb'), body, encoding)

    # that's all folks
	writer.lastpart()

	send(sender,to,message.getvalue(),verbose)
	
def validate_email(fromAddress):
    email_addr = re.compile(r'(([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?))')
    return bool(email_addr.search(fromAddress))


if __name__ == "__main__":
    	fromAddress = ""
	to = ""
	subject = ""
	infile = ""
	body = ""
	translate = ""
	tempfile = ""
	usestdin = False
	verbose = False
        delete = False
	log = False
	
	parser = OptionParser()
	parser.add_option('-f', dest='fromAddress', metavar='FROMADDRESS',help="The from address for the email")
	parser.add_option('-t', dest='toAddress', metavar='TOADDRESS',help="The to address for the email")
	parser.add_option('-s', dest='subject', metavar='SUBJECT',help="The subject for the email")
	parser.add_option('-a', dest='attachment', metavar='ATTACHMENT',help="The file to attach to the email")
	parser.add_option('-b', dest='body', metavar='BODY',help="The body of the email")
	parser.add_option('-x', dest='translate', metavar='TRANSLATE',help="Translate the attachment using a translator program.\ntiff2pdf is the only supported option at this time.")
	parser.add_option('-i', dest='use_stdin', action="store_true", default=False,help="Use standard in as the input for the email message.")
	parser.add_option('-d', dest='delete', action="store_true", default=False,help="Delete the attachments when done processing.")
	parser.add_option('-v', dest='verbose', action="store_true", default=False,help="Verbose output for debugging.")
	parser.add_option('-l', dest='log', action="store_true", default=False,help="Log the message to a file stored in /tmp/sendemail.log")

	(options, args) = parser.parse_args()

	if options.fromAddress:
	    fromAddress = options.fromAddress
	    if not validate_email(fromAddress):
		print "Invalid From email address.  Please try again."
		exit(1)
	if options.toAddress:
	    to = options.toAddress
	    if not validate_email(to):
		print "Invalid To email address.  Please try again."
		exit(1)
	if options.subject: subject = options.subject
	if options.attachment: infile = options.attachment
	if options.body: body = options.body
	if options.translate: translate = options.translate
	if options.use_stdin: usestdin = options.use_stdin
	if options.verbose: verbose = options.verbose
	if options.delete: delete = options.delete
	if options.log: log = options.log

	if usestdin is True:
		message = ""
                attachment = infile
		for line in sys.stdin:
			message += line
		to_field = re.compile(r'To: <(([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?))>')
		if to_field.search(message):
		    to_match = to_field.search(message)
		    to = str(to_match.group(1))
		if log:
		    write_file('/tmp/sendemail.log',message)
		send(fromAddress,to,message,verbose)
	else:
		if translate == 'tiff2pdf':
			tempfile = "/tmp/%s.pdf" % os.path.basename(infile)
			command = "tiff2pdf %s -o %s" % (infile, tempfile)
			os.system(command)
			attachment = tempfile
		else:
			attachment = infile
		
		attach=[attachment]

		mail(sender=fromAddress, to=to, subject=subject, text=body, attachments=attach, verbose=verbose)
	
	# delete our temporary file - it's up to the caller to delete the attachments, if they want
	if tempfile:
		os.unlink(tempfile)
	if delete and attachment:
		os.unlink(attachment)

Make the following changes to /usr/local/freeswitch/autoload_configs/switch.conf.xml:

    <param name="mailer-app" value="/usr/local/freeswitch/scripts/sendemail.py"/>
    <param name="mailer-app-args" value="-i -d -f freeswitch@mydomain.com -t"/>

Send_mail setting

To enable email setting for voicemail, make sure the following two lines are configured correctly in switch.conf.xml

    <param name="mailer-app" value="sendmail"/>
    <param name="mailer-app-args" value="-t"/>

Note - On CentOS and possibly other OSes, `sendmail` isn't in the non-root PATH so you'll want to specify the entire path in the mailer-app value or modify your PATH prior to running FreeSWITCH™.

Exim4 settings

VM to email notification can also use other MTAs such as Debian's default Exim4. For email notification basically mod_voicemail constructs an email message that is then passed to standard input of the application defined in the "mailer-app" param found in switch.conf.xml.

The MTA application then needs to be configured in a way so that the recipients of the message are obtained from the To:, Cc:, and Bcc: header lines of the message passed to it. This is achieved in Exim4 with the -t option.

However, FS also adds another argument with the To: address to the command defined in the parameters above, so that the final command would look like:

cat /tmp/mail.12336173682b88 | exim4 -t someone@someaddress.net

If you have set:

    <param name="mailer-app" value="exim4"/>
    <param name="mailer-app-args" value="-t"/>

This is because as documented in O'Reilly Sendmail's book, some versions of Sendmail add argument addresses to those obtained from the headers and also as a good measure to send the To: address to applications that cannot parse the headers in the email msg.

Exim's default behavior however is that these extra addresses specify addresses to which the message is NOT to be delivered. So in the command line described above "someone@someaddress.net" is the actual recipient of the email message, but exim's default behavior takes the argument from the command line and substracts the "someone@someaddress.net" email address from the To: headers of the actual message, leaving it with no recipients at all.

Exim can be made to add the argument instead of subtracting it by setting the option extract_addresses_remove_arguments false in it's config and then you can use:

    <param name="mailer-app" value="exim4"/>
    <param name="mailer-app-args" value="-t"/>

But if you do not want to go through the hassle of changing exim's configuration, then you could also overcome the "extra" argument using a script such as:

eximcompat.sh

#!/bin/bash
exec exim4 -t

And then pointing the mailer app to this script:

    <param name="mailer-app" value="/usr/local/bin/eximcompat.sh"/>
    <!-- <param name="mailer-app-args" value="-t"/> -->

Windows settings

Windows_email

Example setting in switch.conf.xml for sending email on windows.

   <param name="mailer-app" value="msmtp"/>


Mail via PHP

PHP_email

Example setting in switch.conf.xml for sending email with PHP mailer. Make sure the path to php is correct for mailer-app.

   <param name="mailer-app" value="/usr/bin/php /usr/local/www/freeswitch/mailer_app.php"/>
   <param name="mailer-app-args" value=""/>

nullmailer settings

nullmailer is installed sometimes as a sendmail service. Make sure the following two lines are configured correctly in switch.conf.xml

    <param name="mailer-app" value="sendmail"/>
    <param name="mailer-app-args" value=""/>
    <-- don't comment out the args line, leave it in with no value -->

If you don't take out the -t default argument, nullmailer will create duplicate emails.

Example

Send Voice Mail to Email

The following is an example of sending a voicemail to email

 <include>
 <user id="1001" number-alias="1001">
   <params>
     <param name="password" value="1234"/>
     <param name="vm-password" value="4321"/>
     <param name="vm-email-all-messages" value="true"/>
     <param name="vm-attach-file" value="true"/>
     <param name="vm-mailto" value="example@yahoo.com"/>
   </params>>
   <variables>
     <variable name="accountcode" value="1001"/>
     <variable name="user_context" value="default"/>
   </variables>
 </user>
 </include>

Send Call To Voice Mail

The following is an example of sending a call to voicemail after you've decided that a user isn't available.

<action application="answer"/>
<action application="voicemail" data="default $${domain} $1"/>

where default is the profile name (must be configured in voicemail.conf.xml), $${domain} is (obviously) the domain (in this case the system-wide domain setting for your switch from vars.xml) and $1 is the dialed extension.

Check Voice Mail

The following is an example of checking vm (will prompt for PIN if ${voicemail_authorized} is not "true")

<action application="voicemail" data="check $${voicemail_profile} $${domain} $1"/>

The following example will allow the user to check vm whether they're "voicemail_authorized" or not. If voicemail_authorized=true , then user can access voicemail without prompting for password. If it's set to false, then the system will ask to enter the password. I found that even if you don't put <auth> in the following example, it will still check if it is authed. Someone please verify.

<action application="voicemail" data="check auth $${voicemail_profile} $${domain} $1"/>

To automatically pass all registered user on your domain without prompting to enter the password:

<action application="set" data="voicemail_authorized=${sip_authorized}"/>
<action application="voicemail" data="check auth $${voicemail_profile} $${domain} $1"/>

Retrieve Voice Mail Via Web Interface

Configuration

To enable the web interface for voice mail, you must first install/enable mod_xml_rpc.

You also need to enable the user or domain to use the web interface using #http-allowed-api

There are two different URLs for retrieving voice mail via a browser.
The following are functionally equivalent:

  • http://fs.ip:8080/api/voicemail/web
  • http://fs.ip:8080/domains/this/api/voicemail/web

Enter the username and password in the challenge box. When authorized, the list of current voice mails will be displayed.
Note: use the actual IP address (or domain name) and not something like 127.0.0.1 or "localhost" because it won't work.
Domains are used in various circumstances. Here are some scenarios:

  • your.domain.com is on the public Internet

In this case you could do this:

http://your.domain.com:8080/api/voicemail/web

Log in with user and password and you are in
Alternatively, you could use the IP address:

http://1.2.3.4:8080/api/voicemail/web

Then login with user@your.domain.com and password
Finally, you could even do this:

http://1.2.3.4:8080/domains/your.domain.com/api/voicemail/web

And log in with just user and password (no @your.domain.com)

Retrieve Voice Mail Via IMAP Interface

This is not implemented yet.

See Bounty#IMAP integration of voicemail

Configuration Parameters

file-extension

This is the extension which you want to use for the voicemail messages to be recorded. The default is wav but can be gsm, raw, ul, al, etc.

default

     <param name="file-extension" value="wav"/>

Key FS Mapping

mod_voicemail key map

terminator-key

default

     <param name="terminator-key" value="#"/>

max-login-attempts

default

     <param name="max-login-attempts" value="3"/>

digit-timeout

default

     <param name="digit-timeout" value="10000"/>

max-record-len

default

     <param name="max-record-len" value="300"/>

tone-spec

default

     <param name="tone-spec" value="%(1000, 0, 640)"/>

play-new-messages-key

default

     <param name="play-new-messages-key" value="1"/>

play-saved-messages-key

default

     <param name="play-saved-messages-key" value="2"/>

main-menu-key

default

     <param name="main-menu-key" value="0"/>

config-menu-key

default

     <param name="config-menu-key" value="5"/>

record-greeting-key

default

     <param name="record-greeting-key" value="1"/>

choose-greeting-key

default

     <param name="choose-greeting-key" value="2"/>

record-name-key

default

     <param name="record-name-key" value="3"/>

record-file-key

default

     <param name="record-file-key" value="3"/>

listen-file-key

default

     <param name="listen-file-key" value="1"/>

save-file-key

default

     <param name="save-file-key" value="2"/>

delete-file-key

default

     <param name="delete-file-key" value="7"/>

undelete-file-key

default

     <param name="undelete-file-key" value="8"/>

email-key

default

     <param name="email-key" value="4"/>

pause-key

default

     <param name="pause-key" value="0"/>

restart-key

default

     <param name="restart-key" value="1"/>

ff-key

default

     <param name="ff-key" value="6"/>

rew-key

default

     <param name="rew-key" value="4"/>

odbc-dsn

This option allows you to override the default sqlite with an ODBC handle. You can use any valid DSN from your odbc.ini to store your voicemail configuration

default

     <param name="odbc-dsn" value="dsn:user:pass"/>

record-silence-threshold

This parameter defines an 'energy level', it is a numeric value of how "quiet" the channel is.
See DP Tool 'wait_for_silence' for more info.

default

     <param name="record-silence-threshold" value="200"/>

record-silence-hits

This parameter defines how long the "energy" needs to remain under the record-silence-threshold to end the recording.
See DP Tool 'wait_for_silence' for more info.

default

     <param name="record-silence-hits" value="2"/>

email-from

Setting this value will set the from address on the email sent

   <param name="email-from" value=""/>

default

     <param name="email-from" value="${voicemail_account}@${voicemail_domain}"/>

Database Schema

This will be automatically created by FreeSWITCH if it does not already exist.

  CREATE TABLE voicemail_msgs (
     created_epoch INTEGER,
     read_epoch    INTEGER,
     username      VARCHAR(255),
     domain        VARCHAR(255),
     uuid          VARCHAR(255),
     cid_name      VARCHAR(255),
     cid_number    VARCHAR(255),
     in_folder     VARCHAR(255),
     file_path     VARCHAR(255),
     message_len   INTEGER,
     flags         VARCHAR(255),
     read_flags    VARCHAR(255),
     forwarded_by  VARCHAR(255)
  );
  CREATE TABLE voicemail_prefs (
     username        VARCHAR(255),
     domain          VARCHAR(255),
     name_path       VARCHAR(255),
     greeting_path   VARCHAR(255),
     password        VARCHAR(255)
  );

API

vm_boxcount

vm_boxcount can be called from console, xml_rpc or any other interface that exposes FreeSWITCH API.

The function takes the following arguments:

<user>@<domain> [|[new|saved|new-urgent|saved-urgent|all]]

and defaults to "new".

voicemail_inject

<user>@<domain>[@<profile>] <sound_file> [<cid_num>] [<cid_name>]

voicemail_inject is used to add an arbitrary sound file to a users voicemail mailbox.

FAQ

How do I reload new configuration without restarting FreeSWITCH?

If you happened to change settings in autoload_configs/voicemail.conf.xml and would like to make it effective without restarting FreeSWITCH, enter the following command in console mode in sequence:

reloadxml
reload mod_voicemail

Do I need a text-to-speech engine installed?

No, it will work with sound files or a text-to-speech engine.

How do I install sound files?

A: make sounds-install

Voicemail Voice Prompt Problem

If you encounter a problem where the voice mail prompts are either missing, or fail to play with this error on the console:

switch_ivr_phrase_macro() Macro [voicemail_config_menu] did not match any patterns

This is caused by a missing voicemail prompt sound file. You will need to perform the corrective command below in the FreeSWITCH source directory:

make vm-sync

After you run the make vm-sync, you'll need to do a reloadxml at the FreeSWITCH console, or restart FreeSWITCH.

Can I share voicemail boxes between multiple phones/users?

There is 2 way to do this, the correct way would be to use the subscribe feature of your phone to monitor a particular mailbox :

The phones in question all need to support using SUBSCRIBE to monitor their mailbox.
Phones that use other methods (ie. gratuitous/parasitic "NOTIFY" style) will not work.
Other concerns you may face include: whether you can configure the extension dialed when you press the 'retrieve' button.
This configuration tested successfully on two SNOM 320 handsets, but fails on the Cisco 7960 because it does not use SUBSCRIBE.

The second way is:

To populate the param MWI-Account of the directory user (or domain) with user@domain of the voicemail you want to monitor.
This will force sofia to send the MWI info for that mailbox even if you registred for another phone. This method only allow you to monitor mailbox


FreeSWITCH configuration

In each user's directory entry, add a variable named 'mailbox' that looks like this:

  <variable name="mailbox" value="1500"/>

This sets the stage for which mailbox they're actually going to use, shared or not.. it is used ONLY in the dialplan.
Change your dialplan to reflect this:

The old entry:

  <action application="voicemail" data="default ${domain_name} ${dialed_extension}"/>

The new entry:

  <action application="voicemail" data="default ${domain_name} ${user_data(${dialed_extension}@${domain_name} var mailbox)}"/>

SNOM 320 configuration

This configuration tested with firmware 7.1.30 and newer.

  • Under 'Identity-->Login', set Mailbox to the shared box number.

See Also

/usr/bin/python /home/chronos_client/persistent/freeswitch.app/conf/scripts/sendemail.py -l -i -d -f revolutionpbx@chronostelecom.com -t
Personal tools
Community
Support FreeSWITCH