meta data for this page

MMS support

A community member, kop316, has made great progress on MMS support. You can download mmsd-tng from Debian.

On installing mmsd-tng, you need to restart your phone or start mmsd-tng with

systemctl --user start mmsd-tng

You can also check the status of mmsd-tng with:

systemctl --user status mmsd-tng

Chatty is the recommended way to chat via MMS, and is available in Mobian. You will need to set your APN, MMSC, and MMS Proxy (if needed) in Chatty and activate Mobile Data for MMS to work.

Note that while Moddem Manager can support multiple APNs at a time, this functionality is not yet supported in `mmsd-tng` or `GNOME Control Center`

Advanced

The instructions below are for if you want to run mmsd-tng manually.

When you first run mmsd-tng, it autopopulates a settings file at $HOME/.mms/modemmanager/mms, but you can edit it yourself. Make sure mmsd-tng is turned off before editing the file (systemctl --user stop mmsd-tng), or changes will be overwritten:

[Modem Manager]
CarrierMMSC=http://mmsc.invalid
MMS_APN=apn.invalid
CarrierMMSProxy=NULL
AutoProcessOnConnection=true
AutoProcessSMSWAP=false

If you are not using Chatty, we will need to edit the file $HOME/.mms/modemmanager/mms. If you are using chatty, the settings can be directly edited within chatty If you look up the APN settings for your carrier (in GNOME Settings, for example, or in the GNOME upstream mobile-broadband-provider-info files) you should be able to fill out the fields (last of the three is optional). Make sure that the APN setting in chatty and the setting in Gnome Settings under Mobile Network ⇒ Access Point Names match, otherwise you will see an error in the logs “The modem is not connected to the correct APN!” and you won't see the MMS in chatty. Also realize that your mobile data needs to be on in order to receive MMS.

Here is my example for Verizon USA:

CarrierMMSC=http://mms.vtext.com/servlets/mms
MMS_APN=vzwinternet

Another example for T-Mobile USA:

CarrierMMSC=http://mms.msg.eng.t-mobile.com/mms/wapenc
MMS_APN=fast.t-mobile.com

T-Mobile may alternatively use the mobilenet APN.

Here is one for telus

CarrierMMSC=http://aliasredirect.net/proxy/mmsc
MMS_APN=sp.telus.com
CarrierMMSProxy=74.49.0.18:80 

Note that you need the IP address/domain name AND the port for the MMS Proxy!

We need to now restart mmsd-tng since we changed the file:

systemctl --user restart mmsd-tng

You can also check the status of mmsd-tng with:

systemctl --user status mmsd-tng

If you want to try sending an MMS manually, You can use the python script at: https://gitlab.com/kop316/mmsd/-/blob/master/test/send-message

python test/send-message --help

Shows you how to format the message. An example to send a group MMS:

python test/send-message "+10123456789,+12223334444" "" "cid-1,text/plain,/home/mobian/text.txt"

“cid-1” is the filename that the file is, “” is where you would put SMIL, “text/plain” is the MIMEtype of the object, and “/home/mobian/text.txt” is the absolute path of the file.

an example to send a picture:

python test/send-message "+10123456789" "" "cid-1,image/jpeg,/home/mobian/img.jpg"

Note that you can mix and match.

Here is also sample code to send an MMS from python:

#!/usr/bin/python

import pydbus
import gi.repository 
from pydbus import SessionBus
from gi.repository import GLib
bus = SessionBus()
TestServer = bus.get("org.ofono.mms", "/org/ofono/mms/modemmanager")

options = GLib.Variant('a{sv}', {
    'DeliveryReport': GLib.Variant('b', False),
    'Subject': GLib.Variant('s', "Test Subject!!")
})

TestServer.SendMessage(["+1XXXXXXXXXX"], options, [("cid-1", "text/plain", "/home/mobian/Test-MMS/text.txt")])

This example shows how you can manually override the request for a Delivery report, and you can add a Subject to the MMS.

Other Clients

DIY python

An example of extracting the MMS file (example picture) follow the instructions below:

Clone the repository python-messaging:

> git clone https://www.github.com/davegermiquet/python-messaging.git
> cd python-messaging
> python setup.py install

create a python script that is like the following called extractmms.py

import sys
from messaging.mms.message import MMSMessage
path = sys.argv[1]
mms = MMSMessage.from_file(path)

print(mms.headers['From'])            
for data_part in mms.data_parts:
    datacontent=data_part.headers['Content-Type']
    if datacontent is not None:
        if 'Name' in datacontent[1]:
            print(datacontent[1])
            filename = datacontent[1]['Name']
            file_to_save = open(data_part.headers['Content-Type'][1]['Name'],'wb')
            file_to_save.write(data_part.data)
            file_to_save.close()

Look in the /home/mobian/.mms/modemmanager

You'll see files similar to this:

-rw-r--r-- 1 mobian mobian     35 Apr 25 15:04 EAF3794E6976ED658AE16353C998AC927FFE7778.status
-rw------- 1 mobian mobian  99943 Apr 25 15:04 EAF3794E6976ED658AE16353C998AC927FFE7778

Run the script above like this:

> python3 ./extractmms.py EAF3e794E6976ED658AE16353C998AC927FFE7778 

{'Name': '2c58dc7a3.png'}

> the picture is saved in the current folder named with the output from the script above

mms2mail

this tool act as a gateway between mms and. It convert received mms in mail stored in a mbox (unix standard mails storage). And accept mail through smtp which are converted to mms and sent by mmsd.

git clone https://gitea.geodock.egeo.net.eu.org/Public/mms2mail.git
cd mms2mail
make deb-deps install

In order to activate the daemon :

make configure start

Mbox path, mail metadata and listening port can be customized with the configuration file mms2mail.ini (~/.mms/modemmanager/mms2mail.ini). Default value are used if not specified :

[mail]
mailbox = /var/mail/$USER  ; the mailbox where mms are appended
user = $USER               ; the user account specified as recipient
domain = $HOSTNAME         ; the domain part appended to phone number and user
attach_mms = false         ; whether to attach the full mms binary file
delete_from_mmsd = false   ; delete mms from mmsd storage upon successful conversion

[smtp]
hostname = localhost
port = 2525

To configure your mail client you need to specify the following smtp server : localhost:2525 without authentication and without TLS As geary does not support local mbox file, you will need a local imap server (dovecot work well and is packaged in debian)

If you like Mutt put this line in your : ~/.muttrc

set smtp_url = "smtp://localhost:2525"
set ssl_starttls = no
set ssl_force_tls = no